private static string GenerateSyntax( ICollection<ImportDecl> imports, CodegenClass clazz) { var builder = new StringBuilder(); var usingsList = CodeGenerationUtil.Importsdecl(imports); var namespaceUnit = NamespaceDeclaration(ParseName(clazz.Namespace)); // Generate the class using descending construction of the class elements // relative to the syntax tree. All items should be children of the namespaceUnit. namespaceUnit = namespaceUnit.AddMembers(clazz.CodegenSyntax()); // inner classes foreach (var inner in clazz.InnerClasses) { builder.Append("\n"); INDENT.Indent(builder, 2); CodeGenerationUtil.Classimplements( builder, inner.ClassName, inner.BaseList, false, false); GenerateCodeMembers( builder, inner.ExplicitMembers, inner.Ctor, 2); GenerateCodeCtor( builder, inner.ClassName, true, inner.Ctor, 1); GenerateCodeProperties( builder, true, inner.Properties.PublicProperties, inner.Properties.PrivateProperties, 1); GenerateCodeMethods( builder, true, inner.Methods.PublicMethods, inner.Methods.PrivateMethods, 1); INDENT.Indent(builder, 1); builder.Append("}\n"); } var membersList = SingletonList<MemberDeclarationSyntax>(namespaceUnit); var compilationUnit = CompilationUnit() .WithUsings(usingsList) .WithMembers(membersList) .NormalizeWhitespace(); return compilationUnit.ToFullString(); }
private static string GenerateCode( ICollection<ImportDecl> imports, CodegenClass clazz) { var builder = new StringBuilder(); CodeGenerationUtil.Importsdecl(builder, imports); CodeGenerationUtil.NamespaceDecl(builder, clazz.Namespace); CodeGenerationUtil.Classimplements(builder, clazz.ClassName, clazz.BaseList, true, false); // members GenerateCodeMembers(builder, clazz.ExplicitMembers, clazz.OptionalCtor, 2); // ctor GenerateCodeCtor(builder, clazz.ClassName, false, clazz.OptionalCtor, 1); // properties GenerateCodeProperties(builder, false, clazz.PublicProperties, clazz.PrivateProperties, 1); // methods GenerateCodeMethods(builder, false, clazz.PublicMethods, clazz.PrivateMethods, 1); // inner classes foreach (var inner in clazz.InnerClasses) { builder.Append("\n"); INDENT.Indent(builder, 2); CodeGenerationUtil.Classimplements( builder, inner.ClassName, inner.BaseList, false, false); GenerateCodeMembers( builder, inner.ExplicitMembers, inner.Ctor, 2); GenerateCodeCtor( builder, inner.ClassName, true, inner.Ctor, 1); GenerateCodeProperties( builder, true, inner.Properties.PublicProperties, inner.Properties.PrivateProperties, 1); GenerateCodeMethods( builder, true, inner.Methods.PublicMethods, inner.Methods.PrivateMethods, 1); INDENT.Indent(builder, 1); builder.Append("}\n"); } // close builder.Append(" }\n"); // class builder.Append("}\n"); // namespace return builder.ToString(); }