Exemplo n.º 1
0
        public bool InitTestClassGenContext(TestClassGenContext context, GenProxyClass item)
        {
            context.TargetName = item.TargetName;
            context.TargetDir  = item.TargetDir;

            context.SyntaxGenerator = SyntaxGenerator.GetGenerator(m_Project);
            return(true);
        }
Exemplo n.º 2
0
        public SyntaxNode GenFunctionBoby(TestClassGenContext context, IMethodSymbol methodSymbol, INamedTypeSymbol typeSymbol, SyntaxGenerator syntaxGen)
        {
            // void foo() {};

            var variableIdentifier = syntaxGen.IdentifierName("m_Val");

            List <SyntaxNode> statements = new List <SyntaxNode>();

            statements.Add(syntaxGen.ReturnStatement(syntaxGen.IdentifierName("0")));

            return(syntaxGen.MethodDeclaration("Foo", null, null, null, Accessibility.Public, DeclarationModifiers.None, statements));;
        }
Exemplo n.º 3
0
        public void GenCode()
        {
            foreach (var item in mCodeGenConfig.ProxyClassItems)
            {
                Console.WriteLine("生成{0}类中", item.TargetName);

                TestClassGenContext context = new TestClassGenContext();

                if (InitTestClassGenContext(context, item))
                {
                    PreformProxyClassGeneration(context);
                }
            }
        }
Exemplo n.º 4
0
        public void PreformProxyClassGeneration(TestClassGenContext context)
        {
            var typeSymbol = context.TypeSymbol;
            var syntaxGen  = context.SyntaxGenerator;

            // Generate using
            var usingDirectives = new SyntaxNode[] { syntaxGen.NamespaceImportDeclaration("System") };

            // Generate normal method
            var normalMethodNodes = new List <SyntaxNode>();

            for (int i = 0; i < 1; ++i)
            {
                normalMethodNodes.Add(GenFunctionBoby(context, null, typeSymbol, syntaxGen));
            }

            var classDefin = syntaxGen.ClassDeclaration(context.TargetName,
                                                        typeParameters: null,
                                                        accessibility: Accessibility.Public,
                                                        modifiers: DeclarationModifiers.None,
                                                        baseType: null,
                                                        interfaceTypes: null,
                                                        members: normalMethodNodes);

            usingDirectives[0] = AddComment(usingDirectives[0]);

            SyntaxNode namespaceDeclaration = null;

            var finalNode = syntaxGen.CompilationUnit(usingDirectives.Union(new SyntaxNode[] { namespaceDeclaration ?? classDefin })).NormalizeWhitespace();

            var path = Path.Combine(context.TargetDir, context.TargetName);

            path = Path.ChangeExtension(path, ".cs");

            string str = SimplifyGenCode(context.TargetName, finalNode);

            using (var sw = File.CreateText(path))
            {
                sw.Write(str);
                Console.ForegroundColor = ConsoleColor.Red;
                Console.Write("代码生成完毕");
                Console.ReadKey();
            }
        }