private static void ProcessTypeDeclaration(CodeTypeDeclaration td, CodeDomGenerator.Language language) { if (language == CodeDomGenerator.Language.VB) { if (td.BaseTypes.Count > 0) { CodeTypeReference r = td.BaseTypes[0]; if (r.UserData.Contains("linq2codedom:interface")) { if ((bool)r.UserData["linq2codedom:interface"]) { bool found = false; for (int i = 1; i < td.BaseTypes.Count; i++) { CodeTypeReference item = td.BaseTypes[i]; if (!item.UserData.Contains("linq2codedom:interface") || !(bool)item.UserData["linq2codedom:interface"]) { found = true; td.BaseTypes.RemoveAt(i); td.BaseTypes.Insert(i, item); break; } } if (!found) { td.BaseTypes.Insert(0, new CodeTypeReference(typeof(object))); } } } } } }
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("break;"); 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("Exit Do"); 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("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()); } }
public void GenerateCode(CodeDomGenerator.Language language) { if (_method == null) { return; } if (_method.ReturnType != null && _method.ReturnType.BaseType != "System.Void") { throw new NotSupportedException("Partial methods must have a void return type"); } switch (language) { case CodeDomGenerator.Language.CSharp: GenerateCS(); break; case CodeDomGenerator.Language.VB: GenerateVB(); 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("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()); } }
private static void ProcessDirective(CodeDirective directive, CodeDomGenerator.Language language) { //if (language == CodeDomGenerator.Language.CSharp) //{ // if (directive is CodeRegionDirective) // { // CodeRegionDirective r = directive as CodeRegionDirective; // if (!r.RegionText.StartsWith("\"")) // r.RegionText = "\"" + r.RegionText + "\""; // } //} }
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: GenerateCS(); break; case CodeDomGenerator.Language.VB: GenerateVB(); break; default: throw new NotImplementedException(language.ToString()); } }
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()); } }
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()); } }
public void GenerateCode(CodeDomGenerator.Language language) { if (m_parameters == null || m_statements == null || m_returnType == null) { return; } switch (language) { case CodeDomGenerator.Language.CSharp: GenerateCS(); break; case CodeDomGenerator.Language.VB: GenerateVB(); break; default: throw new NotImplementedException(language.ToString()); } }
public static void ProcessNS(CodeCompileUnit compileUnit, CodeDomGenerator.Language language, IEnumerable <CodeNamespace> namespaces) { foreach (CodeNamespace ns in namespaces) { CodeNamespace ns2add = ns; for (int j = 0; j < ns.Types.Count; j++) { CodeTypeDeclaration c = ns2add.Types[j]; ProcessTypeDeclaration(c, language); List <Pair <int, CodeTypeMember> > toReplace = new List <Pair <int, CodeTypeMember> >(); for (int i = 0; i < c.Members.Count; i++) { CodeTypeMember m = c.Members[i]; CodeTypeMember newMember = ProcessMember(m, language); if (newMember != m) { toReplace.Add(new Pair <int, CodeTypeMember>(i, newMember)); } } if (toReplace.Count > 0) { if (ns2add == ns) { ns2add = ns.Clone() as CodeNamespace; c = ns2add.Types[j]; } foreach (Pair <int, CodeTypeMember> p in toReplace) { int idx = p.First; c.Members.RemoveAt(idx); c.Members.Insert(idx, p.Second); } } } compileUnit.Namespaces.Add(ns2add); } }
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()); } }
//CodeDomProvider _provider; public CustomCodeGenerator(CodeDomGenerator.Language lang) { _lang = lang; }
//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()); } }
public CodeCompileUnit GenerateModificationTracker(WXMLModel model, WXMLCodeDomGeneratorSettings setting, CodeDomGenerator.Language language) { var c = new CodeDomGenerator(); var cls = c.AddNamespace(model.Namespace).AddClass(_modificationTrackerClassName); string _ctxName = model.Namespace + "." + model.LinqSettings.ContextName; string _mtName = model.Namespace + "." + _modificationTrackerClassName; cls.Implements(typeof(IModificationTracker)) .AddEnum("ActionEnum") .AddFields( Define.StructField("Update"), Define.StructField("Insert"), Define.StructField("Delete") ); cls.AddField("_changed", () => new List <object>()); cls.AddField("_deleted", () => new List <object>()); var tableType = new CodeTypeReference(typeof(System.Data.Linq.Table <>)); tableType.TypeArguments.Add(new CodeTypeReference("T")); cls .AddMethod(MemberAttributes.Public | MemberAttributes.Final, (ParamArray <object> entities) => "Add", Emit.stmt((List <object> _changed, object[] entities) => _changed.AddRange(entities))) .Implements(typeof(IModificationTracker)) .AddMethod(MemberAttributes.Public | MemberAttributes.Final, (ParamArray <object> entities) => "Delete", Emit.stmt((List <object> _deleted, object[] entities) => _deleted.AddRange(entities))) .Implements(typeof(IModificationTracker)) .AddMethod(MemberAttributes.Public | MemberAttributes.Final, () => "AcceptModifications", Emit.@using(new CodeTypeReference(_ctxName), "ctx", () => CodeDom.@new(_ctxName, _conn), Emit.@foreach("entity", () => [email protected] <IEnumerable <object> >("_changed"), Emit.stmt((object entity) => [email protected]("SyncEntity")(CodeDom.VarRef("ctx"), entity, false)) ), Emit.@foreach("entity", () => [email protected] <IEnumerable <object> >("_deleted"), Emit.stmt((object entity) => [email protected]("SyncEntity")(CodeDom.VarRef("ctx"), entity, true)) ), Emit.stmt(() => CodeDom.VarRef("ctx").Call("SubmitChanges")), Emit.@foreach("entity", () => [email protected] <IEnumerable <object> >("_changed"), Emit.stmt((object entity) => [email protected]("AcceptChanges")(entity)) ), Emit.stmt(() => [email protected] <List <object> >("_changed").Clear()), Emit.@foreach("entity", () => [email protected] <IEnumerable <object> >("_deleted"), Emit.stmt((object entity) => [email protected]("AcceptChanges")(entity)) ), Emit.stmt(() => [email protected] <List <object> >("_deleted").Clear()) ) ).Implements(typeof(IModificationTracker)) .AddMethod(MemberAttributes.Private, () => "Dispose").Implements(typeof(IDisposable)) .AddMethod(MemberAttributes.Private, (object entity) => "AcceptChanges", Emit.declare("mi", (object entity) => entity.GetType().GetMethod("AcceptChanges")), Emit.@if(() => CodeDom.VarRef("mi") != null, Emit.stmt((MethodInfo mi, object entity) => mi.Invoke(entity, null)) ) ) .AddMethod(MemberAttributes.Private, (DynType ctx, object entity, bool delete) => "SyncEntity" + ctx.SetType(_ctxName), Emit.@foreach("mi", () => [email protected] <Type>("GetType")().GetMethods(BindingFlags.NonPublic | BindingFlags.Static), Emit.@if((bool delete, MethodInfo mi, object entity) => ((delete && mi.Name == "_DelEntity") || (!delete && mi.Name == "_SyncEntity")) && mi.GetParameters().Count() == 2 && mi.GetParameters().Last().ParameterType == entity.GetType(), Emit.stmt((MethodInfo mi, object entity) => mi.Invoke(null, BindingFlags.Static, null, new object[] { CodeDom.VarRef("ctx"), entity }, null)), Emit.exitFor() ) ) ) .AddMethod(MemberAttributes.Private | MemberAttributes.Static, (DynType p, DynType action, DynType table) => "SyncEntity" + p.SetType("T") + action.SetType("ActionEnum") + table.SetType(tableType), Emit.ifelse(() => CodeDom.VarRef("action") == CodeDom.Field(new CodeTypeReference("ActionEnum"), "Insert"), CodeDom.CombineStmts(Emit.stmt(() => CodeDom.VarRef("table").Call("InsertOnSubmit")(CodeDom.VarRef("p")))), Emit.ifelse(() => CodeDom.VarRef("action") == CodeDom.Field(new CodeTypeReference("ActionEnum"), "Delete"), CodeDom.CombineStmts( Emit.stmt(() => CodeDom.VarRef("table").Call("Attach")(CodeDom.VarRef("p"))), Emit.stmt(() => CodeDom.VarRef("table").Call("DeleteOnSubmit")(CodeDom.VarRef("p"))) ), Emit.stmt(() => CodeDom.VarRef("table").Call("Attach")(CodeDom.VarRef("p"), true)) ) ) ).Generic("T", typeof(object)) ; WXMLCodeDomGeneratorNameHelper n = new WXMLCodeDomGeneratorNameHelper(setting); foreach (var entity in model.GetActiveEntities()) { if (entity.GetPkProperties().Count() == 1) { //string entityName = entity.Name; string entityProp = WXMLCodeDomGeneratorNameHelper.GetMultipleForm(entity.Name); string entityType = n.GetEntityClassName(entity, true); string pkName = entity.GetPkProperties().Single().Name; cls.AddMethod(MemberAttributes.Static | MemberAttributes.Private, (DynType ctx, DynType p) => "_DelEntity" + ctx.SetType(_ctxName) + p.SetType(entityType), Emit.stmt(() => CodeDom.Call(null, "SyncEntity", new CodeTypeReference(entityType))( CodeDom.VarRef("p"), CodeDom.Field(new CodeTypeReference("ActionEnum"), "Delete"), CodeDom.VarRef("ctx").Property(entityProp)) ) ) .AddMethod(MemberAttributes.Static | MemberAttributes.Private, (DynType ctx, DynType p) => "_SynEntity" + ctx.SetType(_ctxName) + p.SetType(entityType), Emit.stmt(() => CodeDom.Call(null, "SyncEntity", new CodeTypeReference(entityType))( CodeDom.VarRef("p"), CodeDom.VarRef("p").Field <int>(pkName) == 0 ? CodeDom.Field(new CodeTypeReference("ActionEnum"), "Insert") : CodeDom.Field(new CodeTypeReference("ActionEnum"), "Update"), CodeDom.VarRef("ctx").Property(entityProp)) ) ) ; } } //string debug = c.GenerateCode(CodeDomGenerator.Language.CSharp); return(c.GetCompileUnit(language)); }
private static void ProcessExpr(CodeExpression codeExpression, CodeDomGenerator.Language language) { if (codeExpression == null) { return; } if (typeof(CodeArgumentReferenceExpression).IsAssignableFrom(codeExpression.GetType())) { } else if (typeof(CodeArrayCreateExpression).IsAssignableFrom(codeExpression.GetType())) { ProcessExpr(((CodeArrayCreateExpression)codeExpression).Initializers, language); ProcessExpr(((CodeArrayCreateExpression)codeExpression).SizeExpression, language); } else if (typeof(CodeArrayIndexerExpression).IsAssignableFrom(codeExpression.GetType())) { ProcessExpr(((CodeArrayIndexerExpression)codeExpression).Indices, language); } else if (typeof(CodeBaseReferenceExpression).IsAssignableFrom(codeExpression.GetType())) { } else if (typeof(CodeBinaryOperatorExpression).IsAssignableFrom(codeExpression.GetType())) { ProcessExpr(((CodeBinaryOperatorExpression)codeExpression).Left, language); ProcessExpr(((CodeBinaryOperatorExpression)codeExpression).Right, language); } else if (typeof(CodeCastExpression).IsAssignableFrom(codeExpression.GetType())) { ProcessExpr(((CodeCastExpression)codeExpression).Expression, language); } else if (typeof(CodeDefaultValueExpression).IsAssignableFrom(codeExpression.GetType())) { } else if (typeof(CodeDelegateCreateExpression).IsAssignableFrom(codeExpression.GetType())) { ProcessExpr(((CodeDelegateCreateExpression)codeExpression).TargetObject, language); } else if (typeof(CodeDelegateInvokeExpression).IsAssignableFrom(codeExpression.GetType())) { ProcessExpr(((CodeDelegateInvokeExpression)codeExpression).Parameters, language); ProcessExpr(((CodeDelegateInvokeExpression)codeExpression).TargetObject, language); } else if (typeof(CodeDirectionExpression).IsAssignableFrom(codeExpression.GetType())) { ProcessExpr(((CodeDirectionExpression)codeExpression).Expression, language); } else if (typeof(CodeEventReferenceExpression).IsAssignableFrom(codeExpression.GetType())) { ProcessExpr(((CodeEventReferenceExpression)codeExpression).TargetObject, language); } else if (typeof(CodeFieldReferenceExpression).IsAssignableFrom(codeExpression.GetType())) { ProcessExpr(((CodeFieldReferenceExpression)codeExpression).TargetObject, language); } else if (typeof(CodeIndexerExpression).IsAssignableFrom(codeExpression.GetType())) { ProcessExpr(((CodeIndexerExpression)codeExpression).Indices, language); ProcessExpr(((CodeIndexerExpression)codeExpression).TargetObject, language); } else if (typeof(CodeMethodInvokeExpression).IsAssignableFrom(codeExpression.GetType())) { ProcessExpr(((CodeMethodInvokeExpression)codeExpression).Method, language); ProcessExpr(((CodeMethodInvokeExpression)codeExpression).Parameters, language); } else if (typeof(CodeMethodReferenceExpression).IsAssignableFrom(codeExpression.GetType())) { ProcessExpr(((CodeMethodReferenceExpression)codeExpression).TargetObject, language); } else if (typeof(CodeObjectCreateExpression).IsAssignableFrom(codeExpression.GetType())) { ProcessExpr(((CodeObjectCreateExpression)codeExpression).Parameters, language); } else if (typeof(CodeParameterDeclarationExpression).IsAssignableFrom(codeExpression.GetType())) { } else if (typeof(CodePrimitiveExpression).IsAssignableFrom(codeExpression.GetType())) { } else if (typeof(CodePropertyReferenceExpression).IsAssignableFrom(codeExpression.GetType())) { ProcessExpr(((CodePropertyReferenceExpression)codeExpression).TargetObject, language); } else if (typeof(CodePropertySetValueReferenceExpression).IsAssignableFrom(codeExpression.GetType())) { } else if (typeof(CodeThisReferenceExpression).IsAssignableFrom(codeExpression.GetType())) { } else if (typeof(CodeTypeOfExpression).IsAssignableFrom(codeExpression.GetType())) { } else if (typeof(CodeTypeReferenceExpression).IsAssignableFrom(codeExpression.GetType())) { } else if (typeof(CodeVariableReferenceExpression).IsAssignableFrom(codeExpression.GetType())) { } else if (typeof(CodeAssignExpression).IsAssignableFrom(codeExpression.GetType())) { ProcessExpr(((CodeAssignExpression)codeExpression).Expression, language); } else if (typeof(CodeAsExpression).IsAssignableFrom(codeExpression.GetType())) { ProcessExpr(((CodeAsExpression)codeExpression).Expression, language); } else if (typeof(CodeIsExpression).IsAssignableFrom(codeExpression.GetType())) { ProcessExpr(((CodeIsExpression)codeExpression).Expression, language); } else if (typeof(CodeXorExpression).IsAssignableFrom(codeExpression.GetType())) { ProcessExpr(((CodeXorExpression)codeExpression).Left, language); ProcessExpr(((CodeXorExpression)codeExpression).Right, language); } else if (typeof(CodeUnaryExpression).IsAssignableFrom(codeExpression.GetType())) { ProcessExpr(((CodeUnaryExpression)codeExpression).Expression, language); } ICustomCodeDomObject co = codeExpression as ICustomCodeDomObject; if (co != null) { co.GenerateCode(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 (_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()); } }
public void GenerateCode(CodeDomGenerator.Language language) { switch (language) { case CodeDomGenerator.Language.CSharp: using (CSharpCodeProvider provider = new CSharpCodeProvider()) { CodeGeneratorOptions opts = new CodeGeneratorOptions(); StringBuilder sb = new StringBuilder(); using (IndentedTextWriter tw = new IndentedTextWriter(new StringWriter(sb), opts.IndentString)) { provider.GenerateCodeFromMember(Event, tw, opts); sb.Replace(";", string.Empty); tw.WriteLine("{"); tw.Indent++; GenrateMeth(opts, provider, tw, AddMethod.GetStatements, "add"); GenrateMeth(opts, provider, tw, RemoveMethod.GetStatements, "remove"); tw.Indent--; tw.WriteLine("}"); } Text = sb.ToString(); } break; case CodeDomGenerator.Language.VB: using (Microsoft.VisualBasic.VBCodeProvider provider = new Microsoft.VisualBasic.VBCodeProvider()) { CodeGeneratorOptions opts = new CodeGeneratorOptions(); var args = new StringWriter(); provider.GenerateCodeFromExpression(new CodeParameterDeclarationExpression(Event.Type, "value"), args, opts); StringBuilder sb = new StringBuilder(); using (IndentedTextWriter tw = new IndentedTextWriter(new StringWriter(sb), opts.IndentString)) { provider.GenerateCodeFromMember(Event, tw, opts); sb.Replace(" Event ", " Custom Event "); tw.Indent++; tw.WriteLine("AddHandler({0})", args.GetStringBuilder()); tw.Indent++; foreach (CodeStatement statement in AddMethod.GetStatements) { provider.GenerateCodeFromStatement(statement, tw, opts); } tw.Indent--; tw.WriteLine("End AddHandler"); tw.WriteLine("RemoveHandler({0})", args.GetStringBuilder()); tw.Indent++; foreach (CodeStatement statement in RemoveMethod.GetStatements) { provider.GenerateCodeFromStatement(statement, tw, opts); } tw.Indent--; tw.WriteLine("End RemoveHandler"); //args = new StringWriter(); //provider.GenerateCodeFromMember(RaiseMethod, args, opts); //StringReader sr = new StringReader(args.GetStringBuilder().ToString()); //string line = sr.ReadLine(); //while (string.IsNullOrEmpty(line)) // line = sr.ReadLine(); //int idx = line.IndexOf(" " + RaiseMethod.Name); //args.GetStringBuilder().Replace(line, "RaiseEvent" + line.Substring(idx + RaiseMethod.Name.Length + 1)); //tw.Write(args.GetStringBuilder().ToString()); tw.Write("RaiseEvent("); for (int i = 0; i < RaiseMethod.Parameters.Count; i++) { if (i > 0) { tw.Write(", "); } provider.GenerateCodeFromExpression(RaiseMethod.Parameters[i], tw, opts); } tw.WriteLine(")"); tw.Indent++; foreach (CodeStatement statement in RaiseMethod.Statements) { provider.GenerateCodeFromStatement(statement, tw, opts); } tw.Indent--; tw.WriteLine("End RaiseEvent"); tw.Indent--; tw.WriteLine("End Event"); } Text = sb.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("lock ("); if (LockExpression != null) { provider.GenerateCodeFromExpression(LockExpression, 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("SyncLock "); if (LockExpression != null) { provider.GenerateCodeFromExpression(LockExpression, tw, opts); } tw.WriteLine(); tw.Indent++; if (Statements != null) { foreach (CodeStatement statement in Statements) { provider.GenerateCodeFromStatement(statement, tw, opts); } } tw.Indent--; tw.WriteLine("End SyncLock"); Value = tw.InnerWriter.ToString(); } } break; default: throw new NotImplementedException(language.ToString()); } }