Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
 public ParameterVariable([NotNull] MethodDefinition.MethodParameterDefinition parameterDefinition)
 {
     ParameterDefinition = parameterDefinition ?? throw new ArgumentNullException(nameof(parameterDefinition));
 }