Exemple #1
0
        private void MkTypes()
        {
            //add type declaration and initialization for duplicate exported types
            foreach (KeyValuePair <string, FuncTerm> dt in typeContext.DuplicateExportedTypes)
            {
                string           typeName         = typeContext.GetNextTypeName(dt.Key);
                ExpressionSyntax typeExpr         = typeContext.GetTypeExpr(typeName);
                ExpressionSyntax declaredTypeExpr = typeContext.PTypeToCSharpExpr(dt.Value);
                typeContext.AddTypeDeclaration(typeName);
                typeContext.AddTypeInitialization(typeExpr, declaredTypeExpr);
            }

            var typeDeclarations = new List <SyntaxNode>();

            typeDeclarations.AddRange(typeContext.TypeDeclaration);

            string staticMethodName = "Types_" + Path.GetFileNameWithoutExtension(cSharpFileName.ToLower());
            MethodDeclarationSyntax staticInitializer =
                MethodDeclaration(PredefinedType(Token(SyntaxKind.VoidKeyword)), Identifier(staticMethodName))
                .WithModifiers(TokenList(Token(SyntaxKind.StaticKeyword), Token(SyntaxKind.PublicKeyword)))
                .WithBody(Block(typeContext.TypeInitialization)).NormalizeWhitespace();

            typeDeclarations.Add(staticInitializer);

            SyntaxNode typesClass = generator.ClassDeclaration(
                "Types",
                null,
                Accessibility.Public,
                DeclarationModifiers.Partial,
                members: typeDeclarations);

            members.Add(typesClass);
        }