public static List <ClassDefinition> ProcessCSharpSyntaxTree(CompilationUnitSyntax root) { var classes = new List <ClassDefinition>(); foreach (var classDeclarationSyntax in root.DescendantNodes().OfType <ClassDeclarationSyntax>()) { var classDef = new ClassDefinition { Name = classDeclarationSyntax.Identifier.Text }; classes.Add(classDef); foreach (var methodDeclaration in classDeclarationSyntax.DescendantNodes() .OfType <MethodDeclarationSyntax>()) { var normalizeWhitespace = methodDeclaration.Body.Statements.Select(x => x.NormalizeWhitespace("\t", true).ToString()); var methodDef = new MethodDefinition { Name = methodDeclaration.Identifier.Text, Code = string.Join('\n', normalizeWhitespace) // normalizeWhitespace.ToString() //Formatter.Format(normalizeWhitespace, _workspace).ToString().Split('\n') }; methodDef.Arguments.AddRange( methodDeclaration.ParameterList.Parameters .Select(x => { var parameterDefinition = new MethodDefinition.MethodParameterDefinition(x.Identifier.Text); parameterDefinition.Variable.TypeRef = ResolveType(x.Type); return(parameterDefinition); })); methodDef.Body.ParentMethod = methodDef; foreach (var methodParameterDefinition in methodDef.Arguments) { methodDef.Body.LocalVariables.Add(methodParameterDefinition.Variable); } ProcessRoslynBlockIntoWandaBlock(methodDeclaration.Body, methodDef.Body); classDef.Methods.Add(methodDef); } } return(classes); }
public ParameterVariable([NotNull] MethodDefinition.MethodParameterDefinition parameterDefinition) { ParameterDefinition = parameterDefinition ?? throw new ArgumentNullException(nameof(parameterDefinition)); }