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());
            }
        }
Esempio n. 3
0
        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());
            }
        }
Esempio n. 4
0
        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());
            }
        }
Esempio n. 5
0
        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 + "\"";
     //    }
     //}
 }
Esempio n. 7
0
        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());
            }
        }
Esempio n. 8
0
        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());
            }
        }
Esempio n. 10
0
        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());
            }
        }
Esempio n. 12
0
        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);
            }
        }
Esempio n. 14
0
        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());
            }
        }
Esempio n. 15
0
 //CodeDomProvider _provider;
 public CustomCodeGenerator(CodeDomGenerator.Language lang)
 {
     _lang = lang;
 }
Esempio n. 16
0
        //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());
            }
        }
Esempio n. 17
0
        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);
            }
        }
Esempio n. 19
0
        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());
            }
        }
Esempio n. 20
0
        //CodeDomProvider _provider;

        public CustomCodeGenerator(CodeDomGenerator.Language lang)
        {
            _lang = lang;
        }
Esempio n. 21
0
        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());
            }
        }
Esempio n. 22
0
        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());
            }
        }