private static IEnumerable<SyntaxMethod> GetSyntaxMethods() { var methods = ( from method in typeof(Syntax).GetMethods() where !( method.Name.StartsWith("Parse") || method.Name.StartsWith("Get") ) && typeof(SyntaxNode).IsAssignableFrom(method.ReturnType) select method ).ToArray(); var anonymousMethods = new List<MethodInfo>(); foreach (var type in _anonymousMethodTypes) { var maxParameters = methods.Where(p => p.ReturnType == type).Max(p => p.GetParameters().Length); anonymousMethods.Add(methods.Single(p => p.ReturnType == type && p.GetParameters().Length == maxParameters)); } foreach (var method in methods) { var result = new SyntaxMethod(method); yield return result; if (anonymousMethods.Contains(method)) { result = new SyntaxMethod(method); result.Parameters.Insert(0, new SyntaxParameter { Name = "modifiers", ParameterType = typeof(SyntaxTokenList), IsOptional = true }); yield return result; } } yield return new SyntaxMethod { Name = "AwaitExpression", ReturnType = GetAwaitType(), Parameters = { new SyntaxParameter { Name = "expression", ParameterType = typeof(ExpressionSyntax), IsOptional = true } } }; }
public Factory(SyntaxMethod method) { Name = method.Name; Parameters = new List<FactoryParameter>(); foreach (var parameter in method.Parameters) { if ( parameter.ParameterType == typeof(SyntaxToken) && parameter.Name == "identifier") { Parameters.Add(new FactoryParameter( parameter.Name, typeof(string), typeof(string).Name, false, false, false )); } else if ( method.ReturnType.Name == "IdentifierNameSyntax" && parameter.Name == "name" ) { Parameters.Add(new FactoryParameter( "identifier", typeof(string), typeof(string).Name, false, false, false )); } else if ( method.ReturnType.Name == "OperatorDeclarationSyntax" && parameter.Name == "operatorToken" ) { Parameters.Add(new FactoryParameter( "operator", typeof(SyntaxToken), "Operator", false, false, false )); } else if ( method.ReturnType.Name == "ConversionOperatorDeclarationSyntax" && parameter.Name == "implicitOrExplicitKeyword" ) { Parameters.Add(new FactoryParameter( "kind", typeof(SyntaxToken), "ImplicitOrExplicit", false, false, false )); } else if (parameter.ParameterType == typeof(AttributeTargetSpecifierSyntax)) { Parameters.Add(new FactoryParameter( parameter.Name, typeof(AttributeTargetSpecifierSyntax), "AttributeTarget", false, false, false )); } else if (!Ignore(parameter)) { Parameters.Add(new FactoryParameter(parameter)); } } }
public Factory(SyntaxMethod method) { Name = method.Name; Parameters = new List <FactoryParameter>(); foreach (var parameter in method.Parameters) { if ( parameter.ParameterType == typeof(SyntaxToken) && parameter.Name == "identifier") { Parameters.Add(new FactoryParameter( parameter.Name, typeof(string), typeof(string).Name, false, false, false )); } else if ( method.ReturnType.Name == "IdentifierNameSyntax" && parameter.Name == "name" ) { Parameters.Add(new FactoryParameter( "identifier", typeof(string), typeof(string).Name, false, false, false )); } else if ( method.ReturnType.Name == "OperatorDeclarationSyntax" && parameter.Name == "operatorToken" ) { Parameters.Add(new FactoryParameter( "operator", typeof(SyntaxToken), "Operator", false, false, false )); } else if ( method.ReturnType.Name == "ConversionOperatorDeclarationSyntax" && parameter.Name == "implicitOrExplicitKeyword" ) { Parameters.Add(new FactoryParameter( "kind", typeof(SyntaxToken), "ImplicitOrExplicit", false, false, false )); } else if (parameter.ParameterType == typeof(AttributeTargetSpecifierSyntax)) { Parameters.Add(new FactoryParameter( parameter.Name, typeof(AttributeTargetSpecifierSyntax), "AttributeTarget", false, false, false )); } else if (!Ignore(parameter)) { Parameters.Add(new FactoryParameter(parameter)); } } }