public GenerateCodeFromMember ( CodeTypeMember member, |
||
member | CodeTypeMember | |
writer | ||
options | ||
return | void |
private static string GetPropertyTextWithGetSetLevelDebuggerNonUserCodeAttribute(CodeDomProvider provider, CodeGeneratorOptions options, StringWriter sourceWriter, CodeMemberProperty property) { provider.GenerateCodeFromMember(property, sourceWriter, options); var code = sourceWriter.ToString(); sourceWriter.GetStringBuilder().Clear(); // Clear String Builder var lines = code.Split(new[] { Environment.NewLine }, StringSplitOptions.None).ToList(); lines.RemoveAt(0); lines.RemoveAt(lines.Count - 1); for (var i = lines.Count() - 1; i >= 0; i--) { var line = lines[i]; lines[i] = "\t\t" + line; if (line.TrimStart() == "get" || line.TrimStart() == "set") { //Insert attribute above lines.Insert(i, "\t\t\t[System.Diagnostics.DebuggerNonUserCode()]"); } } return String.Join(Environment.NewLine, lines.ToArray()); }
static void GenerateAction (CodeTypeDeclaration type, string name, CodeTypeReference senderType, CodeDomProvider provider, CodeGeneratorOptions generatorOptions, ref StringWriter actionStubWriter) { if (provider is Microsoft.CSharp.CSharpCodeProvider) { type.Members.Add (new CodeSnippetTypeMember ("[MonoTouch.Foundation.Export(\"" + name + "\")]")); type.Members.Add (new CodeSnippetTypeMember ( String.Format ("partial void {1} ({2} sender);\n", name, provider.CreateValidIdentifier (name.TrimEnd (':')), senderType.BaseType))); return; } else if (provider.FileExtension == "pas") { var m = new CodeMemberMethod (); m.Name = provider.CreateValidIdentifier (name.TrimEnd (':')); m.Parameters.Add (new CodeParameterDeclarationExpression (senderType.BaseType, "sender")); m.UserData ["OxygenePartial"] = "YES"; m.UserData ["OxygeneEmpty"] = "YES"; var a = new CodeAttributeDeclaration ("MonoTouch.Foundation.Export"); a.Arguments.Add (new CodeAttributeArgument (new CodePrimitiveExpression (name))); m.CustomAttributes.Add (a); type.Members.Add (m); return; } var meth = CreateEventMethod (name, senderType); bool actionStubWriterCreated = false; if (actionStubWriter == null) { actionStubWriterCreated = true; actionStubWriter = new StringWriter (); actionStubWriter.WriteLine ("Action method stubs:"); actionStubWriter.WriteLine (); } try { provider.GenerateCodeFromMember (meth, actionStubWriter, generatorOptions); actionStubWriter.WriteLine (); } catch { //clear the header if generation failed if (actionStubWriterCreated) actionStubWriter = null; } }
private static string GenerateCode(CodeObject c, CodeDomProvider provider) { var sb = new StringBuilder(); var writer = new StringWriter(sb); var options = new CodeGeneratorOptions(); if (c is CodeStatement) { provider.GenerateCodeFromStatement((CodeStatement)c, writer, options); } else if (c is CodeCompileUnit) { provider.GenerateCodeFromCompileUnit((CodeCompileUnit)c, writer, options); } else if (c is CodeExpression) { provider.GenerateCodeFromExpression((CodeExpression)c, writer, options); } else if (c is CodeTypeMember) { provider.GenerateCodeFromMember((CodeTypeMember)c, writer, options); } else if (c is CodeTypeDeclaration) { provider.GenerateCodeFromType((CodeTypeDeclaration)c, writer, options); } else if (c is CodeNamespace) { provider.GenerateCodeFromNamespace((CodeNamespace)c, writer, options); } else { throw new ArgumentException($"Tests not set up for unexpected type: {c.GetType()}"); } return sb.ToString(); }
public override string GetClassCodeForProcessingRun() { CodeGeneratorOptions options = new CodeGeneratorOptions(); StringWriter code = new StringWriter(CultureInfo.InvariantCulture); if (templateEngineHost.Model != null) { CodeMemberProperty modelProperty = new CodeMemberProperty(); modelProperty.Attributes = MemberAttributes.Public | MemberAttributes.Final; modelProperty.Type = new CodeTypeReference(templateEngineHost.Model.GetType()); modelProperty.Name = "Model"; modelProperty.GetStatements.Add(new CodeMethodReturnStatement( new CodeCastExpression( templateEngineHost.Model.GetType(), new CodePropertyReferenceExpression( new CodePropertyReferenceExpression( new CodeTypeReferenceExpression(typeof(TextTemplateHost)), "Instance"), "Model")))); languageProvider.GenerateCodeFromMember(modelProperty, code, options); } if (templateEngineHost.RootElement != null) { CodeMemberProperty rootProperty = new CodeMemberProperty(); rootProperty.Attributes = MemberAttributes.Public | MemberAttributes.Final; rootProperty.Type = new CodeTypeReference(templateEngineHost.RootElement.GetType()); rootProperty.Name = "RootElement"; rootProperty.GetStatements.Add(new CodeMethodReturnStatement( new CodeCastExpression( templateEngineHost.RootElement.GetType(), new CodePropertyReferenceExpression( new CodePropertyReferenceExpression( new CodeTypeReferenceExpression(typeof(TextTemplateHost)), "Instance"), "RootElement")))); languageProvider.GenerateCodeFromMember(rootProperty, code, options); } if (templateEngineHost.CurrentElement != null) { CodeMemberProperty currentProperty = new CodeMemberProperty(); currentProperty.Attributes = MemberAttributes.Public | MemberAttributes.Final; currentProperty.Type = new CodeTypeReference(templateEngineHost.CurrentElement.GetType()); currentProperty.Name = "CurrentElement"; currentProperty.GetStatements.Add(new CodeMethodReturnStatement( new CodeCastExpression( templateEngineHost.CurrentElement.GetType(), new CodePropertyReferenceExpression( new CodePropertyReferenceExpression( new CodeTypeReferenceExpression(typeof(TextTemplateHost)), "Instance"), "CurrentElement")))); languageProvider.GenerateCodeFromMember(currentProperty, code, options); } if (templateEngineHost.CurrentExtender != null) { CodeMemberProperty currentProperty = new CodeMemberProperty(); currentProperty.Attributes = MemberAttributes.Public | MemberAttributes.Final; currentProperty.Type = new CodeTypeReference(templateEngineHost.CurrentExtender.GetType()); currentProperty.Name = "CurrentExtender"; currentProperty.GetStatements.Add(new CodeMethodReturnStatement( new CodeCastExpression( templateEngineHost.CurrentExtender.GetType(), new CodePropertyReferenceExpression( new CodePropertyReferenceExpression( new CodeTypeReferenceExpression(typeof(TextTemplateHost)), "Instance"), "CurrentExtender")))); languageProvider.GenerateCodeFromMember(currentProperty, code, options); } CodeMemberMethod currentMethod = new CodeMemberMethod(); currentMethod.Attributes = MemberAttributes.Public | MemberAttributes.Override; currentMethod.ReturnType = new CodeTypeReference(typeof(ModelElement)); currentMethod.Name = "ResolveModelReference"; currentMethod.Parameters.Add(new CodeParameterDeclarationExpression(typeof(ModelBusReference), "mbReference")); currentMethod.Statements.Add(new CodeMethodReturnStatement( new CodeMethodInvokeExpression( new CodeMethodReferenceExpression( new CodePropertyReferenceExpression( new CodeTypeReferenceExpression(typeof(TextTemplateHost)), "Instance"), "ResolveModelReference"), new CodeExpression[] { new CodeVariableReferenceExpression("mbReference") }))); languageProvider.GenerateCodeFromMember(currentMethod, code, options); currentMethod = new CodeMemberMethod(); currentMethod.Attributes = MemberAttributes.Public | MemberAttributes.Override; currentMethod.ReturnType = new CodeTypeReference(typeof(bool)); currentMethod.Name = "IsValid"; currentMethod.Parameters.Add(new CodeParameterDeclarationExpression(typeof(IArtifactLink), "link")); currentMethod.Statements.Add(new CodeMethodReturnStatement( new CodeMethodInvokeExpression( new CodeMethodReferenceExpression( new CodePropertyReferenceExpression( new CodeTypeReferenceExpression(typeof(TextTemplateHost)), "Instance"), "IsValid"), new CodeExpression[] { new CodeVariableReferenceExpression("link") }))); languageProvider.GenerateCodeFromMember(currentMethod, code, options); currentMethod = new CodeMemberMethod(); currentMethod.Attributes = MemberAttributes.Public | MemberAttributes.Override; currentMethod.Name = "AddProjectReference"; currentMethod.Parameters.Add(new CodeParameterDeclarationExpression(typeof(IArtifactLink), "link")); currentMethod.Statements.Add(new CodeMethodInvokeExpression( new CodeMethodReferenceExpression( new CodePropertyReferenceExpression( new CodeTypeReferenceExpression(typeof(TextTemplateHost)), "Instance"), "AddProjectReference"), new CodeExpression[] { new CodeVariableReferenceExpression("link") })); languageProvider.GenerateCodeFromMember(currentMethod, code, options); currentMethod = new CodeMemberMethod(); currentMethod.Attributes = MemberAttributes.Public | MemberAttributes.Final; currentMethod.Name = "CancelOutput"; currentMethod.Statements.Add(new CodeAssignStatement( new CodePropertyReferenceExpression( new CodePropertyReferenceExpression( new CodeTypeReferenceExpression(typeof(TextTemplateHost)), "Instance"), "GenerateOutput"), new CodePrimitiveExpression(false))); languageProvider.GenerateCodeFromMember(currentMethod, code, options); return(code.ToString()); }
private static string GenerateCode(CodeObject c, CodeDomProvider provider) { var sb = new StringBuilder(); var writer = new StringWriter(sb); var options = new CodeGeneratorOptions(); if (c is CodeStatement) { provider.GenerateCodeFromStatement((CodeStatement)c, writer, options); } else if (c is CodeCompileUnit) { provider.GenerateCodeFromCompileUnit((CodeCompileUnit)c, writer, options); } else if (c is CodeExpression) { provider.GenerateCodeFromExpression((CodeExpression)c, writer, options); } else if (c is CodeTypeMember) { provider.GenerateCodeFromMember((CodeTypeMember)c, writer, options); } else if (c is CodeTypeDeclaration) { provider.GenerateCodeFromType((CodeTypeDeclaration)c, writer, options); } else if (c is CodeNamespace) { provider.GenerateCodeFromNamespace((CodeNamespace)c, writer, options); } else { Assert.False(true, $"Unknown type: {c.GetType()}"); } return sb.ToString(); }