Пример #1
0
        public void CastExpression()
        {
            var c = new CodeDomGenerator();

            c.AddNamespace("Samples").AddClass("cls")
            .AddMethod(MemberAttributes.Public, () => "foo",
                       Emit.declare(typeof(object), "d"),
                       Emit.assignVar("d", () => 10d),
                       Emit.declare("dr", (object d) => (decimal)d),
                       Emit.declare("dr2", (object d) => CodeDom.cast(typeof(decimal), d)),
                       Emit.stmt((object d) => CodeDom.cast <Var>("cls", d).Call("foo"))
                       )
            ;

            Console.WriteLine(c.GenerateCode(CodeDomGenerator.Language.CSharp));

            Console.WriteLine(c.GenerateCode(CodeDomGenerator.Language.VB));

            var ass = c.Compile();

            Assert.IsNotNull(ass);

            Type TestClass = ass.GetType("Samples.cls");

            Assert.IsNotNull(TestClass);
        }
Пример #2
0
        public void WorkingWithEvent()
        {
            var c = new CodeDomGenerator();

            c.AddReference("System.Core.dll").AddNamespace("Samples").AddClass("cls")
            .AddEvent(typeof(Action), MemberAttributes.Public, "ev")
            .AddMethod(MemberAttributes.Public, () => "raise",
                       Emit.declare("cls2", "cc", () => CodeDom.@new("cls2")),
                       Emit.attachDelegate(CodeDom.@this, "ev", CodeDom.VarRef("cc"), "zoo"),
                       Emit.attachDelegate(CodeDom.@this, "ev", "cls2.foo"),
                       Emit.stmt(() => [email protected]("ev")()),
                       Emit.detachDelegate(CodeDom.@this, "ev", CodeDom.VarRef("cc"), "zoo")
                       )
            .AddClass("cls2")
            .AddMethod(MemberAttributes.Public, () => "zoo",
                       Emit.stmt(() => Console.WriteLine("ok"))
                       )
            .AddMethod(MemberAttributes.Public | MemberAttributes.Static, () => "foo",
                       Emit.stmt(() => Console.WriteLine("ok"))
                       )
            ;

            Console.WriteLine(c.GenerateCode(CodeDomGenerator.Language.CSharp));

            Console.WriteLine(c.GenerateCode(CodeDomGenerator.Language.VB));

            var ass = c.Compile();

            Assert.IsNotNull(ass);

            Type cls = ass.GetType("Samples.cls");

            Assert.IsNotNull(cls);
        }
Пример #3
0
        public void TestGetExpression()
        {
            CodeExpression exp = CodeDom.GetExpression(() => 1);

            Assert.IsTrue(exp is CodePrimitiveExpression);
            Assert.AreEqual(1, ((CodePrimitiveExpression)exp).Value);

            CodeExpression exp2 = CodeDom.GetExpression((int g) => 1 + g);

            Assert.IsTrue(exp2 is CodeBinaryOperatorExpression);

            CodeExpression exp3 = CodeDom.GetExpression((int g) => [email protected] <int>("d") + g - 10);

            Assert.IsTrue(exp3 is CodeBinaryOperatorExpression);

            CodeExpression exp4 = CodeDom.GetExpression(() => CodeDom.Call(exp, "ToString")());

            Assert.IsTrue(exp4 is CodeMethodInvokeExpression);
            Assert.AreEqual(exp, ((CodeMethodInvokeExpression)exp4).Method.TargetObject);

            CodeExpression exp5 = CodeDom.GetExpression(() => CodeDom.Call(exp3, "ToString")());

            Assert.IsTrue(exp5 is CodeMethodInvokeExpression);
            Assert.AreEqual(exp3, ((CodeMethodInvokeExpression)exp5).Method.TargetObject);
        }
Пример #4
0
        public void GenericObjectCreate()
        {
            var c = new CodeDomGenerator();

            c.AddNamespace("Samples")
            .AddClass(Define.Class("TestClass").Generic("T")
                      .AddFields(
                          Define.Field(MemberAttributes.Private, "T", "_s")
                          )
                      .AddProperty("T", MemberAttributes.Public, "S", "_s")
                      ).AddClass(Define.Class("cls")
                                 .AddMethod(MemberAttributes.Public | MemberAttributes.Static, CodeDom.TypeRef("TestClass", "T"), () => "foo",
                                            Emit.declare(CodeDom.TypeRef("TestClass", "T"), "cc",
                                                         () => CodeDom.@new(CodeDom.TypeRef("TestClass", "T"))),
                                            Emit.@return((Var cc) => cc))
                                 .Generic("T")
                                 );

            Console.WriteLine(c.GenerateCode(CodeDomGenerator.Language.CSharp));

            Console.WriteLine(c.GenerateCode(CodeDomGenerator.Language.VB));

            var ass = c.Compile();

            Assert.IsNotNull(ass);

            Type TestClass = ass.GetType("Samples.TestClass`1");

            Assert.IsNotNull(TestClass);
        }
Пример #5
0
        public void TestLambdaVB()
        {
            var c = new CodeDomGenerator();

            c.AddNamespace("Samples")
            .AddClass("cls")
            .AddMethod(MemberAttributes.Public | MemberAttributes.Static, (bool f) => "foo",
                       Emit.declare("a", () => CodeDom.Lambda(() => 1)),
                       Emit.declare("c", () => CodeDom.Lambda((int aa) => aa + 10,
                                                              new LambdaParam(typeof(int), "aa"))),
                       Emit.stmt((int a) => CodeDom.CallDelegate(CodeDom.VarRef("c").Call("Compile"))(
                                     CodeDom.CallDelegate(CodeDom.VarRef("a").Call("Compile"))
                                     ))
                       )
            ;


            c.AddReference("System.Core.dll");

            Console.WriteLine(c.GenerateCode(CodeDomGenerator.Language.VB));

            var ass = c.Compile(CodeDomGenerator.Language.VB);

            Assert.IsNotNull(ass);

            Type TestClass = ass.GetType("Samples.cls");

            Assert.IsNotNull(TestClass);
        }
Пример #6
0
        public void TestAnonymousMethod()
        {
            var c = new CodeDomGenerator();

            c.AddNamespace("Samples")
            .AddClass("cls")
            .AddMethod(MemberAttributes.Public | MemberAttributes.Static, () => "foo",
                       Emit.declare("a", () => CodeDom.Lambda <Func <int, double> >(new [] { new LambdaParam("s") },
                                                                                    Emit.@return((double s) => s + 1)
                                                                                    ))
                       )
            ;

            Console.WriteLine(c.GenerateCode(CodeDomGenerator.Language.CSharp));

            c.AddReference("System.Core.dll");

            var ass = c.Compile();

            Assert.IsNotNull(ass);

            Type TestClass = ass.GetType("Samples.cls");

            Assert.IsNotNull(TestClass);
        }
Пример #7
0
        static void Main2()
        {
            var c = new CodeDomGenerator();

            c.AddNamespace("Samples").AddClass("cls")
            .AddMethod(MemberAttributes.Public | MemberAttributes.Static, typeof(string), (int i) => "Print",
                       Emit.@if((int i) => i < 10,
                                Emit.@return(() => "i less than 10")
                                ),
                       Emit.@return(() => "i greater than 10")
                       );

            Console.WriteLine(c.GenerateCode(LinqToCodedom.CodeDomGenerator.Language.CSharp));

            var c2 = new CodeDomGenerator();

            CodeMemberMethod method = Define.Method(MemberAttributes.Public, () => "foo");

            c2.AddNamespace("TestNS").AddClass("Fibonacci")
            .AddMethod(MemberAttributes.Public | MemberAttributes.Static, (int x) => "Calc",
                       Emit.@if((int x) => x <= 1,
                                Emit.@return(() => 1)),
                       Emit.@return((int x) =>
                                    CodeDom.Call <int>("Calc")(x - 1) + CodeDom.Call <int>("Calc")(x - 2))
                       )
            ;

            Console.WriteLine(c2.GenerateCode(LinqToCodedom.CodeDomGenerator.Language.CSharp));

            Console.WriteLine(c2.GenerateCode(LinqToCodedom.CodeDomGenerator.Language.VB));
        }
Пример #8
0
        public void TestAssignIndexer()
        {
            var c = new CodeDomGenerator();

            c.AddNamespace("Samples")
            .AddClass("cls")
            .AddMethod(MemberAttributes.Public | MemberAttributes.Static, () => "foo",
                       Emit.declare("b", () => new int[10]),
                       Emit.assignExp((int[] b) => b[0], CodeDom.GetExpression(() => 1)),
                       Emit.declare("a", () => new List <int>()),
                       Emit.assignExp((List <int> a) => a[0], CodeDom.GetExpression(() => 1))
                       )
            ;

            Console.WriteLine(c.GenerateCode(CodeDomGenerator.Language.CSharp));

            var ass = c.Compile();

            Assert.IsNotNull(ass);

            Type TestClass = ass.GetType("Samples.cls");

            Assert.IsNotNull(TestClass);

            Console.WriteLine(c.GenerateCode(CodeDomGenerator.Language.VB));

            ass = c.Compile();

            Assert.IsNotNull(ass);

            TestClass = ass.GetType("Samples.cls");

            Assert.IsNotNull(TestClass);
        }
Пример #9
0
        public void Builder_Operator()
        {
            var c = new CodeDomGenerator();

            c.AddNamespace("Samples").AddClass("ee")
            .AddOperators(
                Define.Operator(new CodeTypeReference(typeof(int)),
                                (DynType t) => CodeDom.TypedSeq(OperatorType.Implicit, t.SetType("ee")),
                                Emit.@return(() => 10)
                                )
                )
            ;

            Console.WriteLine(c.GenerateCode(CodeDomGenerator.Language.CSharp));

            Console.WriteLine(c.GenerateCode(CodeDomGenerator.Language.VB));

            var ass = c.Compile();

            Assert.IsNotNull(ass);

            Type eeClass = ass.GetType("Samples.ee");

            Assert.IsNotNull(eeClass);
        }
Пример #10
0
        public void TestDefaultProperty()
        {
            var c = new CodeDomGenerator();

            c.AddNamespace("Samples").AddClass(Define.Class("ee", TypeAttributes.Public, true)
                                               .AddMember(Define.GetProperty(new CodeTypeReference(typeof(string)), MemberAttributes.Family,
                                                                             (int idx) => "prop", true,
                                                                             Emit.@return((int idx) => idx.ToString())
                                                                             ))
                                               .AddMember(Define.Property(new CodeTypeReference(typeof(string)), MemberAttributes.Family,
                                                                          (int idx) => "prop2", false,
                                                                          CodeDom.CombineStmts(Emit.@return((int idx) => idx.ToString())),
                                                                          Emit.declare("i", (int idx) => idx)
                                                                          ))
                                               );

            Console.WriteLine(c.GenerateCode(CodeDomGenerator.Language.VB));

            Console.WriteLine(c.GenerateCode(CodeDomGenerator.Language.CSharp));

            var ass = c.Compile(null, CodeDomGenerator.Language.VB);

            Assert.IsNotNull(ass);

            Type eeClass = ass.GetType("Samples.ee");

            Assert.IsNotNull(eeClass);
        }
Пример #11
0
        static void Main(string[] args)
        {
            //Set Current Directory to EXE location
            Assembly assembly = Assembly.GetExecutingAssembly();
            FileInfo fileInfo = new FileInfo(assembly.Location);

            Environment.CurrentDirectory = fileInfo.Directory.FullName;

            //Download Schemas from VANTIV and use XSD to generate classes
            Download.Prebuild();

            // Remove unwanted attributes that was causing serialization issues
            CodeDom.RemoveUnwantedDefaultValueAttributes(@"Transaction\express.cs");
            CodeDom.RemoveUnwantedDefaultValueAttributes(@"Services\expressservices.cs");
            CodeDom.RemoveUnwantedDefaultValueAttributes(@"Reporting\expressreporting.cs");

            //Workaround missing classes due to XSD provided being invalid
            List <string> elementsToSkip = new List <string>();

            elementsToSkip.Add("TransactionSetup");
            elementsToSkip.Add("BatchUpload");
            CodeDom.FixMissingTransactionClasses(@"Transaction\express.xsd", @"Transaction\express-transaction-extensions.cs", "https://transaction.elementexpress.com", "VXEN.Models.Transaction", elementsToSkip);

            elementsToSkip.Clear();
            CodeDom.FixMissingTransactionClasses(@"Services\expressservices.xsd", @"Services\express-services-extensions.cs", @"https://services.elementexpress.com", "VXEN.Models.Services", elementsToSkip);

            CodeDom.FixMissingTransactionClasses(@"Reporting\expressreporting.xsd", @"Reporting\express-reporting-extensions.cs", @"https://reporting.elementexpress.com", "VXEN.Models.Reporting", elementsToSkip);
        }
Пример #12
0
        public void Builder_AccessProperty()
        {
            var c = new CodeDomGenerator();

            c.AddNamespace("Samples").AddClass("cls1")
            .AddField(typeof(int), "_i", () => 10)
            .AddProperty(typeof(int), MemberAttributes.Public, "I", "_i")
            .AddClass("cls2")
            .AddMethod(MemberAttributes.Public | MemberAttributes.Static, typeof(int), () => "foo",
                       Emit.declare("cls1", "cc", () => CodeDom.@new("cls1")),
                       Emit.@return((Var cc) => cc.Property <int>("I")))
            ;

            Console.WriteLine(c.GenerateCode(CodeDomGenerator.Language.CSharp));

            Console.WriteLine(c.GenerateCode(CodeDomGenerator.Language.VB));

            var ass = c.Compile();

            Assert.IsNotNull(ass);

            Type TestClass = ass.GetType("Samples.cls2");

            Assert.IsNotNull(TestClass);

            int s = (int)TestClass.InvokeMember("foo",
                                                BindingFlags.Public | BindingFlags.Static | BindingFlags.InvokeMethod,
                                                null, null, null);

            Assert.AreEqual(10, s);
        }
Пример #13
0
        public void DefaultExpression()
        {
            var c = new CodeDomGenerator();

            c.AddNamespace("Samples").AddClass("cls")
            .AddMethod(MemberAttributes.Static | MemberAttributes.Public, () => "foo",
                       Emit.stmt(() => CodeDom.Call(CodeDom.TypeRef("cls"), "zoo")(default(int)))
                       )
            .AddMethod(MemberAttributes.Static | MemberAttributes.Private, (int i) => "zoo",
                       Emit.stmt((int i) => Console.WriteLine(i))
                       )
            ;

            Console.WriteLine(c.GenerateCode(CodeDomGenerator.Language.CSharp));

            Console.WriteLine(c.GenerateCode(CodeDomGenerator.Language.VB));

            var ass = c.Compile();

            Assert.IsNotNull(ass);

            Type TestClass = ass.GetType("Samples.cls");

            Assert.IsNotNull(TestClass);
        }
Пример #14
0
        public void Builder_MethodCall()
        {
            var c = new CodeDomGenerator();

            c.AddNamespace("Samples").AddClass(Define.Class("TestClass")
                                               .AddMethod(MemberAttributes.Public, typeof(int), (int a) => "Test", Emit.@return((int a) => a + 100))
                                               .AddMethod(
                                                   Define.Method(MemberAttributes.Public, typeof(int), (int a) => "Test1", Emit.@return(() =>
                                                                                                                                        CodeDom.VarRef <int>("a") +
                                                                                                                                        [email protected] <int>("Test")(3)))
                                                   )
                                               ).AddClass(Define.Class("cls")
                                                          .AddMethod(MemberAttributes.Public | MemberAttributes.Static, () => "foo",
                                                                     Emit.declare("TestClass", "cc"),
                                                                     Emit.stmt(() => CodeDom.Call(CodeDom.VarRef("cc"), "Test1")(3))
                                                                     )
                                                          .AddMethod(MemberAttributes.Public | MemberAttributes.Static, () => "foo2",
                                                                     Emit.declare("TestClass", "cc", () => CodeDom.@new("TestClass")),
                                                                     Emit.stmt((Var cc) => cc.Call("Test1")(3))
                                                                     )
                                                          .AddMethod(MemberAttributes.Public | MemberAttributes.Static, (int s) => "foo3",
                                                                     Emit.declare("TestClass", "cc"),
                                                                     Emit.declare(typeof(int), "i"),
                                                                     Emit.stmt((int s) => CodeDom.Call(CodeDom.VarRef("cc"), "Test1")(CodeDom.VarRef <int>("i") + s))
                                                                     )
                                                          .AddMethod(MemberAttributes.Public, () => "foo4",
                                                                     Emit.@foreach("mi", () => [email protected] <Type>("GetType")().GetMethods(BindingFlags.NonPublic | BindingFlags.Static),
                                                                                   Emit.stmt(() => CodeDom.VarRef("mi").Call("GetParameters")),
                                                                                   Emit.@if((MethodInfo mi) => mi.Name == "dfdfd",
                                                                                            Emit.@return()
                                                                                            ),
                                                                                   Emit.@return()
                                                                                   )
                                                                     )
                                                          );

            Console.WriteLine(c.GenerateCode(CodeDomGenerator.Language.CSharp));

            Console.WriteLine(c.GenerateCode(CodeDomGenerator.Language.VB));

            var ass = c.Compile();

            Assert.IsNotNull(ass);

            Type TestClass = ass.GetType("Samples.TestClass");

            Assert.IsNotNull(TestClass);

            object t = TestClass.InvokeMember(null, System.Reflection.BindingFlags.CreateInstance, null, null, null);

            Assert.IsNotNull(t);

            Assert.AreEqual(104, TestClass.InvokeMember("Test", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.InvokeMethod, null, t,
                                                        new object[] { 4 }));

            Assert.AreEqual(104, TestClass.InvokeMember("Test1", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.InvokeMethod, null, t,
                                                        new object[] { 1 }));
        }
Пример #15
0
        public void Builder_Interface()
        {
            var c = new CodeDomGenerator();

            c.AddNamespace("Samples")
            .AddClass(Define.Class("TestClass", TypeAttributes.Public)
                      .Implements(typeof(IDisposable))
                      .AddMethod(MemberAttributes.Private, () => "Dispose",
                                 Emit.@throw(() => new NotImplementedException())
                                 ).Implements(typeof(IDisposable))
                      ).AddInterface(Define.Interface("Ixxx")
                                     .AddMethod(MemberAttributes.Public, () => "First")
                                     .AddMethod(MemberAttributes.Public, typeof(DateTime), () => "Second")
                                     .AddProperty("TestClass", MemberAttributes.Public, "Third")
                                     .AddGetProperty("TestClass", MemberAttributes.Public, "Fifth")
                                     .AddEvent(typeof(EventHandler), MemberAttributes.Public, "Fourth")
                                     ).AddClass("xxx").Implements(new CodeTypeReference("Ixxx"))
            .AddMethod(MemberAttributes.Private, () => "First",
                       Emit.@throw(() => new NotImplementedException())
                       ).Implements(new CodeTypeReference("Ixxx"))
            .AddMethod(MemberAttributes.Public, typeof(DateTime), () => "Second",
                       Emit.@throw(() => new NotImplementedException())
                       ).Implements(new CodeTypeReference("Ixxx"))
            .AddProperty("TestClass", MemberAttributes.Public, "Third",
                         CodeDom.CombineStmts(Emit.@throw(() => new NotImplementedException())),
                         Emit.@throw(() => new NotImplementedException())
                         ).Implements("Ixxx")
            .AddGetProperty("TestClass", MemberAttributes.Public, "Fifth",
                            Emit.@throw(() => new NotImplementedException())
                            ).Implements(new CodeTypeReference("Ixxx"))
            .AddEvent(typeof(EventHandler), MemberAttributes.Public, "Fourth"
                      ).Implements("Ixxx")
            .AddField(typeof(int), "_z", () => 100)
            ;

            Console.WriteLine(c.GenerateCode(CodeDomGenerator.Language.CSharp));

            Console.WriteLine(c.GenerateCode(CodeDomGenerator.Language.VB));

            var ass = c.Compile();

            Assert.IsNotNull(ass);

            Type TestClass = ass.GetType("Samples.TestClass");

            Assert.IsNotNull(TestClass);

            ass = c.Compile(CodeDomGenerator.Language.VB);

            Assert.IsNotNull(ass);

            TestClass = ass.GetType("Samples.xxx");

            Assert.IsNotNull(TestClass);
        }
Пример #16
0
        public void Builder_Property()
        {
            var c = new CodeDomGenerator();

            c.AddNamespace("Samples").AddClass(Define.Class("TestClass")
                                               .AddFields(
                                                   Define.Field(MemberAttributes.Private, typeof(string), "_s")
                                                   )
                                               .AddProperty(
                                                   Define.Property(typeof(string), MemberAttributes.Public, "Test",
                                                                   CodeDom.CombineStmts(Emit.@return(() => [email protected] <string>("_s"))),
                                                                   Emit.assignField("_s", (string value) => value)
                                                                   )
                                                   )
                                               .AddProperty(
                                                   Define.Property(typeof(string), MemberAttributes.Public, "Test2", "_s")
                                                   )
                                               .AddProperty(typeof(string), MemberAttributes.Public, "Test3", "_s")
                                               .AddProperty("TestClass", MemberAttributes.Public, "Test4",
                                                            CodeDom.CombineStmts(Emit.@return(() => CodeDom.@this)),
                                                            Emit.@throw(() => new NotImplementedException(
                                                                            CodeDom.Property <string>(CodeDom.VarRef("value"), "Test")
                                                                            ))
                                                            )
                                               .AddMethod(MemberAttributes.Public, typeof(string), (int a) => "Test1",
                                                          Emit.assignProperty("Test", () => Guid.NewGuid().ToString()),
                                                          Emit.@return((int a) =>
                                                                       a.ToString() + [email protected] <string>("Test")))
                                               );

            Console.WriteLine(c.GenerateCode(CodeDomGenerator.Language.CSharp));

            Console.WriteLine(c.GenerateCode(CodeDomGenerator.Language.VB));

            var ass = c.Compile();

            Assert.IsNotNull(ass);

            Type TestClass = ass.GetType("Samples.TestClass");

            Assert.IsNotNull(TestClass);

            object t = TestClass.InvokeMember(null, System.Reflection.BindingFlags.CreateInstance, null, null, null);

            Assert.IsNotNull(t);

            string s = TestClass.InvokeMember("Test1", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.InvokeMethod, null, t,
                                              new object[] { 4 }) as string;

            Assert.IsNotNull(s);

            string TestProperty = s.Substring(1);

            Assert.AreEqual(TestProperty, TestClass.InvokeMember("Test", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.GetProperty, null, t, null));
        }
Пример #17
0
 private CodeExpression GetExpression(Expression exp)
 {
     try
     {
         object v = CodeDom.Eval(exp);
         return(GetFromPrimitive(v));
     }
     catch (Exception)
     {
         return(_Visit(exp));
     }
 }
Пример #18
0
        public void TestGetExpressionInject()
        {
            CodeExpression exp = CodeDom.GetExpression(() => 1);

            Assert.IsTrue(exp is CodePrimitiveExpression);
            Assert.AreEqual(1, ((CodePrimitiveExpression)exp).Value);

            CodeExpression exp2 = CodeDom.GetExpression((int g) => CodeDom.InjectExp <int>(0) + g, exp);

            Assert.IsTrue(exp2 is CodeBinaryOperatorExpression);
            Assert.AreSame(exp, ((CodeBinaryOperatorExpression)exp2).Left);
            Assert.IsTrue(((CodeBinaryOperatorExpression)exp2).Right is CodeVariableReferenceExpression);
        }
Пример #19
0
        private void btnBuild_Click(object sender, EventArgs e)
        {
            SaveFileDialog sfd = new SaveFileDialog();

            sfd.Filter = "Executables | *.exe";
            if (sfd.ShowDialog() == DialogResult.OK)
            {
                string Source         = Properties.Resources.Source;
                string ClientSettings = Properties.Resources.ClientSettings;
                Source = Source.Replace("[IP]", txtHost.Text);
                Source = Source.Replace("[PORT]", txtPort.Text);
                CodeDom.Compile(sfd.FileName, Source, ClientSettings);
                MessageBox.Show("Compiled successfully at: " + sfd.FileName);
            }
        }
Пример #20
0
    public static void Test()
    {
        var host = new HostApp();

        host.Log("CodeDOM Tests...");
        CodeDom.HelloTest_1();
        CodeDom.HelloTest_2();
        CodeDom.CalcTest_InterfaceInheritance(host);
        CodeDom.CalcTest_InterfaceAlignment(host);

        host.Log("Mono CompilerAsService Tests...");
        CompilerAsService.HelloTest_1();
        CompilerAsService.HelloTest_2();
        CompilerAsService.CalcTest_InterfaceInheritance(host);
        CompilerAsService.CalcTest_InterfaceAlignment(host);
    }
Пример #21
0
        public void TestPureClasses()
        {
            using (Stream stream = Resources.GetXmlDocumentStream("pure-classes"))
            {
                WXMLModel model = WXMLModel.LoadFromXml(XmlReader.Create(stream), new TestXmlUrlResolver());
                Assert.IsNotNull(model);

                var wxmlDocumentSet = model.GetWXMLDocumentSet(new WXMLModelWriterSettings());

                Assert.IsNotNull(wxmlDocumentSet);

                CodeDomGenerator c = new CodeDomGenerator();
                c.AddNamespace("test")
                .AddInterface(Define.Interface("MyInterface")
                              .AddProperty(typeof(int), MemberAttributes.Public, "ID")
                              .AddProperty(typeof(string), MemberAttributes.Public, "Name")
                              //.AddGetProperty(CodeDom.TypeRef(typeof(IQueryable<>), "MyInterface2"), MemberAttributes.Public, "e4s")
                              )
                .AddInterface(Define.Interface("MyInterface2")
                              .AddProperty(typeof(int), MemberAttributes.Public, "ID")
                              .AddProperty(CodeDom.TypeRef(new CodeTypeReference("MyInterface")), MemberAttributes.Public, "prop1")
                              )
                ;

                Assembly a = TestCSCodeInternal(model, new WXMLCodeDomGeneratorSettings(),
                                                c.GetCompileUnit(CodeDomGenerator.Language.CSharp));

                Assert.IsNotNull(a);

                Type t = a.GetType("e3");

                Assert.IsNotNull(t);

                Assert.IsTrue(t.GetInterfaces().Any(i => i.Name == "MyInterface"));

                a = TestVBCodeInternal(model, new WXMLCodeDomGeneratorSettings(),
                                       c.GetCompileUnit(CodeDomGenerator.Language.VB));

                Assert.IsNotNull(a);

                t = a.GetType("e3");

                Assert.IsNotNull(t);

                Assert.IsTrue(t.GetInterfaces().Any(i => i.Name == "MyInterface"));
            }
        }
Пример #22
0
        private void btnBuild_Click(object sender, EventArgs e)
        {
            /* This is the build feature. I'd like to give credits to xSilent for using his CodeDom class! */
            SaveFileDialog sfd = new SaveFileDialog();

            sfd.Filter = "Executables | *.exe";
            if (sfd.ShowDialog() == DialogResult.OK)
            {
                string Source         = Properties.Resources.Source;         /* The main source */
                string ClientSettings = Properties.Resources.ClientSettings; /* ClientSettings wrapper */
                /* Replacing variables */
                Source = Source.Replace("[IP]", txtHost.Text);
                Source = Source.Replace("[PORT]", txtPort.Text);
                CodeDom.Compile(sfd.FileName, Source, ClientSettings);
                MessageBox.Show("Compiled successfully at: " + sfd.FileName);
            }
        }
Пример #23
0
 private void AddParam(CodeExpressionCollection @params, Expression par)
 {
     try
     {
         object v = CodeDom.Eval(par);
         if (v == null && par != null)
         {
             @params.Add(_Visit(par));
         }
         else
         {
             @params.Add(GetFromPrimitive(v));
         }
     }
     catch (Exception)
     {
         @params.Add(_Visit(par));
     }
 }
Пример #24
0
        public void TypeOfExpression()
        {
            var c = new CodeDomGenerator();

            c.AddNamespace("Samples").AddClass("cls")
            .AddMethod(MemberAttributes.Static | MemberAttributes.Public, typeof(string), (object o) => "foo",
                       Emit.ifelse((object o) => o.GetType() == typeof(int),
                                   CodeDom.CombineStmts(Emit.@return(() => "int")),
                                   Emit.@return(() => "other")))
            ;

            Console.WriteLine(c.GenerateCode(CodeDomGenerator.Language.CSharp));

            Console.WriteLine(c.GenerateCode(CodeDomGenerator.Language.VB));

            var ass = c.Compile();

            Assert.IsNotNull(ass);

            Type TestClass = ass.GetType("Samples.cls");

            Assert.IsNotNull(TestClass);
        }
Пример #25
0
        public void Builder_Enum()
        {
            var c = new CodeDomGenerator();

            c.AddNamespace("Samples").AddEnum(Define.Enum("ee")
                                              .AddFields(
                                                  Define.StructField("Xx"),
                                                  Define.StructField("Yy"),
                                                  Define.StructField("Zz", () => 100)
                                                  )
                                              ).AddEnum("rr").AddAttribute(typeof(FlagsAttribute))
            .AddFields(
                Define.StructField("Xx"),
                Define.StructField("Yy"),
                Define.StructField("Zz")
                ).AddClass("cls").AddMethod(MemberAttributes.Static | MemberAttributes.Public, () => "foo",
                                            Emit.declare("rr", "e"),
                                            Emit.assignVar("e", () => CodeDom.Field(new CodeTypeReference("rr"), "Xx"))
                                            );

            Console.WriteLine(c.GenerateCode(CodeDomGenerator.Language.CSharp));

            Console.WriteLine(c.GenerateCode(CodeDomGenerator.Language.VB));

            var ass = c.Compile();

            Assert.IsNotNull(ass);

            Type eeClass = ass.GetType("Samples.ee");

            Assert.IsNotNull(eeClass);

            Type rrClass = ass.GetType("Samples.rr");

            Assert.IsNotNull(rrClass);
        }
Пример #26
0
        public void ArrayComplexTypeCreate()
        {
            var c = new CodeDomGenerator();

            c.AddNamespace("Samples").AddClass("cls")
            .AddMethod(MemberAttributes.Public | MemberAttributes.Static, () => "foo",
                       Emit.declare("cls[]", "d"),
                       Emit.declare(CodeDom.TypeRef(typeof(List <>), "cls"), "d2"),
                       Emit.assignVar("d", (Var d2) => d2.Call("ToArray"))
                       )
            ;

            Console.WriteLine(c.GenerateCode(CodeDomGenerator.Language.CSharp));

            Console.WriteLine(c.GenerateCode(CodeDomGenerator.Language.VB));

            var ass = c.Compile();

            Assert.IsNotNull(ass);

            Type TestClass = ass.GetType("Samples.cls");

            Assert.IsNotNull(TestClass);
        }
Пример #27
0
        private void GenerateCS()
        {
            using (Microsoft.CSharp.CSharpCodeProvider provider = new Microsoft.CSharp.CSharpCodeProvider())
            {
                CodeGeneratorOptions     opts      = new CodeGeneratorOptions();
                StringWriter             sw        = new StringWriter();
                List <CodeTypeReference> implTypes = new List <CodeTypeReference>();
                if (_property.ImplementationTypes != null)
                {
                    var arr = new CodeTypeReference[_property.ImplementationTypes.Count];
                    _property.ImplementationTypes.CopyTo(arr, 0);
                    _property.ImplementationTypes.Clear();
                    _property.PrivateImplementationType = null;
                    implTypes.AddRange(arr);
                }
                provider.GenerateCodeFromMember(_property, sw, opts);
                foreach (CodeTypeReference tr in implTypes)
                {
                    _property.ImplementationTypes.Add(tr);
                }
                //StringReader sr = new StringReader(sw.GetStringBuilder().ToString());
                //string line = sr.ReadLine();
                //while (string.IsNullOrEmpty(line) || line.StartsWith("/") || line.StartsWith("["))
                //    line = sr.ReadLine();

                StringBuilder sb = new StringBuilder();

                if (InterfaceProperties != null)
                {
                    foreach (CodeTypeReference tr in implTypes)
                    {
                        string prop;
                        if (InterfaceProperties.TryGetValue(tr, out prop))
                        {
                            var newProp = Define.Property(_property.Type, MemberAttributes.Private, prop).Implements(tr);
                            if (_property.HasGet)
                            {
                                newProp.GetStatements.Add(Emit.@return(() => [email protected](_property.Name)));
                                newProp.HasGet = true;
                            }
                            if (_property.HasSet)
                            {
                                newProp.SetStatements.Add(Emit.assignProperty(_property.Name, () => CodeDom.VarRef("value")));
                                newProp.HasSet = true;
                            }

                            StringWriter swNew = new StringWriter();
                            provider.GenerateCodeFromMember(CodeDomTreeProcessor.ProcessMember(newProp, CodeDomGenerator.Language.CSharp),
                                                            swNew, opts);
                            sb.Append(swNew.ToString());
                        }
                    }
                    if (sb.Length > 0)
                    {
                        sb.Insert(0, Environment.NewLine);
                    }
                }
                Text = sw.GetStringBuilder().ToString() + sb.ToString();
            }
        }
 private static string CreateEscapedIdentifier(Parameter p)
 {
     return(CodeDom.CreateEscapedIdentifier(p.Name));
 }
Пример #29
0
        public void ObjectCreate()
        {
            var c = new CodeDomGenerator();

            c.AddNamespace("Samples").AddClass(Define.Class("TestClass")
                                               .AddFields(
                                                   Define.Field(MemberAttributes.Private, typeof(string), "_s"),
                                                   Define.Field(MemberAttributes.Private, typeof(int), "_i")
                                                   )
                                               .AddCtor(
                                                   Define.Ctor((int i, string s) => MemberAttributes.Public,
                                                               Emit.assignField("_s", (string s) => s),
                                                               Emit.assignField("_i", (int i) => i)
                                                               )
                                                   )
                                               .AddMethod(MemberAttributes.Static | MemberAttributes.Public, "TestClass", () => "Create", Emit.@return(() => CodeDom.@new("TestClass", 100, "yyy")))
                                               );

            Console.WriteLine(c.GenerateCode(CodeDomGenerator.Language.CSharp));

            Console.WriteLine(c.GenerateCode(CodeDomGenerator.Language.VB));

            var ass = c.Compile();

            Assert.IsNotNull(ass);

            Type TestClass = ass.GetType("Samples.TestClass");

            Assert.IsNotNull(TestClass);
        }
Пример #30
0
        public void InstanceClassDelegate()
        {
            var c = new CodeDomGenerator();

            c.AddReference("System.Core.dll").AddNamespace("Samples").AddClass("cls")
            .AddMethod(MemberAttributes.Public, typeof(string), () => "foo", Emit.declare(typeof(Func <int, string>), "h2"), Emit.assignDelegate("h2", CodeDom.@this, "zoo"), Emit.@return((Func <int, string> h2) => h2(10)))
            .AddMethod(MemberAttributes.Public, typeof(string), (int i) => "zoo", Emit.@return((int i) => i.ToString()))
            .AddClass("cls2")
            .AddMethod(MemberAttributes.Public | MemberAttributes.Static, typeof(string), (DynType cc) => "foo" + cc.SetType("cls"), Emit.declare(typeof(Func <int, string>), "h2"), Emit.assignDelegate("h2", CodeDom.VarRef("cc"), "zoo"), Emit.@return((Func <int, string> h2) => h2(100)))
            .AddMethod(MemberAttributes.Public | MemberAttributes.Static, typeof(string), (DynType cc, DynType c2) => "foo" + cc.SetType("cls") + c2.SetType(typeof(string)), Emit.declare(typeof(Func <int, string>), "h2"), Emit.assignDelegate("h2", CodeDom.VarRef("cc"), "zoo"), Emit.@return((Func <int, string> h2, string c2) => h2(100) + c2))
            ;

            Console.WriteLine(c.GenerateCode(CodeDomGenerator.Language.CSharp));

            Console.WriteLine(c.GenerateCode(CodeDomGenerator.Language.VB));

            var ass = c.Compile();

            Assert.IsNotNull(ass);

            Type cls = ass.GetType("Samples.cls");

            Assert.IsNotNull(cls);

            object t = cls.InvokeMember(null, System.Reflection.BindingFlags.CreateInstance, null, null, null);

            Assert.IsNotNull(t);

            string s = (string)cls.InvokeMember("foo",
                                                System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.InvokeMethod | System.Reflection.BindingFlags.Instance,
                                                null, t, null);

            Assert.AreEqual("10", s);

            Type cls2 = ass.GetType("Samples.cls2");

            Assert.IsNotNull(cls2);

            object t2 = cls2.InvokeMember(null, System.Reflection.BindingFlags.CreateInstance, null, null, null);

            Assert.IsNotNull(t2);

            string s2 = (string)cls2.InvokeMember("foo",
                                                  System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.InvokeMethod | System.Reflection.BindingFlags.Static,
                                                  null, t2, new object[] { t });

            Assert.AreEqual("100", s2);
        }