public void GenerateCodeFromCompileUnit( System.CodeDom.CodeCompileUnit e , System.IO.TextWriter w , System.CodeDom.Compiler.CodeGeneratorOptions o) { throw new System.NotImplementedException(); }
public void GenerateCode(CodeDomGenerator.Language language) { switch (language) { case CodeDomGenerator.Language.CSharp: using (Microsoft.CSharp.CSharpCodeProvider provider = new Microsoft.CSharp.CSharpCodeProvider()) { System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions(); using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString)) { tw.Write("var {0} = ", provider.CreateEscapedIdentifier(VariableName)); provider.GenerateCodeFromExpression(InitExpression, tw, opts); tw.Write(";"); Value = tw.InnerWriter.ToString(); } } break; case CodeDomGenerator.Language.VB: using (Microsoft.VisualBasic.VBCodeProvider provider = new Microsoft.VisualBasic.VBCodeProvider()) { System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions(); using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString)) { tw.Write("Dim {0} = ", provider.CreateEscapedIdentifier(VariableName)); provider.GenerateCodeFromExpression(InitExpression, tw, opts); Value = tw.InnerWriter.ToString(); } } break; default: throw new NotImplementedException(language.ToString()); } }
protected override void RefreshValue() { using (Microsoft.VisualBasic.VBCodeProvider provider = new Microsoft.VisualBasic.VBCodeProvider()) { System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions(); using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString)) { tw.Write("Using "); if (UsingExpression != null) { provider.GenerateCodeFromExpression(UsingExpression, tw, opts); } tw.WriteLine(); tw.Indent++; if (Statements != null) { foreach (CodeStatement statement in Statements) { provider.GenerateCodeFromStatement(statement, tw, opts); } } tw.Indent--; tw.Write("End Using"); Value = tw.InnerWriter.ToString(); } } }
public void GenerateCode(CodeDomGenerator.Language language) { switch (language) { case CodeDomGenerator.Language.CSharp: using (Microsoft.CSharp.CSharpCodeProvider provider = new Microsoft.CSharp.CSharpCodeProvider()) { System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions(); using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString)) { tw.Write("continue;"); Value = tw.InnerWriter.ToString(); } } break; case CodeDomGenerator.Language.VB: using (Microsoft.VisualBasic.VBCodeProvider provider = new Microsoft.VisualBasic.VBCodeProvider()) { System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions(); using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString)) { tw.Write("Continue For"); Value = tw.InnerWriter.ToString(); } } break; default: throw new NotImplementedException(language.ToString()); } }
/// <summary> /// Writes the code to string in the specific language /// and returns the string /// </summary> public static string Create(Language language, string expression, RegexOptions options) { CodeCompileUnit unit = Create(expression, options); System.Text.StringBuilder builder = new System.Text.StringBuilder(); using (System.IO.StringWriter stringWriter = new System.IO.StringWriter(builder)) { System.CodeDom.Compiler.ICodeGenerator generator; switch (language) { case Language.CSharp: System.CodeDom.Compiler.CodeGeneratorOptions genOptions = new System.CodeDom.Compiler.CodeGeneratorOptions(); genOptions.BracingStyle = "C"; generator = new Microsoft.CSharp.CSharpCodeProvider().CreateGenerator(); generator.GenerateCodeFromCompileUnit(unit, stringWriter, genOptions); break; case Language.VisualBasic: generator = new Microsoft.VisualBasic.VBCodeProvider().CreateGenerator(); generator.GenerateCodeFromCompileUnit(unit, stringWriter, null); break; } return builder.ToString(); } }
public void GenerateCode(CodeDomGenerator.Language language) { switch (language) { case CodeDomGenerator.Language.CSharp: using (Microsoft.CSharp.CSharpCodeProvider provider = new Microsoft.CSharp.CSharpCodeProvider()) { System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions(); using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString)) { tw.Write("continue;"); Value = tw.InnerWriter.ToString(); } } break; case CodeDomGenerator.Language.VB: using (Microsoft.VisualBasic.VBCodeProvider provider = new Microsoft.VisualBasic.VBCodeProvider()) { System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions(); using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString)) { tw.Write("Continue Do"); Value = tw.InnerWriter.ToString(); } } break; default: throw new NotImplementedException(language.ToString()); } }
static void GenerateVBCodeForService(Uri metadataAddress, string outputFile) { MetadataExchangeClient mexClient = new MetadataExchangeClient(metadataAddress, MetadataExchangeClientMode.HttpGet); mexClient.ResolveMetadataReferences = true; MetadataSet metaDocs = mexClient.GetMetadata(); WsdlImporter importer = new WsdlImporter(metaDocs); ServiceContractGenerator generator = new ServiceContractGenerator(); System.Collections.ObjectModel.Collection<ContractDescription> contracts = importer.ImportAllContracts(); foreach (ContractDescription contract in contracts) { generator.GenerateServiceContractType(contract); } if (generator.Errors.Count != 0) throw new ApplicationException("There were errors during code compilation."); // Write the code dom. System.CodeDom.Compiler.CodeGeneratorOptions options = new System.CodeDom.Compiler.CodeGeneratorOptions(); options.BracingStyle = "C"; System.CodeDom.Compiler.CodeDomProvider codeDomProvider = System.CodeDom.Compiler.CodeDomProvider.CreateProvider("VB"); System.CodeDom.Compiler.IndentedTextWriter textWriter = new System.CodeDom.Compiler.IndentedTextWriter(new System.IO.StreamWriter(outputFile)); codeDomProvider.GenerateCodeFromCompileUnit(generator.TargetCompileUnit, textWriter, options); textWriter.Close(); }
public void GenerateCode(CodeDomGenerator.Language language) { switch (language) { case CodeDomGenerator.Language.CSharp: if (_csStatement != null) using (Microsoft.CSharp.CSharpCodeProvider provider = new Microsoft.CSharp.CSharpCodeProvider()) { System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions(); using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString)) { provider.GenerateCodeFromStatement(_csStatement, tw, opts); Value = tw.InnerWriter.ToString(); } } break; case CodeDomGenerator.Language.VB: if (_vbStatement != null) using (Microsoft.VisualBasic.VBCodeProvider provider = new Microsoft.VisualBasic.VBCodeProvider()) { System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions(); using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString)) { provider.GenerateCodeFromStatement(_vbStatement, tw, opts); Value = tw.InnerWriter.ToString(); } } break; default: throw new NotImplementedException(language.ToString()); } }
//FIXME: error handling void UpdateCliTypes(NSObjectProjectInfo pinfo, List <SyncObjcBackJob> typeSyncJobs) { var provider = System.CodeDom.Compiler.CodeDomProvider.CreateProvider("C#"); var options = new System.CodeDom.Compiler.CodeGeneratorOptions(); var writer = MonoDevelop.DesignerSupport.CodeBehindWriter.CreateForProject( new MonoDevelop.Core.ProgressMonitoring.NullProgressMonitor(), dnp); //group all the types by designer file var designerFile = new Dictionary <string, List <NSObjectTypeInfo> > (); foreach (var job in typeSyncJobs) { List <NSObjectTypeInfo> types; if (!designerFile.TryGetValue(job.DesignerFile, out types)) { designerFile[job.DesignerFile] = types = new List <NSObjectTypeInfo> (); } types.Add(job.Type); } //add in other designer types that exist in the designer files foreach (var ut in pinfo.GetTypes()) { if (!ut.IsUserType) { continue; } var df = ut.GetDesignerFile(); List <NSObjectTypeInfo> types; if (df != null && designerFile.TryGetValue(df, out types)) { if (!types.Any(t => t.ObjCName == ut.ObjCName)) { types.Add(ut); } } } updatingProjectFiles = true; try { foreach (var df in designerFile) { var ccu = GenerateCompileUnit(provider, options, df.Key, df.Value); writer.Write(ccu, df.Key); } writer.WriteOpenFiles(); foreach (var job in typeSyncJobs) { pinfo.InsertUpdatedType(job.Type); trackedFiles[job.HFile] = File.GetLastWriteTime(job.HFile); } } finally { updatingProjectFiles = false; } }
public void GenerateCode(CodeDomGenerator.Language language) { switch (language) { case CodeDomGenerator.Language.CSharp: using (Microsoft.CSharp.CSharpCodeProvider provider = new Microsoft.CSharp.CSharpCodeProvider()) { System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions(); using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString)) { tw.WriteLine("do"); tw.WriteLine("{"); tw.Indent++; if (Statements != null) foreach (CodeStatement statement in Statements) { provider.GenerateCodeFromStatement(statement, tw, opts); } tw.Indent--; tw.Write("} while ("); if (TestExpression != null) provider.GenerateCodeFromExpression(TestExpression, tw, opts); tw.WriteLine(");"); Value = tw.InnerWriter.ToString(); } } break; case CodeDomGenerator.Language.VB: using (Microsoft.VisualBasic.VBCodeProvider provider = new Microsoft.VisualBasic.VBCodeProvider()) { System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions(); using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString)) { tw.WriteLine("Do"); tw.Indent++; if (Statements != null) foreach (CodeStatement statement in Statements) { provider.GenerateCodeFromStatement(statement, tw, opts); } tw.Indent--; tw.Write("Loop Until "); if (TestExpression != null) provider.GenerateCodeFromExpression(TestExpression, tw, opts); tw.WriteLine(); Value = tw.InnerWriter.ToString(); } } break; default: throw new NotImplementedException(language.ToString()); } }
protected override void GenerateTransformCode(string directiveName, System.Text.StringBuilder codeBuffer, System.CodeDom.Compiler.CodeDomProvider languageProvider, System.Collections.Generic.IDictionary<string, string> requiresArguments, System.Collections.Generic.IDictionary<string, string> providesArguments) { base.GenerateTransformCode(directiveName, codeBuffer, languageProvider, requiresArguments, providesArguments); System.CodeDom.CodeMemberField codeMemberField = null; if (!System.String.IsNullOrEmpty(providesArguments["GeneratedResourceName"])) { codeMemberField = new System.CodeDom.CodeMemberField(new System.CodeDom.CodeTypeReference(typeof(string)), providesArguments["GeneratedResourceName"]); codeMemberField.Attributes = System.CodeDom.MemberAttributes.Abstract | System.CodeDom.MemberAttributes.Override | System.CodeDom.MemberAttributes.FamilyAndAssembly | System.CodeDom.MemberAttributes.FamilyOrAssembly; string s = requiresArguments["ProjectDefaultNamespace"]; if (!System.String.IsNullOrEmpty(requiresArguments["GeneratedCodeFolder"])) { if (!System.String.IsNullOrEmpty(s)) s += "."; s += requiresArguments["GeneratedCodeFolder"]; } if (!System.String.IsNullOrEmpty(requiresArguments["GeneratedResourceFile"])) { if (!System.String.IsNullOrEmpty(s)) s += "."; s += requiresArguments["GeneratedResourceFile"]; } codeMemberField.InitExpression = new System.CodeDom.CodePrimitiveExpression(s); System.CodeDom.Compiler.CodeGeneratorOptions codeGeneratorOptions = new System.CodeDom.Compiler.CodeGeneratorOptions(); codeGeneratorOptions.BlankLinesBetweenMembers = true; codeGeneratorOptions.IndentString = " "; codeGeneratorOptions.VerbatimOrder = true; codeGeneratorOptions.BracingStyle = "C"; using (System.IO.StringWriter stringWriter = new System.IO.StringWriter(codeBuffer, System.Globalization.CultureInfo.InvariantCulture)) { if (codeMemberField != null) languageProvider.GenerateCodeFromMember(codeMemberField, stringWriter, codeGeneratorOptions); } } if (!System.String.IsNullOrEmpty(providesArguments["GeneratedNamespace"])) { codeMemberField = new System.CodeDom.CodeMemberField(new System.CodeDom.CodeTypeReference(typeof(string)), providesArguments["GeneratedNamespace"]); codeMemberField.Attributes = System.CodeDom.MemberAttributes.Abstract | System.CodeDom.MemberAttributes.Override | System.CodeDom.MemberAttributes.FamilyAndAssembly | System.CodeDom.MemberAttributes.FamilyOrAssembly; string s = requiresArguments["ProjectDefaultNamespace"]; codeMemberField.InitExpression = new System.CodeDom.CodePrimitiveExpression(s); System.CodeDom.Compiler.CodeGeneratorOptions codeGeneratorOptions = new System.CodeDom.Compiler.CodeGeneratorOptions(); codeGeneratorOptions.BlankLinesBetweenMembers = true; codeGeneratorOptions.IndentString = " "; codeGeneratorOptions.VerbatimOrder = true; codeGeneratorOptions.BracingStyle = "C"; using (System.IO.StringWriter stringWriter = new System.IO.StringWriter(codeBuffer, System.Globalization.CultureInfo.InvariantCulture)) { if (codeMemberField != null) languageProvider.GenerateCodeFromMember(codeMemberField, stringWriter, codeGeneratorOptions); } } }
public void GenerateCode(CodeDomGenerator.Language language) { switch (language) { case CodeDomGenerator.Language.CSharp: using (Microsoft.CSharp.CSharpCodeProvider provider = new Microsoft.CSharp.CSharpCodeProvider()) { System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions(); using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString)) { tw.Write("new "); provider.GenerateCodeFromExpression(new CodeTypeReferenceExpression(TypeReference.ArrayElementType), tw, opts); tw.Write("["); for (int i = 0; i < Dimensions.Count; i++) { if (i > 0) { tw.Write(","); } provider.GenerateCodeFromExpression(Dimensions[i], tw, opts); } tw.Write("]"); Value = tw.InnerWriter.ToString(); } } break; case CodeDomGenerator.Language.VB: using (Microsoft.VisualBasic.VBCodeProvider provider = new Microsoft.VisualBasic.VBCodeProvider()) { System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions(); using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString)) { tw.Write("("); for (int i = 0; i < Dimensions.Count; i++) { if (i > 0) { tw.Write(","); } tw.Write("("); provider.GenerateCodeFromExpression(Dimensions[i], tw, opts); tw.Write(")-1"); } tw.Write(") as "); provider.GenerateCodeFromExpression(new CodeTypeReferenceExpression(TypeReference), tw, opts); Value = tw.InnerWriter.ToString(); } } break; default: throw new NotImplementedException(language.ToString()); } }
static void Main() { string outputFile = "c:\\temp\\test"; //<Snippet0> EndpointAddress mexAddress = new EndpointAddress("http://localhost:8000/ServiceModelSamples/service/mex"); //</Snippet0> //<Snippet1> MetadataExchangeClient mexClient = new MetadataExchangeClient(mexAddress); mexClient.ResolveMetadataReferences = true; MetadataSet metaSet = mexClient.GetMetadata(); //</Snippet1> //<Snippet2> WsdlImporter importer = new WsdlImporter(metaSet); System.Collections.ObjectModel.Collection <ContractDescription> contracts = importer.ImportAllContracts(); //</Snippet2> //<Snippet3> ServiceContractGenerator generator = new ServiceContractGenerator(); foreach (ContractDescription contract in contracts) { generator.GenerateServiceContractType(contract); } if (generator.Errors.Count != 0) { throw new Exception("There were errors during code compilation."); } //</Snippet3> // Write the code dom //<Snippet4> System.CodeDom.Compiler.CodeGeneratorOptions options = new System.CodeDom.Compiler.CodeGeneratorOptions(); options.BracingStyle = "C"; System.CodeDom.Compiler.CodeDomProvider codeDomProvider = System.CodeDom.Compiler.CodeDomProvider.CreateProvider("C#"); System.CodeDom.Compiler.IndentedTextWriter textWriter = new System.CodeDom.Compiler.IndentedTextWriter(new System.IO.StreamWriter(outputFile)); codeDomProvider.GenerateCodeFromCompileUnit(generator.TargetCompileUnit, textWriter, options); textWriter.Close(); //</Snippet4> Console.WriteLine(); Console.WriteLine("Press <ENTER> to terminate client."); Console.ReadLine(); }
protected string ComplieNameSpaceToString(CodeNamespace nameSpace) { using (Microsoft.CSharp.CSharpCodeProvider cprovider = new Microsoft.CSharp.CSharpCodeProvider()) { StringBuilder fileContent = new StringBuilder(); var option = new System.CodeDom.Compiler.CodeGeneratorOptions(); option.BlankLinesBetweenMembers = false; using (StringWriter sw = new StringWriter(fileContent)) { cprovider.GenerateCodeFromNamespace(nameSpace, sw, option); } return(fileContent.ToString()); } }
public void GenerateCode(CodeDomGenerator.Language language) { switch (language) { case CodeDomGenerator.Language.CSharp: using (Microsoft.CSharp.CSharpCodeProvider provider = new Microsoft.CSharp.CSharpCodeProvider()) { System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions(); using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString)) { tw.Write("new "); provider.GenerateCodeFromExpression(new CodeTypeReferenceExpression(TypeReference.ArrayElementType), tw, opts); tw.Write("["); for (int i = 0; i < Dimensions.Count; i++) { if (i > 0) tw.Write(","); provider.GenerateCodeFromExpression(Dimensions[i], tw, opts); } tw.Write("]"); Value = tw.InnerWriter.ToString(); } } break; case CodeDomGenerator.Language.VB: using (Microsoft.VisualBasic.VBCodeProvider provider = new Microsoft.VisualBasic.VBCodeProvider()) { System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions(); using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString)) { tw.Write("("); for (int i = 0; i < Dimensions.Count; i++) { if (i > 0) tw.Write(","); tw.Write("("); provider.GenerateCodeFromExpression(Dimensions[i], tw, opts); tw.Write(")-1"); } tw.Write(") as "); provider.GenerateCodeFromExpression(new CodeTypeReferenceExpression(TypeReference), tw, opts); Value = tw.InnerWriter.ToString(); } } break; default: throw new NotImplementedException(language.ToString()); } }
public void GenerateCode(CodeDomGenerator.Language language) { switch (language) { case CodeDomGenerator.Language.CSharp: using (Microsoft.CSharp.CSharpCodeProvider provider = new Microsoft.CSharp.CSharpCodeProvider()) { System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions(); using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString)) { if (!_eq) { tw.Write("!"); } tw.Write("ReferenceEquals("); provider.GenerateCodeFromExpression(_left, tw, opts); tw.Write(", "); provider.GenerateCodeFromExpression(_right, tw, opts); tw.Write(")"); Value = tw.InnerWriter.ToString(); } } break; case CodeDomGenerator.Language.VB: using (Microsoft.VisualBasic.VBCodeProvider provider = new Microsoft.VisualBasic.VBCodeProvider()) { System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions(); using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString)) { provider.GenerateCodeFromExpression(_left, tw, opts); if (_eq) { tw.Write(" Is "); } else { tw.Write(" IsNot "); } provider.GenerateCodeFromExpression(_right, tw, opts); Value = tw.InnerWriter.ToString(); } } break; default: throw new NotImplementedException(language.ToString()); } }
public static byte[] GenerateAssembly(string namespaceName, string className, params CodeMemberMethod[] methods) { CodeCompileUnit unit = new CodeCompileUnit(); CodeNamespace space = new CodeNamespace(namespaceName); CodeTypeDeclaration type = new CodeTypeDeclaration(className); type.Attributes = MemberAttributes.Static | MemberAttributes.Public; type.TypeAttributes = System.Reflection.TypeAttributes.Public | System.Reflection.TypeAttributes.Sealed; type.Members.AddRange(methods); space.Types.Add(type); unit.Namespaces.Add(space); Microsoft.CSharp.CSharpCodeProvider provider = new Microsoft.CSharp.CSharpCodeProvider(); System.CodeDom.Compiler.CompilerParameters options = new System.CodeDom.Compiler.CompilerParameters(); options.IncludeDebugInformation = false; options.GenerateExecutable = false; options.ReferencedAssemblies.Add(typeof(int).Assembly.Location); options.ReferencedAssemblies.Add(typeof(Vector2).Assembly.Location); System.CodeDom.Compiler.CompilerResults results = provider.CompileAssemblyFromDom(options, unit); System.CodeDom.Compiler.CodeGeneratorOptions ops = new System.CodeDom.Compiler.CodeGeneratorOptions(); ops.IndentString = "\t"; ops.VerbatimOrder = true; ops.BracingStyle = "C"; StringWriter text = new StringWriter(); provider.GenerateCodeFromCompileUnit(unit, text, ops); string code = text.ToString(); if (results.Errors.HasErrors) { string errors = ""; foreach (System.CodeDom.Compiler.CompilerError error in results.Errors) { errors += error.ToString() + Environment.NewLine; } throw new InvalidOperationException(errors); } byte[] data = File.ReadAllBytes(results.PathToAssembly); File.Delete(results.PathToAssembly); return(data); }
static void GenerateCSCodeForService(EndpointAddress metadataAddress, string outputFile) { MetadataExchangeClient mexClient = new MetadataExchangeClient(metadataAddress); mexClient.ResolveMetadataReferences = true; MetadataSet metaDocs = mexClient.GetMetadata(); WsdlImporter importer = new WsdlImporter(metaDocs); ServiceContractGenerator generator = new ServiceContractGenerator(); // Uncomment the following code if you are going to do your work programmatically rather than add // the WsdlDocumentationImporters through a configuration file. /* * // The following code inserts the custom WSDL programmatically adding the custom WsdlImporter without * // removing the other importers already in the collection. * System.Collections.Generic.IEnumerable<IWsdlImportExtension> exts = importer.WsdlExtensions; * System.Collections.Generic.List<IWsdlImportExtension> newExts = new System.Collections.Generic.List<IWsdlImportExtension>(); * foreach (IWsdlImportExtension ext in exts) * newExts.Add(ext); * newExts.Add(new WsdlDocumentationImporter()); * importer = new WsdlImporter(newExts.ToArray(), metaDocs.MetadataSections); */ System.Collections.ObjectModel.Collection <ContractDescription> contracts = importer.ImportAllContracts(); foreach (ContractDescription contract in contracts) { generator.GenerateServiceContractType(contract); } if (generator.Errors.Count != 0) { throw new ApplicationException("There were errors during code compilation."); } // Write the code dom System.CodeDom.Compiler.CodeGeneratorOptions options = new System.CodeDom.Compiler.CodeGeneratorOptions(); options.BracingStyle = "C"; System.CodeDom.Compiler.CodeDomProvider codeDomProvider = System.CodeDom.Compiler.CodeDomProvider.CreateProvider("C#"); System.CodeDom.Compiler.IndentedTextWriter textWriter = new System.CodeDom.Compiler.IndentedTextWriter(new System.IO.StreamWriter(outputFile)); codeDomProvider.GenerateCodeFromCompileUnit( generator.TargetCompileUnit, textWriter, options ); textWriter.Close(); }
protected override void RefreshValue() { using (Microsoft.CSharp.CSharpCodeProvider provider = new Microsoft.CSharp.CSharpCodeProvider()) { System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions(); using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString)) { tw.Write("("); provider.GenerateCodeFromExpression(Expression, tw, opts); tw.Write(" is "); provider.GenerateCodeFromExpression(new CodeTypeReferenceExpression(TypeReference), tw, opts); tw.Write(")"); Value = tw.InnerWriter.ToString(); } } }
public static byte[] GenerateAssembly(string namespaceName, string className, params CodeMemberMethod[] methods) { CodeCompileUnit unit = new CodeCompileUnit(); CodeNamespace space = new CodeNamespace(namespaceName); CodeTypeDeclaration type = new CodeTypeDeclaration(className); type.Attributes = MemberAttributes.Static | MemberAttributes.Public; type.TypeAttributes = System.Reflection.TypeAttributes.Public | System.Reflection.TypeAttributes.Sealed; type.Members.AddRange(methods); space.Types.Add(type); unit.Namespaces.Add(space); Microsoft.CSharp.CSharpCodeProvider provider = new Microsoft.CSharp.CSharpCodeProvider(); System.CodeDom.Compiler.CompilerParameters options = new System.CodeDom.Compiler.CompilerParameters(); options.IncludeDebugInformation = false; options.GenerateExecutable = false; options.ReferencedAssemblies.Add(typeof(int).Assembly.Location); options.ReferencedAssemblies.Add(typeof(Vector2).Assembly.Location); System.CodeDom.Compiler.CompilerResults results = provider.CompileAssemblyFromDom(options,unit); System.CodeDom.Compiler.CodeGeneratorOptions ops = new System.CodeDom.Compiler.CodeGeneratorOptions(); ops.IndentString = "\t"; ops.VerbatimOrder = true; ops.BracingStyle = "C"; StringWriter text = new StringWriter(); provider.GenerateCodeFromCompileUnit(unit, text, ops); string code = text.ToString(); if (results.Errors.HasErrors) { string errors = ""; foreach (System.CodeDom.Compiler.CompilerError error in results.Errors) { errors += error.ToString() + Environment.NewLine; } throw new InvalidOperationException(errors); } byte[] data = File.ReadAllBytes(results.PathToAssembly); File.Delete(results.PathToAssembly); return data; }
public void GenerateCode(CodeDomGenerator.Language language) { if (_left == null) { return; } switch (language) { case CodeDomGenerator.Language.CSharp: using (Microsoft.CSharp.CSharpCodeProvider provider = new Microsoft.CSharp.CSharpCodeProvider()) { System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions(); using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString)) { provider.GenerateCodeFromExpression(_left, tw, opts); if (_right != null) { tw.Write(_separator); provider.GenerateCodeFromExpression(_right, tw, opts); } Value = tw.InnerWriter.ToString(); } } break; case CodeDomGenerator.Language.VB: using (Microsoft.VisualBasic.VBCodeProvider provider = new Microsoft.VisualBasic.VBCodeProvider()) { System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions(); using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString)) { provider.GenerateCodeFromExpression(_left, tw, opts); if (_right != null) { tw.Write(_separator); provider.GenerateCodeFromExpression(_right, tw, opts); } Value = tw.InnerWriter.ToString(); } } break; default: throw new NotImplementedException(language.ToString()); } }
public void GenerateCode(CodeDomGenerator.Language language) { switch (language) { case CodeDomGenerator.Language.CSharp: using (Microsoft.CSharp.CSharpCodeProvider provider = new Microsoft.CSharp.CSharpCodeProvider()) { System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions(); using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString)) { provider.GenerateCodeFromExpression(Parameter, tw, opts); Value = tw.InnerWriter.ToString(); } } break; case CodeDomGenerator.Language.VB: using (Microsoft.VisualBasic.VBCodeProvider provider = new Microsoft.VisualBasic.VBCodeProvider()) { System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions(); StringBuilder sb = new StringBuilder(); using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(sb), opts.IndentString)) { provider.GenerateCodeFromExpression(Parameter, tw, opts); switch (Option) { case ParamOption.Optional: sb.Replace("ByVal " + Parameter.Name, "Optional ByVal " + Parameter.Name); break; case ParamOption.ParamArray: sb.Replace("ByVal " + Parameter.Name, "ByVal ParamArray " + Parameter.Name); break; default: throw new NotSupportedException(Option.ToString()); } Value = tw.InnerWriter.ToString(); } } break; default: throw new NotImplementedException(language.ToString()); } }
/// <summary> /// Convert string value to an escaped C# string literal. /// </summary> public static string ToLiteral(string input, string language = "JScript") { using (var writer = new StringWriter()) { using (var provider = System.CodeDom.Compiler.CodeDomProvider.CreateProvider(language)) { var exp = new System.CodeDom.CodePrimitiveExpression(input); System.CodeDom.Compiler.CodeGeneratorOptions options = null; provider.GenerateCodeFromExpression(exp, writer, options); var literal = writer.ToString(); var rxLines = new Regex("\"\\s*[+]\\s*[\r\n]\"", RegexOptions.Multiline); literal = rxLines.Replace(literal, ""); //literal = literal.Replace(string.Format("\" +{0}\t\"", Environment.NewLine), ""); //literal = literal.Replace("\\r\\n", "\\r\\n\"+\r\n\""); return(literal); } } }
public virtual void GenerateCodeFromCodeDom(System.CodeDom.CodeCompileUnit compileUnit, TextWriter writer) { var provider = this.CreateCodeDomProvider(); if (provider != null) { var options = new System.CodeDom.Compiler.CodeGeneratorOptions(); options.BlankLinesBetweenMembers = AmbienceService.CodeGenerationProperties.Get("BlankLinesBetweenMembers", true); options.BracingStyle = AmbienceService.CodeGenerationProperties.Get("StartBlockOnSameLine", true) ? "Block" : "C"; options.ElseOnClosing = AmbienceService.CodeGenerationProperties.Get("ElseOnClosing", true); options.IndentString = SD.EditorControlService.GlobalOptions.IndentationString; provider.GenerateCodeFromCompileUnit(compileUnit, writer, options); } else { writer.WriteLine("No CodeDom provider was found for this language."); } }
public void GenerateCode(CodeDomGenerator.Language language) { switch (language) { case CodeDomGenerator.Language.CSharp: using (Microsoft.CSharp.CSharpCodeProvider provider = new Microsoft.CSharp.CSharpCodeProvider()) { System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions(); using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString)) { if (!_eq) { tw.Write("!"); } tw.Write("ReferenceEquals("); provider.GenerateCodeFromExpression(_left, tw, opts); tw.Write(", "); provider.GenerateCodeFromExpression(_right, tw, opts); tw.Write(")"); Value = tw.InnerWriter.ToString(); } } break; case CodeDomGenerator.Language.VB: using (Microsoft.VisualBasic.VBCodeProvider provider = new Microsoft.VisualBasic.VBCodeProvider()) { System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions(); using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString)) { provider.GenerateCodeFromExpression(_left, tw, opts); if (_eq) tw.Write(" Is "); else tw.Write(" IsNot "); provider.GenerateCodeFromExpression(_right, tw, opts); Value = tw.InnerWriter.ToString(); } } break; default: throw new NotImplementedException(language.ToString()); } }
public void GenerateCode(CodeDomGenerator.Language language) { switch (language) { case CodeDomGenerator.Language.CSharp: using (Microsoft.CSharp.CSharpCodeProvider provider = new Microsoft.CSharp.CSharpCodeProvider()) { System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions(); using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString)) { provider.GenerateCodeFromExpression(_condition, tw, opts); tw.Write("?"); provider.GenerateCodeFromExpression(_truePart, tw, opts); tw.Write(":"); provider.GenerateCodeFromExpression(_falsePart, tw, opts); Value = tw.InnerWriter.ToString(); } } break; case CodeDomGenerator.Language.VB: using (Microsoft.VisualBasic.VBCodeProvider provider = new Microsoft.VisualBasic.VBCodeProvider()) { System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions(); using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString)) { tw.Write("If("); provider.GenerateCodeFromExpression(_condition, tw, opts); tw.Write(","); provider.GenerateCodeFromExpression(_truePart, tw, opts); tw.Write(","); provider.GenerateCodeFromExpression(_falsePart, tw, opts); tw.Write(")"); Value = tw.InnerWriter.ToString(); } } break; default: throw new NotImplementedException(language.ToString()); } }
System.CodeDom.CodeCompileUnit GenerateCompileUnit(System.CodeDom.Compiler.CodeDomProvider provider, System.CodeDom.Compiler.CodeGeneratorOptions options, string file, List <NSObjectTypeInfo> types) { var ccu = new System.CodeDom.CodeCompileUnit(); var namespaces = new Dictionary <string, System.CodeDom.CodeNamespace> (); foreach (var t in types) { System.CodeDom.CodeTypeDeclaration type; string nsName; System.CodeDom.CodeNamespace ns; t.GenerateCodeTypeDeclaration(provider, options, infoService.WrapperRoot, out type, out nsName); if (!namespaces.TryGetValue(nsName, out ns)) { namespaces[nsName] = ns = new System.CodeDom.CodeNamespace(nsName); ccu.Namespaces.Add(ns); } ns.Types.Add(type); } return(ccu); }
string GenerateCode(ITextTemplatingEngineHost host, string content, string name, string generatorNewline) { ParsedTemplate pt = ParsedTemplate.FromText(content, host); if (pt.Errors.HasErrors) { host.LogErrors(pt.Errors); return(null); } TemplateSettings settings = TemplatingEngine.GetSettings(host, pt); if (name != null) { settings.Name = name; } if (pt.Errors.HasErrors) { host.LogErrors(pt.Errors); return(null); } var ccu = TemplatingEngine.GenerateCompileUnit(host, content, pt, settings); if (pt.Errors.HasErrors) { host.LogErrors(pt.Errors); return(null); } var opts = new System.CodeDom.Compiler.CodeGeneratorOptions(); using (var writer = new System.IO.StringWriter()) { writer.NewLine = generatorNewline; settings.Provider.GenerateCodeFromCompileUnit(ccu, writer, opts); return(writer.ToString()); } }
public void GenerateCode(CodeDomGenerator.Language language) { switch (language) { case CodeDomGenerator.Language.CSharp: if (_csStatement != null) { using (Microsoft.CSharp.CSharpCodeProvider provider = new Microsoft.CSharp.CSharpCodeProvider()) { System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions(); using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString)) { provider.GenerateCodeFromStatement(_csStatement, tw, opts); Value = tw.InnerWriter.ToString(); } } } break; case CodeDomGenerator.Language.VB: if (_vbStatement != null) { using (Microsoft.VisualBasic.VBCodeProvider provider = new Microsoft.VisualBasic.VBCodeProvider()) { System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions(); using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString)) { provider.GenerateCodeFromStatement(_vbStatement, tw, opts); Value = tw.InnerWriter.ToString(); } } } break; default: throw new NotImplementedException(language.ToString()); } }
/// <summary> /// Updates the cli types. /// </summary> /// <returns> /// Returns whether or not any files were added to the project. /// </returns> /// <param name='monitor'> /// A progress monitor. /// </param> /// <param name='context'> /// A sync-back context. /// </param> /// <param name='typesAdded'> /// An output variable specifying whether or not any types were added to the project. /// </param> bool UpdateCliTypes(IProgressMonitor monitor, XcodeSyncBackContext context, out bool typesAdded) { var provider = dnp.LanguageBinding.GetCodeDomProvider(); var options = new System.CodeDom.Compiler.CodeGeneratorOptions(); var writer = MonoDevelop.DesignerSupport.CodeBehindWriter.CreateForProject( new MonoDevelop.Core.ProgressMonitoring.NullProgressMonitor(), dnp); monitor.BeginTask(GettextCatalog.GetString("Detecting changes made in Xcode"), 0); Dictionary <string, NSObjectTypeInfo> newTypes; Dictionary <string, ProjectFile> newFiles; var updates = context.GetTypeUpdates(monitor, provider, out newTypes, out newFiles); if ((updates == null || updates.Count == 0) && newTypes == null && newFiles == null) { monitor.Log.WriteLine("No changes found"); monitor.EndTask(); typesAdded = false; return(false); } monitor.Log.WriteLine("Found {0} changed types", updates.Count); monitor.EndTask(); int count = updates.Count + (newTypes != null ? newTypes.Count : 0); monitor.BeginTask(GettextCatalog.GetString("Updating types in MonoDevelop"), count); // First, add new types... if (newTypes != null && newTypes.Count > 0) { foreach (var nt in newTypes) { if (provider is Microsoft.CSharp.CSharpCodeProvider) { var cs = new CSharpCodeTypeDefinition() { WrapperNamespace = infoService.WrapperRoot, Provider = provider, Type = nt.Value, }; string baseDir = Path.GetDirectoryName(nt.Key); if (!Directory.Exists(baseDir)) { Directory.CreateDirectory(baseDir); } writer.WriteFile(nt.Key, cs.TransformText()); } else { // FIXME: implement support for non-C# languages } monitor.Step(1); } typesAdded = true; } else { typesAdded = false; } // Next, generate the designer files for any added/changed types foreach (var df in updates) { monitor.Log.WriteLine("Syncing {0} types from Xcode to file '{1}'", df.Value.Count, df.Key); if (provider is Microsoft.CSharp.CSharpCodeProvider) { var cs = new CSharpCodeCodebehind() { Types = df.Value, WrapperNamespace = infoService.WrapperRoot, Provider = provider, }; writer.WriteFile(df.Key, cs.TransformText()); } else { var ccu = GenerateCompileUnit(provider, options, df.Key, df.Value); writer.WriteFile(df.Key, ccu); } monitor.Step(1); } writer.WriteOpenFiles(); // Update sync timestamps foreach (var df in updates) { foreach (var type in df.Value) { context.SetSyncTimeToNow(type.ObjCName + ".h"); context.SetSyncTimeToNow(type.ObjCName + ".m"); } } // Add new files to the DotNetProject if (newFiles != null) { foreach (var f in newFiles) { monitor.Log.WriteLine("Added new designer file {0}", f.Key); dnp.AddFile(f.Value); } } monitor.EndTask(); return(newFiles != null && newFiles.Count > 0); }
/// <summary> /// Adds the custom classes from user interface definition files. /// </summary> /// <returns> /// <c>true</c> if new types were added to the project, or <c>false</c> otherwise. /// </returns> /// <param name='monitor'> /// A progress monitor. /// </param> /// <param name='context'> /// A sync-back context. /// </param> bool AddCustomClassesFromUIDefinitionFiles(IProgressMonitor monitor, XcodeSyncBackContext context) { var provider = dnp.LanguageBinding.GetCodeDomProvider(); var options = new System.CodeDom.Compiler.CodeGeneratorOptions(); var writer = MonoDevelop.DesignerSupport.CodeBehindWriter.CreateForProject( new MonoDevelop.Core.ProgressMonitoring.NullProgressMonitor(), dnp); bool addedTypes = false; monitor.BeginTask(GettextCatalog.GetString("Generating custom classes defined in UI definition files"), 0); // Collect our list of custom classes from UI definition files foreach (var job in context.FileSyncJobs) { if (!HasInterfaceDefinitionExtension(job.Original)) { continue; } string relative = job.SyncedRelative.ParentDirectory; string dir = dnp.BaseDirectory; if (!string.IsNullOrEmpty(relative)) { dir = Path.Combine(dir, relative); } foreach (var type in GetCustomTypesFromUIDefinition(job.Original)) { if (context.ProjectInfo.ContainsType(type.ObjCName)) { continue; } string designerPath = Path.Combine(dir, type.ObjCName + ".designer." + provider.FileExtension); string path = Path.Combine(dir, type.ObjCName + "." + provider.FileExtension); string ns = dnp.GetDefaultNamespace(path); type.CliName = ns + "." + provider.CreateValidIdentifier(type.ObjCName); if (provider is Microsoft.CSharp.CSharpCodeProvider) { CodebehindTemplateBase cs = new CSharpCodeTypeDefinition() { WrapperNamespace = infoService.WrapperRoot, Provider = provider, Type = type, }; writer.WriteFile(path, cs.TransformText()); List <NSObjectTypeInfo> types = new List <NSObjectTypeInfo> (); types.Add(type); cs = new CSharpCodeCodebehind() { WrapperNamespace = infoService.WrapperRoot, Provider = provider, Types = types, }; writer.WriteFile(designerPath, cs.TransformText()); context.ProjectInfo.InsertUpdatedType(type); } else { // FIXME: implement support for non-C# languages } dnp.AddFile(new ProjectFile(path)); dnp.AddFile(new ProjectFile(designerPath) { DependsOn = path }); addedTypes = true; } } writer.WriteOpenFiles(); monitor.EndTask(); return(addedTypes); }
/// <summary> /// Updates the cli types. /// </summary> /// <returns> /// Returns whether or not any files were added to the project. /// </returns> /// <param name='monitor'> /// A progress monitor. /// </param> /// <param name='context'> /// A sync-back context. /// </param> /// <param name='typesAdded'> /// An output variable specifying whether or not any types were added to the project. /// </param> bool UpdateCliTypes (IProgressMonitor monitor, XcodeSyncBackContext context, out bool typesAdded) { var provider = dnp.LanguageBinding.GetCodeDomProvider (); var options = new System.CodeDom.Compiler.CodeGeneratorOptions (); var writer = MonoDevelop.DesignerSupport.CodeBehindWriter.CreateForProject ( new MonoDevelop.Core.ProgressMonitoring.NullProgressMonitor (), dnp); monitor.BeginTask (GettextCatalog.GetString ("Detecting changes made in Xcode to custom user types..."), 0); Dictionary<string, NSObjectTypeInfo> newTypes; Dictionary<string, ProjectFile> newFiles; var updates = context.GetTypeUpdates (monitor, provider, out newTypes, out newFiles); if ((updates == null || updates.Count == 0) && newTypes == null && newFiles == null) { monitor.Log.WriteLine ("No changes found."); monitor.EndTask (); typesAdded = false; return false; } monitor.EndTask (); int count = updates.Count + (newTypes != null ? newTypes.Count : 0); monitor.BeginTask (GettextCatalog.GetString ("Updating custom user types in MonoDevelop..."), count); // First, add new types... if (newTypes != null && newTypes.Count > 0) { foreach (var nt in newTypes) { monitor.Log.WriteLine ("Adding new type: {0}", nt.Value.CliName); if (provider is Microsoft.CSharp.CSharpCodeProvider) { var cs = new CSharpCodeTypeDefinition () { WrapperNamespace = infoService.WrapperRoot, Provider = provider, Type = nt.Value, }; string baseDir = Path.GetDirectoryName (nt.Key); if (!Directory.Exists (baseDir)) Directory.CreateDirectory (baseDir); writer.WriteFile (nt.Key, cs.TransformText ()); } else { // FIXME: implement support for non-C# languages } monitor.Step (1); } typesAdded = true; } else { typesAdded = false; } // Next, generate the designer files for any added/changed types foreach (var df in updates) { monitor.Log.WriteLine ("Generating designer file: {0}", df.Key); if (provider is Microsoft.CSharp.CSharpCodeProvider) { var cs = new CSharpCodeCodebehind () { Types = df.Value, WrapperNamespace = infoService.WrapperRoot, Provider = provider, }; writer.WriteFile (df.Key, cs.TransformText ()); } else { var ccu = GenerateCompileUnit (provider, options, df.Key, df.Value); writer.WriteFile (df.Key, ccu); } monitor.Step (1); } writer.WriteOpenFiles (); // Update sync timestamps foreach (var df in updates) { foreach (var type in df.Value) context.SetSyncTime (type.ObjCName + ".h", DateTime.Now); } // Add new files to the DotNetProject if (newFiles != null) { foreach (var f in newFiles) { monitor.Log.WriteLine ("Added new designer file: {0}", f.Key); dnp.AddFile (f.Value); } } monitor.EndTask (); return newFiles != null && newFiles.Count > 0; }
/// <summary> /// Adds the custom classes from user interface definition files. /// </summary> /// <returns> /// <c>true</c> if new types were added to the project, or <c>false</c> otherwise. /// </returns> /// <param name='monitor'> /// A progress monitor. /// </param> /// <param name='context'> /// A sync-back context. /// </param> bool AddCustomClassesFromUIDefinitionFiles (IProgressMonitor monitor, XcodeSyncBackContext context) { var provider = dnp.LanguageBinding.GetCodeDomProvider (); var options = new System.CodeDom.Compiler.CodeGeneratorOptions (); var writer = MonoDevelop.DesignerSupport.CodeBehindWriter.CreateForProject ( new MonoDevelop.Core.ProgressMonitoring.NullProgressMonitor (), dnp); bool addedTypes = false; bool beganTask = false; // Collect our list of custom classes from UI definition files foreach (var job in context.FileSyncJobs) { if (!HasInterfaceDefinitionExtension (job.Original)) continue; if (!beganTask) { monitor.BeginTask (GettextCatalog.GetString ("Generating custom classes defined in UI definition files..."), 0); beganTask = true; } string relative = job.SyncedRelative.ParentDirectory; string dir = dnp.BaseDirectory; if (!string.IsNullOrEmpty (relative)) dir = Path.Combine (dir, relative); foreach (var type in GetCustomTypesFromUIDefinition (job.Original)) { if (context.ProjectInfo.ContainsType (type.ObjCName)) continue; string designerPath = Path.Combine (dir, type.ObjCName + ".designer." + provider.FileExtension); string path = Path.Combine (dir, type.ObjCName + "." + provider.FileExtension); string ns = dnp.GetDefaultNamespace (path); type.CliName = ns + "." + provider.CreateValidIdentifier (type.ObjCName); if (provider is Microsoft.CSharp.CSharpCodeProvider) { CodebehindTemplateBase cs = new CSharpCodeTypeDefinition () { WrapperNamespace = infoService.WrapperRoot, Provider = provider, Type = type, }; writer.WriteFile (path, cs.TransformText ()); List<NSObjectTypeInfo> types = new List<NSObjectTypeInfo> (); types.Add (type); cs = new CSharpCodeCodebehind () { WrapperNamespace = infoService.WrapperRoot, Provider = provider, Types = types, }; writer.WriteFile (designerPath, cs.TransformText ()); context.ProjectInfo.InsertUpdatedType (type); } else { // FIXME: implement support for non-C# languages } dnp.AddFile (new ProjectFile (path)); dnp.AddFile (new ProjectFile (designerPath) { DependsOn = path }); addedTypes = true; } } writer.WriteOpenFiles (); if (beganTask) monitor.EndTask (); return addedTypes; }
public void GenerateCode(CodeDomGenerator.Language language) { switch (language) { case CodeDomGenerator.Language.CSharp: using (Microsoft.CSharp.CSharpCodeProvider provider = new Microsoft.CSharp.CSharpCodeProvider()) { System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions(); using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString)) { if (_params.Count != 1 || _params[0].Type != null) tw.Write("("); for (int i = 0; i < _params.Count; i++) { if (i > 0) tw.Write(", "); if (_params[i].Type != null) { provider.GenerateCodeFromExpression(new CodeTypeReferenceExpression(_params[i].Type), tw, opts); tw.Write(" "); } tw.Write(_params[i].Name); } if (_params.Count != 1 || _params[0].Type != null) tw.Write(")"); tw.Write(" => "); provider.GenerateCodeFromExpression(Expression, tw, opts); Value = tw.InnerWriter.ToString(); } } break; case CodeDomGenerator.Language.VB: using (Microsoft.VisualBasic.VBCodeProvider provider = new Microsoft.VisualBasic.VBCodeProvider()) { System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions(); using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString)) { tw.Write("Function("); for (int i = 0; i < _params.Count; i++) { if (i > 0) tw.Write(", "); tw.Write(_params[i].Name); if (_params[i].Type != null) { tw.Write(" As "); provider.GenerateCodeFromExpression(new CodeTypeReferenceExpression(_params[i].Type), tw, opts); } } tw.Write(") "); provider.GenerateCodeFromExpression(Expression, tw, opts); Value = tw.InnerWriter.ToString(); } } break; default: throw new NotImplementedException(language.ToString()); } }
void UpdateCliTypes (IProgressMonitor monitor, XcodeSyncBackContext context) { var provider = dnp.LanguageBinding.GetCodeDomProvider (); var options = new System.CodeDom.Compiler.CodeGeneratorOptions (); var writer = MonoDevelop.DesignerSupport.CodeBehindWriter.CreateForProject ( new MonoDevelop.Core.ProgressMonitoring.NullProgressMonitor (), dnp); monitor.BeginTask (GettextCatalog.GetString ("Detecting changed types from Xcode"), 0); Dictionary<string,ProjectFile> newFiles; var updates = context.GetTypeUpdates (out newFiles); if (updates == null || updates.Count == 0) { monitor.Log.WriteLine ("No changed types found"); monitor.EndTask (); return; } monitor.Log.WriteLine ("Found {0} changed types", updates.Count); monitor.EndTask (); monitor.BeginTask (GettextCatalog.GetString ("Updating types in MonoDevelop"), updates.Count); foreach (var df in updates) { monitor.Log.WriteLine ("Syncing {0} types from Xcode to file '{1}'", df.Value.Count, df.Key); if (provider is Microsoft.CSharp.CSharpCodeProvider) { var cs = new CSharpCodeCodebehind () { Types = df.Value, WrapperNamespace = infoService.WrapperRoot, Provider = provider, }; writer.WriteFile (df.Key, cs.TransformText ()); } else { var ccu = GenerateCompileUnit (provider, options, df.Key, df.Value); writer.WriteFile (df.Key, ccu); } monitor.Step (1); } writer.WriteOpenFiles (); foreach (var df in updates) { foreach (var type in df.Value) { context.SetSyncTimeToNow (type.ObjCName + ".h"); context.SetSyncTimeToNow (type.ObjCName + ".m"); } } foreach (var job in context.TypeSyncJobs) { context.ProjectInfo.InsertUpdatedType (job.Type); } if (newFiles != null) { foreach (var f in newFiles) { monitor.Log.WriteLine ("Added new designer file {0}", f.Key); dnp.AddFile (f.Value); } monitor.Log.WriteLine ("Saving project '{0}'", dnp.Name); Ide.IdeApp.ProjectOperations.Save (dnp); } monitor.EndTask (); }
public void GenerateCode(CodeDomGenerator.Language language) { if (_left == null) return; switch (language) { case CodeDomGenerator.Language.CSharp: using (Microsoft.CSharp.CSharpCodeProvider provider = new Microsoft.CSharp.CSharpCodeProvider()) { System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions(); using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString)) { provider.GenerateCodeFromExpression(_left, tw, opts); if (_right != null) { tw.Write(_separator); provider.GenerateCodeFromExpression(_right, tw, opts); } Value = tw.InnerWriter.ToString(); } } break; case CodeDomGenerator.Language.VB: using (Microsoft.VisualBasic.VBCodeProvider provider = new Microsoft.VisualBasic.VBCodeProvider()) { System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions(); using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString)) { provider.GenerateCodeFromExpression(_left, tw, opts); if (_right != null) { tw.Write(_separator); provider.GenerateCodeFromExpression(_right, tw, opts); } Value = tw.InnerWriter.ToString(); } } break; default: throw new NotImplementedException(language.ToString()); } }
public static void Main(string[] args) { string directory = "../../NRefactory/Project/Src/Ast/"; string visitorsDir = "../../NRefactory/Project/Src/Visitors/"; Console.WriteLine("AST Generator running..."); if (!File.Exists(directory + "INode.cs")) { Console.WriteLine("did not find output directory " + Path.GetFullPath(Path.GetDirectoryName(directory))); return; } if (!File.Exists(visitorsDir + "AbstractAstTransformer.cs")) { Console.WriteLine("did not find visitor output directory"); return; } List <Type> nodeTypes = new List <Type>(); foreach (Type type in typeof(MainClass).Assembly.GetTypes()) { if (type.IsClass && typeof(INode).IsAssignableFrom(type)) { nodeTypes.Add(type); } } nodeTypes.Sort(delegate(Type a, Type b) { return(a.Name.CompareTo(b.Name)); }); CodeCompileUnit ccu = new CodeCompileUnit(); CodeNamespace cns = ccu.AddNamespace("ICSharpCode.NRefactory.Ast"); cns.AddImport("System"); cns.AddImport("System.Collections.Generic"); cns.AddImport("AgentRalph.Visitors"); foreach (Type type in nodeTypes) { if (type.GetCustomAttributes(typeof(CustomImplementationAttribute), false).Length == 0) { CodeTypeDeclaration ctd = cns.AddType(type.Name); if (type.IsAbstract) { ctd.TypeAttributes |= TypeAttributes.Abstract; } ctd.IsPartial = true; ctd.BaseTypes.Add(new CodeTypeReference(type.BaseType.Name)); ProcessType(type, ctd); foreach (object o in type.GetCustomAttributes(false)) { if (o is TypeImplementationModifierAttribute) { (o as TypeImplementationModifierAttribute).ModifyImplementation(cns, ctd, type); } } if (!type.IsAbstract) { AddAnAcceptVisitorMethod(type, ctd, "IAstVisitor", typeof(object)); // Create an overload AddAnAcceptVisitorMethod(type, ctd, "AstComparisonVisitor", typeof(bool)); AddAChillunsGetter(type, ctd); var method = new CodeMemberMethod(); method.Name = "ToString"; method.Attributes = MemberAttributes.Public | MemberAttributes.Override; method.ReturnType = new CodeTypeReference(typeof(string)); method.Statements.Add(new CodeMethodReturnStatement(CreateToString(type))); ctd.Members.Add(method); } } } System.CodeDom.Compiler.CodeGeneratorOptions settings = new System.CodeDom.Compiler.CodeGeneratorOptions(); settings.IndentString = "\t"; settings.VerbatimOrder = true; using (StringWriter writer = new StringWriter()) { new Microsoft.CSharp.CSharpCodeProvider().GenerateCodeFromCompileUnit(ccu, writer, settings); File.WriteAllText(directory + "Generated.cs", writer.ToString()); } ccu = new CodeCompileUnit(); cns = ccu.AddNamespace("ICSharpCode.NRefactory"); cns.AddImport("System"); cns.AddImport("ICSharpCode.NRefactory.Ast"); cns.Types.Add(CreateAstVisitorInterface(nodeTypes)); using (StringWriter writer = new StringWriter()) { new Microsoft.CSharp.CSharpCodeProvider().GenerateCodeFromCompileUnit(ccu, writer, settings); File.WriteAllText(visitorsDir + "../IAstVisitor.cs", writer.ToString()); } // My modifications to the generation process are not preserving the creation of these particular files. // So I just don't regenerate them for the time being. // ccu = new CodeCompileUnit(); // cns = ccu.AddNamespace("ICSharpCode.NRefactory.Visitors"); // cns.AddImport("System"); // cns.AddImport("System.Collections.Generic"); // cns.AddImport("System.Diagnostics"); // cns.AddImport("ICSharpCode.NRefactory.Ast"); // cns.Types.Add(CreateAstVisitorClass(nodeTypes, false)); // // using (StringWriter writer = new StringWriter()) { // new Microsoft.CSharp.CSharpCodeProvider().GenerateCodeFromCompileUnit(ccu, writer, settings); // File.WriteAllText(visitorsDir + "AbstractAstVisitor.cs", writer.ToString()); // } // // ccu = new CodeCompileUnit(); // cns = ccu.AddNamespace("ICSharpCode.NRefactory.Visitors"); // cns.AddImport("System"); // cns.AddImport("System.Collections.Generic"); // cns.AddImport("System.Diagnostics"); // cns.AddImport("ICSharpCode.NRefactory.Ast"); // cns.Types.Add(CreateAstVisitorClass(nodeTypes, true)); // // using (StringWriter writer = new StringWriter()) { // new Microsoft.CSharp.CSharpCodeProvider().GenerateCodeFromCompileUnit(ccu, writer, settings); // File.WriteAllText(visitorsDir + "AbstractAstTransformer.cs", writer.ToString()); // } ccu = new CodeCompileUnit(); cns = ccu.AddNamespace("ICSharpCode.NRefactory.Visitors"); cns.AddImport("System"); cns.AddImport("ICSharpCode.NRefactory.Ast"); cns.Types.Add(CreateNodeTrackingAstVisitorClass(nodeTypes)); using (StringWriter writer = new StringWriter()) { new Microsoft.CSharp.CSharpCodeProvider().GenerateCodeFromCompileUnit(ccu, writer, settings); // CodeDom cannot output "sealed", so we need to use this hack: File.WriteAllText(visitorsDir + "NodeTrackingAstVisitor.cs", writer.ToString().Replace("public override object", "public sealed override object")); } //NotImplementedAstVisitor ccu = new CodeCompileUnit(); cns = ccu.AddNamespace("ICSharpCode.NRefactory.Visitors"); cns.AddImport("System"); cns.AddImport("ICSharpCode.NRefactory.Ast"); cns.Types.Add(CreateNotImplementedAstVisitorClass(nodeTypes)); using (StringWriter writer = new StringWriter()) { new Microsoft.CSharp.CSharpCodeProvider().GenerateCodeFromCompileUnit(ccu, writer, settings); File.WriteAllText(visitorsDir + "NotImplementedAstVisitor.cs", writer.ToString()); } // TwoTreeAbstractAstVisitor ccu = new CodeCompileUnit(); cns = ccu.AddNamespace("AgentRalph.Visitors"); cns.AddImport("System"); cns.AddImport("System.Collections.Generic"); cns.AddImport("System.Diagnostics"); cns.AddImport("ICSharpCode.NRefactory.Ast"); cns.AddImport("ICSharpCode.NRefactory"); cns.Types.Add(CreateAstComparisonVisitorClass(nodeTypes)); using (StringWriter writer = new StringWriter()) { new Microsoft.CSharp.CSharpCodeProvider().GenerateCodeFromCompileUnit(ccu, writer, settings); // Put it in the NRefactor project var path = visitorsDir + "AstComparisonVisitor.Generated.cs"; File.WriteAllText(path, writer.ToString()); Console.WriteLine("Created file " + path); } Console.WriteLine("AST Generator done!"); }
public static void Main(string[] args) { string directory = "../../../ICSharpCode.NRefactory.VB/Ast/"; string visitorsDir = "../../../ICSharpCode.NRefactory.VB/Visitors/"; Debug.WriteLine("AST Generator running..."); if (!File.Exists(directory + "INode.cs")) { Debug.WriteLine("did not find output directory"); return; } if (!File.Exists(visitorsDir + "AbstractAstTransformer.cs")) { Debug.WriteLine("did not find visitor output directory"); return; } List<Type> nodeTypes = new List<Type>(); foreach (Type type in typeof(MainClass).Assembly.GetTypes()) { if (type.IsClass && typeof(INode).IsAssignableFrom(type)) { nodeTypes.Add(type); } } nodeTypes.Sort(delegate(Type a, Type b) { return a.Name.CompareTo(b.Name); }); CodeCompileUnit ccu = new CodeCompileUnit(); CodeNamespace cns = ccu.AddNamespace("ICSharpCode.NRefactory.VB.Ast"); cns.AddImport("System"); cns.AddImport("System.Collections.Generic"); foreach (Type type in nodeTypes) { if (type.GetCustomAttributes(typeof(CustomImplementationAttribute), false).Length == 0) { CodeTypeDeclaration ctd = cns.AddType(type.Name); if (type.IsAbstract) { ctd.TypeAttributes |= TypeAttributes.Abstract; } ctd.BaseTypes.Add(new CodeTypeReference(type.BaseType.Name)); ProcessType(type, ctd); foreach (object o in type.GetCustomAttributes(false)) { if (o is TypeImplementationModifierAttribute) { (o as TypeImplementationModifierAttribute).ModifyImplementation(cns, ctd, type); } } if (!type.IsAbstract) { CodeMemberMethod method = new CodeMemberMethod(); method.Name = "AcceptVisitor"; method.Attributes = MemberAttributes.Public | MemberAttributes.Override; method.Parameters.Add(new CodeParameterDeclarationExpression("IAstVisitor", "visitor")); method.Parameters.Add(new CodeParameterDeclarationExpression(typeof(object), "data")); method.ReturnType = new CodeTypeReference(typeof(object)); CodeExpression ex = new CodeVariableReferenceExpression("visitor"); ex = new CodeMethodInvokeExpression(ex, VisitPrefix + ctd.Name, new CodeThisReferenceExpression(), new CodeVariableReferenceExpression("data")); method.Statements.Add(new CodeMethodReturnStatement(ex)); ctd.Members.Add(method); method = new CodeMemberMethod(); method.Name = "ToString"; method.Attributes = MemberAttributes.Public | MemberAttributes.Override; method.ReturnType = new CodeTypeReference(typeof(string)); method.Statements.Add(new CodeMethodReturnStatement(CreateToString(type))); ctd.Members.Add(method); } } } System.CodeDom.Compiler.CodeGeneratorOptions settings = new System.CodeDom.Compiler.CodeGeneratorOptions(); settings.IndentString = "\t"; settings.VerbatimOrder = true; using (StringWriter writer = new StringWriter()) { new Microsoft.CSharp.CSharpCodeProvider().GenerateCodeFromCompileUnit(ccu, writer, settings); File.WriteAllText(directory + "Generated.cs", NormalizeNewLines(writer)); } ccu = new CodeCompileUnit(); cns = ccu.AddNamespace("ICSharpCode.NRefactory.VB"); cns.AddImport("System"); cns.AddImport("ICSharpCode.NRefactory.VB.Ast"); cns.Types.Add(CreateAstVisitorInterface(nodeTypes)); using (StringWriter writer = new StringWriter()) { new Microsoft.CSharp.CSharpCodeProvider().GenerateCodeFromCompileUnit(ccu, writer, settings); File.WriteAllText(visitorsDir + "../IAstVisitor.cs", NormalizeNewLines(writer)); } ccu = new CodeCompileUnit(); cns = ccu.AddNamespace("ICSharpCode.NRefactory.VB.Visitors"); cns.AddImport("System"); cns.AddImport("System.Collections.Generic"); cns.AddImport("System.Diagnostics"); cns.AddImport("ICSharpCode.NRefactory.VB.Ast"); cns.Types.Add(CreateAstVisitorClass(nodeTypes, false)); using (StringWriter writer = new StringWriter()) { new Microsoft.CSharp.CSharpCodeProvider().GenerateCodeFromCompileUnit(ccu, writer, settings); File.WriteAllText(visitorsDir + "AbstractAstVisitor.cs", NormalizeNewLines(writer)); } ccu = new CodeCompileUnit(); cns = ccu.AddNamespace("ICSharpCode.NRefactory.VB.Visitors"); cns.AddImport("System"); cns.AddImport("System.Collections.Generic"); cns.AddImport("System.Diagnostics"); cns.AddImport("ICSharpCode.NRefactory.VB.Ast"); cns.Types.Add(CreateAstVisitorClass(nodeTypes, true)); using (StringWriter writer = new StringWriter()) { new Microsoft.CSharp.CSharpCodeProvider().GenerateCodeFromCompileUnit(ccu, writer, settings); File.WriteAllText(visitorsDir + "AbstractAstTransformer.cs", NormalizeNewLines(writer)); } ccu = new CodeCompileUnit(); cns = ccu.AddNamespace("ICSharpCode.NRefactory.VB.Visitors"); cns.AddImport("System"); cns.AddImport("ICSharpCode.NRefactory.VB.Ast"); cns.Types.Add(CreateNodeTrackingAstVisitorClass(nodeTypes)); using (StringWriter writer = new StringWriter()) { new Microsoft.CSharp.CSharpCodeProvider().GenerateCodeFromCompileUnit(ccu, writer, settings); // CodeDom cannot output "sealed", so we need to use this hack: File.WriteAllText(visitorsDir + "NodeTrackingAstVisitor.cs", NormalizeNewLines(writer).Replace("public override object", "public sealed override object")); } //NotImplementedAstVisitor ccu = new CodeCompileUnit(); cns = ccu.AddNamespace("ICSharpCode.NRefactory.VB.Visitors"); cns.AddImport("System"); cns.AddImport("ICSharpCode.NRefactory.VB.Ast"); cns.Types.Add(CreateNotImplementedAstVisitorClass(nodeTypes)); using (StringWriter writer = new StringWriter()) { new Microsoft.CSharp.CSharpCodeProvider().GenerateCodeFromCompileUnit(ccu, writer, settings); File.WriteAllText(visitorsDir + "NotImplementedAstVisitor.cs", NormalizeNewLines(writer)); } Debug.WriteLine("DOM Generator done!"); Debug.WriteLine("start keyword list generation..."); KeywordGenerator.Generate(); Debug.WriteLine("keyword list generation done!"); }
public void GenerateCode(CodeDomGenerator.Language language) { switch (language) { case CodeDomGenerator.Language.CSharp: using (Microsoft.CSharp.CSharpCodeProvider provider = new Microsoft.CSharp.CSharpCodeProvider()) { System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions(); using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString)) { tw.Write("foreach ("); provider.GenerateCodeFromExpression(new CodeTypeReferenceExpression(IterationItemType), tw, opts); tw.Write(" {0} in ", provider.CreateValidIdentifier(IterationItemName)); provider.GenerateCodeFromExpression(IterExpression, tw, opts); tw.WriteLine(")"); tw.WriteLine("{"); tw.Indent++; if (Statements != null) foreach (CodeStatement statement in Statements) { provider.GenerateCodeFromStatement(statement, tw, opts); } tw.Indent--; tw.WriteLine("}"); Value = tw.InnerWriter.ToString(); } } break; case CodeDomGenerator.Language.VB: using (Microsoft.VisualBasic.VBCodeProvider provider = new Microsoft.VisualBasic.VBCodeProvider()) { System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions(); using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString)) { tw.Write("For Each {0} As ", provider.CreateValidIdentifier(IterationItemName)); provider.GenerateCodeFromExpression(new CodeTypeReferenceExpression(IterationItemType), tw, opts); tw.Write(" in "); provider.GenerateCodeFromExpression(IterExpression, tw, opts); tw.WriteLine(); tw.Indent++; if (Statements != null) foreach (CodeStatement statement in Statements) { provider.GenerateCodeFromStatement(statement, tw, opts); } tw.Indent--; tw.WriteLine("Next"); Value = tw.InnerWriter.ToString(); } } break; default: throw new NotImplementedException(language.ToString()); } }
public void GenerateCode(CodeDomGenerator.Language language) { switch (language) { case CodeDomGenerator.Language.CSharp: using (Microsoft.CSharp.CSharpCodeProvider provider = new Microsoft.CSharp.CSharpCodeProvider()) { System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions(); using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString)) { tw.Write("switch ("); if (SwitchExpression != null) provider.GenerateCodeFromExpression(SwitchExpression, tw, opts); tw.WriteLine(")"); tw.WriteLine("{"); tw.Indent++; foreach (CaseBlock c in m_cases) { if (c.Statements != null) { if (c.CaseExpression != null) { tw.Write("case "); provider.GenerateCodeFromExpression(c.CaseExpression, tw, opts); tw.WriteLine(":"); } else { tw.WriteLine("default:"); } tw.Indent++; foreach (CodeStatement stmt in c.Statements) { provider.GenerateCodeFromStatement(stmt, tw, opts); } tw.Indent--; } //else //{ // tw.Indent++; // tw.WriteLine("break;"); // tw.Indent--; //} } tw.Indent--; tw.WriteLine("}"); Value = tw.InnerWriter.ToString(); } } break; case CodeDomGenerator.Language.VB: using (Microsoft.VisualBasic.VBCodeProvider provider = new Microsoft.VisualBasic.VBCodeProvider()) { System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions(); using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString)) { tw.Write("Select Case "); if (SwitchExpression != null) provider.GenerateCodeFromExpression(SwitchExpression, tw, opts); tw.WriteLine(); tw.Indent++; foreach (CaseBlock c in m_cases) { if (c.Statements != null) { if (c.CaseExpression != null) { tw.Write("Case "); provider.GenerateCodeFromExpression(c.CaseExpression, tw, opts); tw.WriteLine(); } else { tw.WriteLine("Case Else"); } tw.Indent++; for (int i = 0; i < c.Statements.Length; i++) { CodeStatement stmt = c.Statements[i]; if (!(stmt is CodeExitSelectStatement) || i < c.Statements.Length-1) provider.GenerateCodeFromStatement(stmt, tw, opts); } tw.Indent--; } //else if (i < m_cases.Count - 1) //{ // tw.Indent++; // tw.WriteLine("Exit Select"); // tw.Indent--; //} } tw.Indent--; tw.WriteLine("End Select"); Value = tw.InnerWriter.ToString(); } } break; default: throw new NotImplementedException(language.ToString()); } }
private static void GenerateCSCodeForServiceThread() { try { string outputFile = "WSDL-Output"; MetadataExchangeClient mexClient = new MetadataExchangeClient(server.metaAddress, MetadataExchangeClientMode.HttpGet); mexClient.ResolveMetadataReferences = true; mexClient.OperationTimeout = TimeSpan.FromSeconds(60); mexClient.MaximumResolvedReferences = 1000; MetadataSet metaDocs = mexClient.GetMetadata(); WsdlImporter importer = new WsdlImporter(metaDocs); ServiceContractGenerator generator = new ServiceContractGenerator(); // Add our custom DCAnnotationSurrogate // to write XSD annotations into the comments. object dataContractImporter; XsdDataContractImporter xsdDCImporter; if (!importer.State.TryGetValue(typeof(XsdDataContractImporter), out dataContractImporter)) { Console.WriteLine("Couldn't find the XsdDataContractImporter! Adding custom importer."); xsdDCImporter = new XsdDataContractImporter(); xsdDCImporter.Options = new ImportOptions(); importer.State.Add(typeof(XsdDataContractImporter), xsdDCImporter); } else { xsdDCImporter = (XsdDataContractImporter)dataContractImporter; if (xsdDCImporter.Options == null) { Console.WriteLine("There were no ImportOptions on the importer."); xsdDCImporter.Options = new ImportOptions(); } } ////TODO: This is a customer implementation using the IDataContractSurrogate interface // xsdDCImporter.Options.DataContractSurrogate = new DCAnnotationSurrogate(); // Uncomment the following code if you are going to do your work programmatically rather than add // the WsdlDocumentationImporters through a configuration file. /* * // The following code inserts a custom WsdlImporter without removing the other * // importers already in the collection. * System.Collections.Generic.IEnumerable<IWsdlImportExtension> exts = importer.WsdlImportExtensions; * System.Collections.Generic.List<IWsdlImportExtension> newExts * = new System.Collections.Generic.List<IWsdlImportExtension>(); * foreach (IWsdlImportExtension ext in exts) * { * Console.WriteLine("Default WSDL import extensions: {0}", ext.GetType().Name); * newExts.Add(ext); * } * newExts.Add(new WsdlDocumentationImporter()); * System.Collections.Generic.IEnumerable<IPolicyImportExtension> polExts = importer.PolicyImportExtensions; * importer = new WsdlImporter(metaDocs, polExts, newExts); */ System.Collections.ObjectModel.Collection <ContractDescription> contracts = importer.ImportAllContracts(); importer.ImportAllEndpoints(); foreach (ContractDescription contract in contracts) { generator.GenerateServiceContractType(contract); } if (generator.Errors.Count != 0) { throw new Exception("There were errors during code compilation."); } // Write the code dom System.CodeDom.Compiler.CodeGeneratorOptions options = new System.CodeDom.Compiler.CodeGeneratorOptions(); options.BracingStyle = "C"; System.CodeDom.Compiler.CodeDomProvider codeDomProvider = System.CodeDom.Compiler.CodeDomProvider.CreateProvider("C#"); System.CodeDom.Compiler.IndentedTextWriter textWriter = new System.CodeDom.Compiler.IndentedTextWriter(new System.IO.StreamWriter(outputFile)); codeDomProvider.GenerateCodeFromCompileUnit(generator.TargetCompileUnit, textWriter, options); textWriter.Close(); } catch (FaultException fx) { MessageBox.Show(fx.Message + " > " + fx.Reason + " > " + fx.Action + " > " + fx.Data + " > " + fx.Code + " > " + fx.InnerException); } catch (TimeoutException tx) { MessageBox.Show(tx.Message + " > " + tx.Data + " > " + tx.InnerException); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
//public CodeSwitchStatement Break() //{ // m_cases.Add(new CaseBlock()); // return this; //} #region ICustomCodeDomObject Members public void GenerateCode(CodeDomGenerator.Language language) { switch (language) { case CodeDomGenerator.Language.CSharp: using (Microsoft.CSharp.CSharpCodeProvider provider = new Microsoft.CSharp.CSharpCodeProvider()) { System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions(); using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString)) { tw.Write("switch ("); if (SwitchExpression != null) { provider.GenerateCodeFromExpression(SwitchExpression, tw, opts); } tw.WriteLine(")"); tw.WriteLine("{"); tw.Indent++; foreach (CaseBlock c in m_cases) { if (c.Statements != null) { if (c.CaseExpression != null) { tw.Write("case "); provider.GenerateCodeFromExpression(c.CaseExpression, tw, opts); tw.WriteLine(":"); } else { tw.WriteLine("default:"); } tw.Indent++; foreach (CodeStatement stmt in c.Statements) { provider.GenerateCodeFromStatement(stmt, tw, opts); } tw.Indent--; } //else //{ // tw.Indent++; // tw.WriteLine("break;"); // tw.Indent--; //} } tw.Indent--; tw.WriteLine("}"); Value = tw.InnerWriter.ToString(); } } break; case CodeDomGenerator.Language.VB: using (Microsoft.VisualBasic.VBCodeProvider provider = new Microsoft.VisualBasic.VBCodeProvider()) { System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions(); using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString)) { tw.Write("Select Case "); if (SwitchExpression != null) { provider.GenerateCodeFromExpression(SwitchExpression, tw, opts); } tw.WriteLine(); tw.Indent++; foreach (CaseBlock c in m_cases) { if (c.Statements != null) { if (c.CaseExpression != null) { tw.Write("Case "); provider.GenerateCodeFromExpression(c.CaseExpression, tw, opts); tw.WriteLine(); } else { tw.WriteLine("Case Else"); } tw.Indent++; for (int i = 0; i < c.Statements.Length; i++) { CodeStatement stmt = c.Statements[i]; if (!(stmt is CodeExitSelectStatement) || i < c.Statements.Length - 1) { provider.GenerateCodeFromStatement(stmt, tw, opts); } } tw.Indent--; } //else if (i < m_cases.Count - 1) //{ // tw.Indent++; // tw.WriteLine("Exit Select"); // tw.Indent--; //} } tw.Indent--; tw.WriteLine("End Select"); Value = tw.InnerWriter.ToString(); } } break; default: throw new NotImplementedException(language.ToString()); } }
//FIXME: error handling void UpdateCliTypes (NSObjectProjectInfo pinfo, List<SyncObjcBackJob> typeSyncJobs) { var provider = System.CodeDom.Compiler.CodeDomProvider.CreateProvider ("C#"); var options = new System.CodeDom.Compiler.CodeGeneratorOptions (); var writer = MonoDevelop.DesignerSupport.CodeBehindWriter.CreateForProject ( new MonoDevelop.Core.ProgressMonitoring.NullProgressMonitor (), dnp); //group all the types by designer file var designerFile = new Dictionary<string, List<NSObjectTypeInfo>> (); foreach (var job in typeSyncJobs) { List<NSObjectTypeInfo> types; if (!designerFile.TryGetValue (job.DesignerFile, out types)) designerFile[job.DesignerFile] = types = new List<NSObjectTypeInfo> (); types.Add (job.Type); } //add in other designer types that exist in the designer files foreach (var ut in pinfo.GetTypes ()) { if (!ut.IsUserType) continue; var df = ut.GetDesignerFile (); List<NSObjectTypeInfo> types; if (df != null && designerFile.TryGetValue (df, out types)) if (!types.Any (t => t.ObjCName == ut.ObjCName)) types.Add (ut); } updatingProjectFiles = true; try { foreach (var df in designerFile) { var ccu = GenerateCompileUnit (provider, options, df.Key, df.Value); writer.Write (ccu, df.Key); } writer.WriteOpenFiles (); foreach (var job in typeSyncJobs) { pinfo.InsertUpdatedType (job.Type); trackedFiles[job.HFile] = File.GetLastWriteTime (job.HFile); } } finally { updatingProjectFiles = false; } }
public static void Main(string[] args) { string directory = "../../../Project/Src/Ast/"; string visitorsDir = "../../../Project/Src/Visitors/"; Debug.WriteLine("AST Generator running..."); if (!File.Exists(directory + "INode.cs")) { Debug.WriteLine("did not find output directory"); return; } if (!File.Exists(visitorsDir + "AbstractAstTransformer.cs")) { Debug.WriteLine("did not find visitor output directory"); return; } List <Type> nodeTypes = new List <Type>(); foreach (Type type in typeof(MainClass).Assembly.GetTypes()) { if (type.IsClass && typeof(INode).IsAssignableFrom(type)) { nodeTypes.Add(type); } } nodeTypes.Sort(delegate(Type a, Type b) { return(a.Name.CompareTo(b.Name)); }); CodeCompileUnit ccu = new CodeCompileUnit(); CodeNamespace cns = ccu.AddNamespace("ICSharpCode.NRefactory.Ast"); cns.AddImport("System"); cns.AddImport("System.Collections.Generic"); foreach (Type type in nodeTypes) { if (type.GetCustomAttributes(typeof(CustomImplementationAttribute), false).Length == 0) { CodeTypeDeclaration ctd = cns.AddType(type.Name); if (type.IsAbstract) { ctd.TypeAttributes |= TypeAttributes.Abstract; } ctd.BaseTypes.Add(new CodeTypeReference(type.BaseType.Name)); ProcessType(type, ctd); foreach (object o in type.GetCustomAttributes(false)) { if (o is TypeImplementationModifierAttribute) { (o as TypeImplementationModifierAttribute).ModifyImplementation(cns, ctd, type); } } if (!type.IsAbstract) { CodeMemberMethod method = new CodeMemberMethod(); method.Name = "AcceptVisitor"; method.Attributes = MemberAttributes.Public | MemberAttributes.Override; method.Parameters.Add(new CodeParameterDeclarationExpression("IAstVisitor", "visitor")); method.Parameters.Add(new CodeParameterDeclarationExpression(typeof(object), "data")); method.ReturnType = new CodeTypeReference(typeof(object)); CodeExpression ex = new CodeVariableReferenceExpression("visitor"); ex = new CodeMethodInvokeExpression(ex, VisitPrefix + ctd.Name, new CodeThisReferenceExpression(), new CodeVariableReferenceExpression("data")); method.Statements.Add(new CodeMethodReturnStatement(ex)); ctd.Members.Add(method); method = new CodeMemberMethod(); method.Name = "ToString"; method.Attributes = MemberAttributes.Public | MemberAttributes.Override; method.ReturnType = new CodeTypeReference(typeof(string)); method.Statements.Add(new CodeMethodReturnStatement(CreateToString(type))); ctd.Members.Add(method); } } } System.CodeDom.Compiler.CodeGeneratorOptions settings = new System.CodeDom.Compiler.CodeGeneratorOptions(); settings.IndentString = "\t"; settings.VerbatimOrder = true; using (StringWriter writer = new StringWriter()) { new Microsoft.CSharp.CSharpCodeProvider().GenerateCodeFromCompileUnit(ccu, writer, settings); File.WriteAllText(directory + "Generated.cs", writer.ToString()); } ccu = new CodeCompileUnit(); cns = ccu.AddNamespace("ICSharpCode.NRefactory"); cns.AddImport("System"); cns.AddImport("ICSharpCode.NRefactory.Ast"); cns.Types.Add(CreateAstVisitorInterface(nodeTypes)); using (StringWriter writer = new StringWriter()) { new Microsoft.CSharp.CSharpCodeProvider().GenerateCodeFromCompileUnit(ccu, writer, settings); File.WriteAllText(visitorsDir + "../IAstVisitor.cs", writer.ToString()); } ccu = new CodeCompileUnit(); cns = ccu.AddNamespace("ICSharpCode.NRefactory.Visitors"); cns.AddImport("System"); cns.AddImport("System.Collections.Generic"); cns.AddImport("System.Diagnostics"); cns.AddImport("ICSharpCode.NRefactory.Ast"); cns.Types.Add(CreateAstVisitorClass(nodeTypes, false)); using (StringWriter writer = new StringWriter()) { new Microsoft.CSharp.CSharpCodeProvider().GenerateCodeFromCompileUnit(ccu, writer, settings); File.WriteAllText(visitorsDir + "AbstractAstVisitor.cs", writer.ToString()); } ccu = new CodeCompileUnit(); cns = ccu.AddNamespace("ICSharpCode.NRefactory.Visitors"); cns.AddImport("System"); cns.AddImport("System.Collections.Generic"); cns.AddImport("System.Diagnostics"); cns.AddImport("ICSharpCode.NRefactory.Ast"); cns.Types.Add(CreateAstVisitorClass(nodeTypes, true)); using (StringWriter writer = new StringWriter()) { new Microsoft.CSharp.CSharpCodeProvider().GenerateCodeFromCompileUnit(ccu, writer, settings); File.WriteAllText(visitorsDir + "AbstractAstTransformer.cs", writer.ToString()); } ccu = new CodeCompileUnit(); cns = ccu.AddNamespace("ICSharpCode.NRefactory.Visitors"); cns.AddImport("System"); cns.AddImport("ICSharpCode.NRefactory.Ast"); cns.Types.Add(CreateNodeTrackingAstVisitorClass(nodeTypes)); using (StringWriter writer = new StringWriter()) { new Microsoft.CSharp.CSharpCodeProvider().GenerateCodeFromCompileUnit(ccu, writer, settings); // CodeDom cannot output "sealed", so we need to use this hack: File.WriteAllText(visitorsDir + "NodeTrackingAstVisitor.cs", writer.ToString().Replace("public override object", "public sealed override object")); } //NotImplementedAstVisitor ccu = new CodeCompileUnit(); cns = ccu.AddNamespace("ICSharpCode.NRefactory.Visitors"); cns.AddImport("System"); cns.AddImport("ICSharpCode.NRefactory.Ast"); cns.Types.Add(CreateNotImplementedAstVisitorClass(nodeTypes)); using (StringWriter writer = new StringWriter()) { new Microsoft.CSharp.CSharpCodeProvider().GenerateCodeFromCompileUnit(ccu, writer, settings); File.WriteAllText(visitorsDir + "NotImplementedAstVisitor.cs", writer.ToString()); } Debug.WriteLine("AST Generator done!"); }
static void GenerateVBCodeForService(EndpointAddress metadataAddress, string outputFile) { MetadataExchangeClient mexClient = new MetadataExchangeClient(metadataAddress); mexClient.ResolveMetadataReferences = true; MetadataSet metaDocs = mexClient.GetMetadata(); WsdlImporter importer = new WsdlImporter(metaDocs); ServiceContractGenerator generator = new ServiceContractGenerator(); // Uncomment the following code if you are going to do your work programmatically rather than add // the WsdlDocumentationImporters through a configuration file. /* // The following code inserts the custom WSDL programmatically adding the custom WsdlImporter without // removing the other importers already in the collection. System.Collections.Generic.IEnumerable<IWsdlImportExtension> exts = importer.WsdlExtensions; System.Collections.Generic.List<IWsdlImportExtension> newExts = new System.Collections.Generic.List<IWsdlImportExtension>(); foreach (IWsdlImportExtension ext in exts) newExts.Add(ext); newExts.Add(new WsdlDocumentationImporter()); importer = new WsdlImporter(newExts.ToArray(), metaDocs.MetadataSections); */ System.Collections.ObjectModel.Collection<ContractDescription> contracts = importer.ImportAllContracts(); foreach (ContractDescription contract in contracts) { generator.GenerateServiceContractType(contract); } if (generator.Errors.Count != 0) throw new ApplicationException("There were errors during code compilation."); // Write the code dom. System.CodeDom.Compiler.CodeGeneratorOptions options = new System.CodeDom.Compiler.CodeGeneratorOptions(); options.BracingStyle = "C"; System.CodeDom.Compiler.CodeDomProvider codeDomProvider = System.CodeDom.Compiler.CodeDomProvider.CreateProvider("VB"); System.CodeDom.Compiler.IndentedTextWriter textWriter = new System.CodeDom.Compiler.IndentedTextWriter(new System.IO.StreamWriter(outputFile)); codeDomProvider.GenerateCodeFromCompileUnit(generator.TargetCompileUnit, textWriter, options); textWriter.Close(); }
protected override void GenerateTransformCode(string directiveName, System.Text.StringBuilder codeBuffer, System.CodeDom.Compiler.CodeDomProvider languageProvider, System.Collections.Generic.IDictionary <string, string> requiresArguments, System.Collections.Generic.IDictionary <string, string> providesArguments) { base.GenerateTransformCode(directiveName, codeBuffer, languageProvider, requiresArguments, providesArguments); System.CodeDom.CodeMemberField codeMemberField = null; if (!System.String.IsNullOrEmpty(providesArguments["GeneratedResourceName"])) { codeMemberField = new System.CodeDom.CodeMemberField(new System.CodeDom.CodeTypeReference(typeof(string)), providesArguments["GeneratedResourceName"]); codeMemberField.Attributes = System.CodeDom.MemberAttributes.Abstract | System.CodeDom.MemberAttributes.Override | System.CodeDom.MemberAttributes.FamilyAndAssembly | System.CodeDom.MemberAttributes.FamilyOrAssembly; string s = requiresArguments["ProjectDefaultNamespace"]; if (!System.String.IsNullOrEmpty(requiresArguments["GeneratedCodeFolder"])) { if (!System.String.IsNullOrEmpty(s)) { s += "."; } s += requiresArguments["GeneratedCodeFolder"]; } if (!System.String.IsNullOrEmpty(requiresArguments["GeneratedResourceFile"])) { if (!System.String.IsNullOrEmpty(s)) { s += "."; } s += requiresArguments["GeneratedResourceFile"]; } codeMemberField.InitExpression = new System.CodeDom.CodePrimitiveExpression(s); System.CodeDom.Compiler.CodeGeneratorOptions codeGeneratorOptions = new System.CodeDom.Compiler.CodeGeneratorOptions(); codeGeneratorOptions.BlankLinesBetweenMembers = true; codeGeneratorOptions.IndentString = " "; codeGeneratorOptions.VerbatimOrder = true; codeGeneratorOptions.BracingStyle = "C"; using (System.IO.StringWriter stringWriter = new System.IO.StringWriter(codeBuffer, System.Globalization.CultureInfo.InvariantCulture)) { if (codeMemberField != null) { languageProvider.GenerateCodeFromMember(codeMemberField, stringWriter, codeGeneratorOptions); } } } if (!System.String.IsNullOrEmpty(providesArguments["GeneratedNamespace"])) { codeMemberField = new System.CodeDom.CodeMemberField(new System.CodeDom.CodeTypeReference(typeof(string)), providesArguments["GeneratedNamespace"]); codeMemberField.Attributes = System.CodeDom.MemberAttributes.Abstract | System.CodeDom.MemberAttributes.Override | System.CodeDom.MemberAttributes.FamilyAndAssembly | System.CodeDom.MemberAttributes.FamilyOrAssembly; string s = requiresArguments["ProjectDefaultNamespace"]; codeMemberField.InitExpression = new System.CodeDom.CodePrimitiveExpression(s); System.CodeDom.Compiler.CodeGeneratorOptions codeGeneratorOptions = new System.CodeDom.Compiler.CodeGeneratorOptions(); codeGeneratorOptions.BlankLinesBetweenMembers = true; codeGeneratorOptions.IndentString = " "; codeGeneratorOptions.VerbatimOrder = true; codeGeneratorOptions.BracingStyle = "C"; using (System.IO.StringWriter stringWriter = new System.IO.StringWriter(codeBuffer, System.Globalization.CultureInfo.InvariantCulture)) { if (codeMemberField != null) { languageProvider.GenerateCodeFromMember(codeMemberField, stringWriter, codeGeneratorOptions); } } } }
public override void GenerateCodeFromMember(System.CodeDom.CodeTypeMember member, TextWriter writer, System.CodeDom.Compiler.CodeGeneratorOptions options) { }
string GenerateCode (ITextTemplatingEngineHost host, string content, string name, string generatorNewline) { ParsedTemplate pt = ParsedTemplate.FromText (content, host); if (pt.Errors.HasErrors) { host.LogErrors (pt.Errors); return null; } TemplateSettings settings = TemplatingEngine.GetSettings (host, pt); if (name != null) settings.Name = name; if (pt.Errors.HasErrors) { host.LogErrors (pt.Errors); return null; } var ccu = TemplatingEngine.GenerateCompileUnit (host, content, pt, settings); if (pt.Errors.HasErrors) { host.LogErrors (pt.Errors); return null; } var opts = new System.CodeDom.Compiler.CodeGeneratorOptions (); using (var writer = new System.IO.StringWriter ()) { writer.NewLine = generatorNewline; settings.Provider.GenerateCodeFromCompileUnit (ccu, writer, opts); return writer.ToString (); } }
public static void Main(string[] args) { string directory = "../../NRefactory/Project/Src/Ast/"; string visitorsDir = "../../NRefactory/Project/Src/Visitors/"; Console.WriteLine("AST Generator running..."); if (!File.Exists(directory + "INode.cs")) { Console.WriteLine("did not find output directory " + Path.GetFullPath(Path.GetDirectoryName(directory))); return; } if (!File.Exists(visitorsDir + "AbstractAstTransformer.cs")) { Console.WriteLine("did not find visitor output directory"); return; } List<Type> nodeTypes = new List<Type>(); foreach (Type type in typeof(MainClass).Assembly.GetTypes()) { if (type.IsClass && typeof(INode).IsAssignableFrom(type)) { nodeTypes.Add(type); } } nodeTypes.Sort(delegate(Type a, Type b) { return a.Name.CompareTo(b.Name); }); CodeCompileUnit ccu = new CodeCompileUnit(); CodeNamespace cns = ccu.AddNamespace("ICSharpCode.NRefactory.Ast"); cns.AddImport("System"); cns.AddImport("System.Collections.Generic"); cns.AddImport("AgentRalph.Visitors"); foreach (Type type in nodeTypes) { if (type.GetCustomAttributes(typeof(CustomImplementationAttribute), false).Length == 0) { CodeTypeDeclaration ctd = cns.AddType(type.Name); if (type.IsAbstract) { ctd.TypeAttributes |= TypeAttributes.Abstract; } ctd.IsPartial = true; ctd.BaseTypes.Add(new CodeTypeReference(type.BaseType.Name)); ProcessType(type, ctd); foreach (object o in type.GetCustomAttributes(false)) { if (o is TypeImplementationModifierAttribute) { (o as TypeImplementationModifierAttribute).ModifyImplementation(cns, ctd, type); } } if (!type.IsAbstract) { AddAnAcceptVisitorMethod(type, ctd, "IAstVisitor", typeof(object)); // Create an overload AddAnAcceptVisitorMethod(type, ctd, "AstComparisonVisitor", typeof(bool)); AddAChillunsGetter(type, ctd); var method = new CodeMemberMethod(); method.Name = "ToString"; method.Attributes = MemberAttributes.Public | MemberAttributes.Override; method.ReturnType = new CodeTypeReference(typeof(string)); method.Statements.Add(new CodeMethodReturnStatement(CreateToString(type))); ctd.Members.Add(method); } } } System.CodeDom.Compiler.CodeGeneratorOptions settings = new System.CodeDom.Compiler.CodeGeneratorOptions(); settings.IndentString = "\t"; settings.VerbatimOrder = true; using (StringWriter writer = new StringWriter()) { new Microsoft.CSharp.CSharpCodeProvider().GenerateCodeFromCompileUnit(ccu, writer, settings); File.WriteAllText(directory + "Generated.cs", writer.ToString()); } ccu = new CodeCompileUnit(); cns = ccu.AddNamespace("ICSharpCode.NRefactory"); cns.AddImport("System"); cns.AddImport("ICSharpCode.NRefactory.Ast"); cns.Types.Add(CreateAstVisitorInterface(nodeTypes)); using (StringWriter writer = new StringWriter()) { new Microsoft.CSharp.CSharpCodeProvider().GenerateCodeFromCompileUnit(ccu, writer, settings); File.WriteAllText(visitorsDir + "../IAstVisitor.cs", writer.ToString()); } // My modifications to the generation process are not preserving the creation of these particular files. // So I just don't regenerate them for the time being. // ccu = new CodeCompileUnit(); // cns = ccu.AddNamespace("ICSharpCode.NRefactory.Visitors"); // cns.AddImport("System"); // cns.AddImport("System.Collections.Generic"); // cns.AddImport("System.Diagnostics"); // cns.AddImport("ICSharpCode.NRefactory.Ast"); // cns.Types.Add(CreateAstVisitorClass(nodeTypes, false)); // // using (StringWriter writer = new StringWriter()) { // new Microsoft.CSharp.CSharpCodeProvider().GenerateCodeFromCompileUnit(ccu, writer, settings); // File.WriteAllText(visitorsDir + "AbstractAstVisitor.cs", writer.ToString()); // } // // ccu = new CodeCompileUnit(); // cns = ccu.AddNamespace("ICSharpCode.NRefactory.Visitors"); // cns.AddImport("System"); // cns.AddImport("System.Collections.Generic"); // cns.AddImport("System.Diagnostics"); // cns.AddImport("ICSharpCode.NRefactory.Ast"); // cns.Types.Add(CreateAstVisitorClass(nodeTypes, true)); // // using (StringWriter writer = new StringWriter()) { // new Microsoft.CSharp.CSharpCodeProvider().GenerateCodeFromCompileUnit(ccu, writer, settings); // File.WriteAllText(visitorsDir + "AbstractAstTransformer.cs", writer.ToString()); // } ccu = new CodeCompileUnit(); cns = ccu.AddNamespace("ICSharpCode.NRefactory.Visitors"); cns.AddImport("System"); cns.AddImport("ICSharpCode.NRefactory.Ast"); cns.Types.Add(CreateNodeTrackingAstVisitorClass(nodeTypes)); using (StringWriter writer = new StringWriter()) { new Microsoft.CSharp.CSharpCodeProvider().GenerateCodeFromCompileUnit(ccu, writer, settings); // CodeDom cannot output "sealed", so we need to use this hack: File.WriteAllText(visitorsDir + "NodeTrackingAstVisitor.cs", writer.ToString().Replace("public override object", "public sealed override object")); } //NotImplementedAstVisitor ccu = new CodeCompileUnit(); cns = ccu.AddNamespace("ICSharpCode.NRefactory.Visitors"); cns.AddImport("System"); cns.AddImport("ICSharpCode.NRefactory.Ast"); cns.Types.Add(CreateNotImplementedAstVisitorClass(nodeTypes)); using (StringWriter writer = new StringWriter()) { new Microsoft.CSharp.CSharpCodeProvider().GenerateCodeFromCompileUnit(ccu, writer, settings); File.WriteAllText(visitorsDir + "NotImplementedAstVisitor.cs", writer.ToString()); } // TwoTreeAbstractAstVisitor ccu = new CodeCompileUnit(); cns = ccu.AddNamespace("AgentRalph.Visitors"); cns.AddImport("System"); cns.AddImport("System.Collections.Generic"); cns.AddImport("System.Diagnostics"); cns.AddImport("ICSharpCode.NRefactory.Ast"); cns.AddImport("ICSharpCode.NRefactory"); cns.Types.Add(CreateAstComparisonVisitorClass(nodeTypes)); using (StringWriter writer = new StringWriter()) { new Microsoft.CSharp.CSharpCodeProvider().GenerateCodeFromCompileUnit(ccu, writer, settings); // Put it in the NRefactor project var path = visitorsDir + "AstComparisonVisitor.Generated.cs"; File.WriteAllText(path, writer.ToString()); Console.WriteLine("Created file " + path); } Console.WriteLine("AST Generator done!"); }
//<snippet8> static void GenerateCSCodeForService(EndpointAddress metadataAddress, string outputFile) { //<snippet10> MetadataExchangeClient mexClient = new MetadataExchangeClient(metadataAddress); mexClient.ResolveMetadataReferences = true; MetadataSet metaDocs = mexClient.GetMetadata(); WsdlImporter importer = new WsdlImporter(metaDocs); ServiceContractGenerator generator = new ServiceContractGenerator(); //</snippet10> // Add our custom DCAnnotationSurrogate // to write XSD annotations into the comments. object dataContractImporter; XsdDataContractImporter xsdDCImporter; if (!importer.State.TryGetValue(typeof(XsdDataContractImporter), out dataContractImporter)) { Console.WriteLine("Couldn't find the XsdDataContractImporter! Adding custom importer."); xsdDCImporter = new XsdDataContractImporter(); xsdDCImporter.Options = new ImportOptions(); importer.State.Add(typeof(XsdDataContractImporter), xsdDCImporter); } else { xsdDCImporter = (XsdDataContractImporter)dataContractImporter; if (xsdDCImporter.Options == null) { Console.WriteLine("There were no ImportOptions on the importer."); xsdDCImporter.Options = new ImportOptions(); } } xsdDCImporter.Options.DataContractSurrogate = new DCAnnotationSurrogate(); // Uncomment the following code if you are going to do your work programmatically rather than add // the WsdlDocumentationImporters through a configuration file. /* * // <snippet11> * // The following code inserts a custom WsdlImporter without removing the other * // importers already in the collection. * System.Collections.Generic.IEnumerable<IWsdlImportExtension> exts = importer.WsdlImportExtensions; * System.Collections.Generic.List<IWsdlImportExtension> newExts * = new System.Collections.Generic.List<IWsdlImportExtension>(); * foreach (IWsdlImportExtension ext in exts) * { * Console.WriteLine("Default WSDL import extensions: {0}", ext.GetType().Name); * newExts.Add(ext); * } * newExts.Add(new WsdlDocumentationImporter()); * System.Collections.Generic.IEnumerable<IPolicyImportExtension> polExts = importer.PolicyImportExtensions; * importer = new WsdlImporter(metaDocs, polExts, newExts); * // </snippet11> */ System.Collections.ObjectModel.Collection <ContractDescription> contracts = importer.ImportAllContracts(); importer.ImportAllEndpoints(); foreach (ContractDescription contract in contracts) { generator.GenerateServiceContractType(contract); } if (generator.Errors.Count != 0) { throw new Exception("There were errors during code compilation."); } // Write the code dom System.CodeDom.Compiler.CodeGeneratorOptions options = new System.CodeDom.Compiler.CodeGeneratorOptions(); options.BracingStyle = "C"; System.CodeDom.Compiler.CodeDomProvider codeDomProvider = System.CodeDom.Compiler.CodeDomProvider.CreateProvider("C#"); System.CodeDom.Compiler.IndentedTextWriter textWriter = new System.CodeDom.Compiler.IndentedTextWriter(new System.IO.StreamWriter(outputFile)); codeDomProvider.GenerateCodeFromCompileUnit( generator.TargetCompileUnit, textWriter, options ); textWriter.Close(); }
public void GenerateCode(CodeDomGenerator.Language language) { switch (language) { case CodeDomGenerator.Language.CSharp: using (Microsoft.CSharp.CSharpCodeProvider provider = new Microsoft.CSharp.CSharpCodeProvider()) { System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions(); using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString)) { tw.Write("foreach ("); provider.GenerateCodeFromExpression(new CodeTypeReferenceExpression(IterationItemType), tw, opts); tw.Write(" {0} in ", provider.CreateValidIdentifier(IterationItemName)); provider.GenerateCodeFromExpression(IterExpression, tw, opts); tw.WriteLine(")"); tw.WriteLine("{"); tw.Indent++; if (Statements != null) { foreach (CodeStatement statement in Statements) { provider.GenerateCodeFromStatement(statement, tw, opts); } } tw.Indent--; tw.WriteLine("}"); Value = tw.InnerWriter.ToString(); } } break; case CodeDomGenerator.Language.VB: using (Microsoft.VisualBasic.VBCodeProvider provider = new Microsoft.VisualBasic.VBCodeProvider()) { System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions(); using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString)) { tw.Write("For Each {0} As ", provider.CreateValidIdentifier(IterationItemName)); provider.GenerateCodeFromExpression(new CodeTypeReferenceExpression(IterationItemType), tw, opts); tw.Write(" in "); provider.GenerateCodeFromExpression(IterExpression, tw, opts); tw.WriteLine(); tw.Indent++; if (Statements != null) { foreach (CodeStatement statement in Statements) { provider.GenerateCodeFromStatement(statement, tw, opts); } } tw.Indent--; tw.WriteLine("Next"); Value = tw.InnerWriter.ToString(); } } break; default: throw new NotImplementedException(language.ToString()); } }