private void WriteMethods( TextWriter textWriter, ICodegenClass clazz) { foreach (var method in clazz.PublicMethods) { method.Render(textWriter, true); } foreach (var method in clazz.PrivateMethods) { method.Render(textWriter, false); } }
private void WriteClass( TextWriter textWriter, ICodegenClass clazz, Action textAction) { textWriter.Write(" public class {0}", clazz.ClassName); if (clazz.InterfaceImplemented != null) { textWriter.Write(" : {0}", clazz.InterfaceImplemented.FullName); } textWriter.WriteLine(); textWriter.WriteLine(" {{"); textWriter.WriteLine(" }}"); }
private void WriteFields( TextWriter textWriter, ICodegenClass clazz) { if (clazz.Members.HasFirst()) { foreach (var member in clazz.Members) { string modifiers = "private"; string typeName = CodeGenerationHelper.CompliantName(member.MemberType); textWriter.WriteLine("{0} {1} {2};", modifiers, typeName, member.MemberName); } textWriter.WriteLine(); } }
private string GenerateCode( IDictionary <Type, string> namespaces, ICodegenClass clazz, ICollection <ICodegenMember> memberSet, string classLevelComment) { var writer = new StringWriter(); WriteUsingDeclarations(writer, namespaces.Values); WriteNamespace(writer, clazz.Namespace, () => WriteClass(writer, clazz, () => { WriteFields(writer, clazz); WriteConstructor(writer, clazz); WriteMethods(writer, clazz); })); return(writer.ToString()); }
public EventPropertyGetter Compile( ICodegenClass clazz, ClassLoaderProvider classLoaderProvider, Type interfaceClass, string classLevelComment) { // build members and namespaces var memberSet = new LinkedHashSet <ICodegenMember>(clazz.Members); var classes = clazz.GetReferencedClasses(); var imports = CompileImports(classes); // generate code var code = GenerateCode(imports, clazz, memberSet, classLevelComment); var version = LanguageVersion.Latest; var options = new CSharpParseOptions( languageVersion: version, documentationMode: DocumentationMode.None, kind: SourceCodeKind.Regular, preprocessorSymbols: null); var syntaxTree = CSharpSyntaxTree.ParseText(code, options); _compilation = _compilation.AddSyntaxTrees(syntaxTree); using (var stream = new MemoryStream()) { var emitResult = _compilation.Emit(stream); if (emitResult.Success) { stream.Seek(0, SeekOrigin.Begin); var assembly = Assembly.Load(stream.ToArray()); } else { var failures = emitResult.Diagnostics.Where(diagnostic => diagnostic.IsWarningAsError || diagnostic.Severity == DiagnosticSeverity.Error); } } throw new NotImplementedException(); }
private void WriteConstructor( TextWriter textWriter, ICodegenClass clazz) { textWriter.Write("public {0}", clazz.ClassName); // start constructor arguments textWriter.Write("("); textWriter.Write(string.Join(",", clazz.Members.Select(CompliantTypeAndName))); textWriter.Write(")"); textWriter.WriteLine(); // start constructor body textWriter.WriteLine("{{"); // start parameter assignments foreach (var member in clazz.Members) { textWriter.WriteLine("this.{0} = {0};", member.MemberName); } // end constructor body textWriter.WriteLine("}}"); textWriter.WriteLine(""); }