public void GenerateCodeFromCompileUnit(
     System.CodeDom.CodeCompileUnit e
     , System.IO.TextWriter w
     , System.CodeDom.Compiler.CodeGeneratorOptions o)
 {
     throw new System.NotImplementedException();
 }
Example #2
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());
            }
        }
 protected override void RefreshValue()
 {
     using (Microsoft.VisualBasic.VBCodeProvider provider = new Microsoft.VisualBasic.VBCodeProvider())
     {
         System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions();
         using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString))
         {
             tw.Write("Using ");
             if (UsingExpression != null)
             {
                 provider.GenerateCodeFromExpression(UsingExpression, tw, opts);
             }
             tw.WriteLine();
             tw.Indent++;
             if (Statements != null)
             {
                 foreach (CodeStatement statement in Statements)
                 {
                     provider.GenerateCodeFromStatement(statement, tw, opts);
                 }
             }
             tw.Indent--;
             tw.Write("End Using");
             Value = tw.InnerWriter.ToString();
         }
     }
 }
 public void GenerateCode(CodeDomGenerator.Language language)
 {
     switch (language)
     {
         case CodeDomGenerator.Language.CSharp:
             using (Microsoft.CSharp.CSharpCodeProvider provider = new Microsoft.CSharp.CSharpCodeProvider())
             {
                 System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions();
                 using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString))
                 {
                     tw.Write("continue;");
                     Value = tw.InnerWriter.ToString();
                 }
             }
             break;
         case CodeDomGenerator.Language.VB:
             using (Microsoft.VisualBasic.VBCodeProvider provider = new Microsoft.VisualBasic.VBCodeProvider())
             {
                 System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions();
                 using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString))
                 {
                     tw.Write("Continue For");
                     Value = tw.InnerWriter.ToString();
                 }
             }
             break;
         default:
             throw new NotImplementedException(language.ToString());
     }
 }
Example #5
0
        /// <summary>
        /// Writes the code to string in the specific language
        /// and returns the string
        /// </summary>
        public static string Create(Language language, string expression, RegexOptions options)
        {
            CodeCompileUnit unit = Create(expression, options);

            System.Text.StringBuilder builder = new System.Text.StringBuilder();

            using (System.IO.StringWriter stringWriter = new System.IO.StringWriter(builder))
            {
                System.CodeDom.Compiler.ICodeGenerator generator;

                switch (language)
                {
                    case Language.CSharp:
                        System.CodeDom.Compiler.CodeGeneratorOptions genOptions = new System.CodeDom.Compiler.CodeGeneratorOptions();
                        genOptions.BracingStyle = "C";
                        generator = new Microsoft.CSharp.CSharpCodeProvider().CreateGenerator();
                        generator.GenerateCodeFromCompileUnit(unit, stringWriter, genOptions);
                        break;
                    case Language.VisualBasic:
                        generator = new Microsoft.VisualBasic.VBCodeProvider().CreateGenerator();
                        generator.GenerateCodeFromCompileUnit(unit, stringWriter, null);
                        break;
                }

                return builder.ToString();
            }
        }
        public void GenerateCode(CodeDomGenerator.Language language)
        {
            switch (language)
            {
            case CodeDomGenerator.Language.CSharp:
                using (Microsoft.CSharp.CSharpCodeProvider provider = new Microsoft.CSharp.CSharpCodeProvider())
                {
                    System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions();
                    using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString))
                    {
                        tw.Write("continue;");
                        Value = tw.InnerWriter.ToString();
                    }
                }
                break;

            case CodeDomGenerator.Language.VB:
                using (Microsoft.VisualBasic.VBCodeProvider provider = new Microsoft.VisualBasic.VBCodeProvider())
                {
                    System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions();
                    using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString))
                    {
                        tw.Write("Continue Do");
                        Value = tw.InnerWriter.ToString();
                    }
                }
                break;

            default:
                throw new NotImplementedException(language.ToString());
            }
        }
Example #7
0
        static void GenerateVBCodeForService(Uri metadataAddress, string outputFile)
        {
            MetadataExchangeClient mexClient = new MetadataExchangeClient(metadataAddress, MetadataExchangeClientMode.HttpGet);
              mexClient.ResolveMetadataReferences = true;
              MetadataSet metaDocs = mexClient.GetMetadata();

              WsdlImporter importer = new WsdlImporter(metaDocs);
              ServiceContractGenerator generator = new ServiceContractGenerator();

              System.Collections.ObjectModel.Collection<ContractDescription> contracts = importer.ImportAllContracts();
              foreach (ContractDescription contract in contracts)
              {
            generator.GenerateServiceContractType(contract);
              }
              if (generator.Errors.Count != 0)
            throw new ApplicationException("There were errors during code compilation.");

              // Write the code dom.
              System.CodeDom.Compiler.CodeGeneratorOptions options = new System.CodeDom.Compiler.CodeGeneratorOptions();
              options.BracingStyle = "C";
              System.CodeDom.Compiler.CodeDomProvider codeDomProvider = System.CodeDom.Compiler.CodeDomProvider.CreateProvider("VB");
              System.CodeDom.Compiler.IndentedTextWriter textWriter = new System.CodeDom.Compiler.IndentedTextWriter(new System.IO.StreamWriter(outputFile));
              codeDomProvider.GenerateCodeFromCompileUnit(generator.TargetCompileUnit, textWriter, options);
              textWriter.Close();
        }
 public void GenerateCode(CodeDomGenerator.Language language)
 {
     switch (language)
     {
         case CodeDomGenerator.Language.CSharp:
             if (_csStatement != null)
                 using (Microsoft.CSharp.CSharpCodeProvider provider = new Microsoft.CSharp.CSharpCodeProvider())
                 {
                     System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions();
                     using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString))
                     {
                         provider.GenerateCodeFromStatement(_csStatement, tw, opts);
                         Value = tw.InnerWriter.ToString();
                     }
                 }
             break;
         case CodeDomGenerator.Language.VB:
             if (_vbStatement != null)
                 using (Microsoft.VisualBasic.VBCodeProvider provider = new Microsoft.VisualBasic.VBCodeProvider())
                 {
                     System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions();
                     using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString))
                     {
                         provider.GenerateCodeFromStatement(_vbStatement, tw, opts);
                         Value = tw.InnerWriter.ToString();
                     }
                 }
             break;
         default:
             throw new NotImplementedException(language.ToString());
     }
 }
Example #9
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());
     }
 }
        //FIXME: error handling
        void UpdateCliTypes(NSObjectProjectInfo pinfo, List <SyncObjcBackJob> typeSyncJobs)
        {
            var provider = System.CodeDom.Compiler.CodeDomProvider.CreateProvider("C#");
            var options  = new System.CodeDom.Compiler.CodeGeneratorOptions();
            var writer   = MonoDevelop.DesignerSupport.CodeBehindWriter.CreateForProject(
                new MonoDevelop.Core.ProgressMonitoring.NullProgressMonitor(), dnp);

            //group all the types by designer file
            var designerFile = new Dictionary <string, List <NSObjectTypeInfo> > ();

            foreach (var job in typeSyncJobs)
            {
                List <NSObjectTypeInfo> types;
                if (!designerFile.TryGetValue(job.DesignerFile, out types))
                {
                    designerFile[job.DesignerFile] = types = new List <NSObjectTypeInfo> ();
                }
                types.Add(job.Type);
            }

            //add in other designer types that exist in the designer files
            foreach (var ut in pinfo.GetTypes())
            {
                if (!ut.IsUserType)
                {
                    continue;
                }
                var df = ut.GetDesignerFile();
                List <NSObjectTypeInfo> types;
                if (df != null && designerFile.TryGetValue(df, out types))
                {
                    if (!types.Any(t => t.ObjCName == ut.ObjCName))
                    {
                        types.Add(ut);
                    }
                }
            }

            updatingProjectFiles = true;

            try {
                foreach (var df in designerFile)
                {
                    var ccu = GenerateCompileUnit(provider, options, df.Key, df.Value);
                    writer.Write(ccu, df.Key);
                }
                writer.WriteOpenFiles();

                foreach (var job in typeSyncJobs)
                {
                    pinfo.InsertUpdatedType(job.Type);
                    trackedFiles[job.HFile] = File.GetLastWriteTime(job.HFile);
                }
            } finally {
                updatingProjectFiles = false;
            }
        }
        public void GenerateCode(CodeDomGenerator.Language language)
        {
            switch (language)
            {
                case CodeDomGenerator.Language.CSharp:
                    using (Microsoft.CSharp.CSharpCodeProvider provider = new Microsoft.CSharp.CSharpCodeProvider())
                    {
                        System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions();
                        using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString))
                        {

                            tw.WriteLine("do");
                            tw.WriteLine("{");
                            tw.Indent++;
                            if (Statements != null)
                                foreach (CodeStatement statement in Statements)
                                {
                                    provider.GenerateCodeFromStatement(statement, tw, opts);
                                }
                            tw.Indent--;
                            tw.Write("} while (");
                            if (TestExpression != null)
                                provider.GenerateCodeFromExpression(TestExpression, tw, opts);
                            tw.WriteLine(");");

                            Value = tw.InnerWriter.ToString();
                        }
                    }
                    break;
                case CodeDomGenerator.Language.VB:
                    using (Microsoft.VisualBasic.VBCodeProvider provider = new Microsoft.VisualBasic.VBCodeProvider())
                    {
                        System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions();
                        using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString))
                        {
                            tw.WriteLine("Do");
                            tw.Indent++;
                            if (Statements != null)
                                foreach (CodeStatement statement in Statements)
                                {
                                    provider.GenerateCodeFromStatement(statement, tw, opts);
                                }
                            tw.Indent--;
                            tw.Write("Loop Until ");
                            if (TestExpression != null)
                                provider.GenerateCodeFromExpression(TestExpression, tw, opts);
                            tw.WriteLine();

                            Value = tw.InnerWriter.ToString();
                        }
                    }
                    break;
                default:
                    throw new NotImplementedException(language.ToString());
            }
        }
        protected override void GenerateTransformCode(string directiveName, System.Text.StringBuilder codeBuffer, System.CodeDom.Compiler.CodeDomProvider languageProvider, System.Collections.Generic.IDictionary<string, string> requiresArguments, System.Collections.Generic.IDictionary<string, string> providesArguments)
        {
            base.GenerateTransformCode(directiveName, codeBuffer, languageProvider, requiresArguments, providesArguments);

            System.CodeDom.CodeMemberField codeMemberField = null;
            if (!System.String.IsNullOrEmpty(providesArguments["GeneratedResourceName"]))
            {
                codeMemberField = new System.CodeDom.CodeMemberField(new System.CodeDom.CodeTypeReference(typeof(string)), providesArguments["GeneratedResourceName"]);
                codeMemberField.Attributes = System.CodeDom.MemberAttributes.Abstract | System.CodeDom.MemberAttributes.Override | System.CodeDom.MemberAttributes.FamilyAndAssembly | System.CodeDom.MemberAttributes.FamilyOrAssembly;
                string s = requiresArguments["ProjectDefaultNamespace"];
                if (!System.String.IsNullOrEmpty(requiresArguments["GeneratedCodeFolder"]))
                {
                    if (!System.String.IsNullOrEmpty(s))
                        s += ".";
                    s += requiresArguments["GeneratedCodeFolder"];
                }
                if (!System.String.IsNullOrEmpty(requiresArguments["GeneratedResourceFile"]))
                {
                    if (!System.String.IsNullOrEmpty(s))
                        s += ".";
                    s += requiresArguments["GeneratedResourceFile"];
                }
                codeMemberField.InitExpression = new System.CodeDom.CodePrimitiveExpression(s);

                System.CodeDom.Compiler.CodeGeneratorOptions codeGeneratorOptions = new System.CodeDom.Compiler.CodeGeneratorOptions();
                codeGeneratorOptions.BlankLinesBetweenMembers = true;
                codeGeneratorOptions.IndentString = "    ";
                codeGeneratorOptions.VerbatimOrder = true;
                codeGeneratorOptions.BracingStyle = "C";
                using (System.IO.StringWriter stringWriter = new System.IO.StringWriter(codeBuffer, System.Globalization.CultureInfo.InvariantCulture))
                {
                    if (codeMemberField != null)
                        languageProvider.GenerateCodeFromMember(codeMemberField, stringWriter, codeGeneratorOptions);
                }
            }
            if (!System.String.IsNullOrEmpty(providesArguments["GeneratedNamespace"]))
            {
                codeMemberField = new System.CodeDom.CodeMemberField(new System.CodeDom.CodeTypeReference(typeof(string)), providesArguments["GeneratedNamespace"]);
                codeMemberField.Attributes = System.CodeDom.MemberAttributes.Abstract | System.CodeDom.MemberAttributes.Override | System.CodeDom.MemberAttributes.FamilyAndAssembly | System.CodeDom.MemberAttributes.FamilyOrAssembly;
                string s = requiresArguments["ProjectDefaultNamespace"];
                codeMemberField.InitExpression = new System.CodeDom.CodePrimitiveExpression(s);

                System.CodeDom.Compiler.CodeGeneratorOptions codeGeneratorOptions = new System.CodeDom.Compiler.CodeGeneratorOptions();
                codeGeneratorOptions.BlankLinesBetweenMembers = true;
                codeGeneratorOptions.IndentString = "    ";
                codeGeneratorOptions.VerbatimOrder = true;
                codeGeneratorOptions.BracingStyle = "C";
                using (System.IO.StringWriter stringWriter = new System.IO.StringWriter(codeBuffer, System.Globalization.CultureInfo.InvariantCulture))
                {
                    if (codeMemberField != null)
                        languageProvider.GenerateCodeFromMember(codeMemberField, stringWriter, codeGeneratorOptions);
                }
            }

        }
Example #13
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());
            }
        }
Example #14
0
        static void Main()
        {
            string outputFile = "c:\\temp\\test";


            //<Snippet0>
            EndpointAddress mexAddress = new EndpointAddress("http://localhost:8000/ServiceModelSamples/service/mex");
            //</Snippet0>

            //<Snippet1>
            MetadataExchangeClient mexClient = new MetadataExchangeClient(mexAddress);

            mexClient.ResolveMetadataReferences = true;
            MetadataSet metaSet = mexClient.GetMetadata();
            //</Snippet1>

            //<Snippet2>
            WsdlImporter importer = new WsdlImporter(metaSet);

            System.Collections.ObjectModel.Collection <ContractDescription> contracts = importer.ImportAllContracts();
            //</Snippet2>

            //<Snippet3>
            ServiceContractGenerator generator = new ServiceContractGenerator();

            foreach (ContractDescription contract in contracts)
            {
                generator.GenerateServiceContractType(contract);
            }

            if (generator.Errors.Count != 0)
            {
                throw new Exception("There were errors during code compilation.");
            }
            //</Snippet3>


            // Write the code dom
            //<Snippet4>
            System.CodeDom.Compiler.CodeGeneratorOptions options = new System.CodeDom.Compiler.CodeGeneratorOptions();
            options.BracingStyle = "C";
            System.CodeDom.Compiler.CodeDomProvider    codeDomProvider = System.CodeDom.Compiler.CodeDomProvider.CreateProvider("C#");
            System.CodeDom.Compiler.IndentedTextWriter textWriter      = new System.CodeDom.Compiler.IndentedTextWriter(new System.IO.StreamWriter(outputFile));
            codeDomProvider.GenerateCodeFromCompileUnit(generator.TargetCompileUnit, textWriter, options);
            textWriter.Close();
            //</Snippet4>


            Console.WriteLine();
            Console.WriteLine("Press <ENTER> to terminate client.");
            Console.ReadLine();
        }
Example #15
0
 protected string ComplieNameSpaceToString(CodeNamespace nameSpace)
 {
     using (Microsoft.CSharp.CSharpCodeProvider cprovider = new Microsoft.CSharp.CSharpCodeProvider())
     {
         StringBuilder fileContent = new StringBuilder();
         var           option      = new System.CodeDom.Compiler.CodeGeneratorOptions();
         option.BlankLinesBetweenMembers = false;
         using (StringWriter sw = new StringWriter(fileContent))
         {
             cprovider.GenerateCodeFromNamespace(nameSpace, sw, option);
         }
         return(fileContent.ToString());
     }
 }
 public void GenerateCode(CodeDomGenerator.Language language)
 {
     switch (language)
     {
         case CodeDomGenerator.Language.CSharp:
             using (Microsoft.CSharp.CSharpCodeProvider provider = new Microsoft.CSharp.CSharpCodeProvider())
             {
                 System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions();
                 using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString))
                 {
                     tw.Write("new ");
                     provider.GenerateCodeFromExpression(new CodeTypeReferenceExpression(TypeReference.ArrayElementType), tw, opts);
                     tw.Write("[");
                     for (int i = 0; i < Dimensions.Count; i++)
                     {
                         if (i > 0)
                             tw.Write(",");
                         provider.GenerateCodeFromExpression(Dimensions[i], tw, opts);
                     }
                     tw.Write("]");
                     Value = tw.InnerWriter.ToString();
                 }
             }
             break;
         case CodeDomGenerator.Language.VB:
             using (Microsoft.VisualBasic.VBCodeProvider provider = new Microsoft.VisualBasic.VBCodeProvider())
             {
                 System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions();
                 using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString))
                 {
                     tw.Write("(");
                     for (int i = 0; i < Dimensions.Count; i++)
                     {
                         if (i > 0)
                             tw.Write(",");
                         tw.Write("(");
                         provider.GenerateCodeFromExpression(Dimensions[i], tw, opts);
                         tw.Write(")-1");
                     }
                     tw.Write(") as ");
                     provider.GenerateCodeFromExpression(new CodeTypeReferenceExpression(TypeReference), tw, opts);
                     Value = tw.InnerWriter.ToString();
                 }
             }
             break;
         default:
             throw new NotImplementedException(language.ToString());
     }
 }
Example #17
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());
            }
        }
Example #18
0
        public static byte[] GenerateAssembly(string namespaceName, string className, params CodeMemberMethod[] methods)
        {
            CodeCompileUnit     unit  = new CodeCompileUnit();
            CodeNamespace       space = new CodeNamespace(namespaceName);
            CodeTypeDeclaration type  = new CodeTypeDeclaration(className);

            type.Attributes     = MemberAttributes.Static | MemberAttributes.Public;
            type.TypeAttributes = System.Reflection.TypeAttributes.Public | System.Reflection.TypeAttributes.Sealed;

            type.Members.AddRange(methods);
            space.Types.Add(type);
            unit.Namespaces.Add(space);

            Microsoft.CSharp.CSharpCodeProvider provider = new Microsoft.CSharp.CSharpCodeProvider();

            System.CodeDom.Compiler.CompilerParameters options = new System.CodeDom.Compiler.CompilerParameters();
            options.IncludeDebugInformation = false;
            options.GenerateExecutable      = false;

            options.ReferencedAssemblies.Add(typeof(int).Assembly.Location);
            options.ReferencedAssemblies.Add(typeof(Vector2).Assembly.Location);

            System.CodeDom.Compiler.CompilerResults results = provider.CompileAssemblyFromDom(options, unit);

            System.CodeDom.Compiler.CodeGeneratorOptions ops = new System.CodeDom.Compiler.CodeGeneratorOptions();
            ops.IndentString  = "\t";
            ops.VerbatimOrder = true;
            ops.BracingStyle  = "C";

            StringWriter text = new StringWriter();

            provider.GenerateCodeFromCompileUnit(unit, text, ops);
            string code = text.ToString();

            if (results.Errors.HasErrors)
            {
                string errors = "";
                foreach (System.CodeDom.Compiler.CompilerError error in results.Errors)
                {
                    errors += error.ToString() + Environment.NewLine;
                }
                throw new InvalidOperationException(errors);
            }

            byte[] data = File.ReadAllBytes(results.PathToAssembly);
            File.Delete(results.PathToAssembly);
            return(data);
        }
Example #19
0
        static void GenerateCSCodeForService(EndpointAddress metadataAddress, string outputFile)
        {
            MetadataExchangeClient mexClient = new MetadataExchangeClient(metadataAddress);

            mexClient.ResolveMetadataReferences = true;
            MetadataSet metaDocs = mexClient.GetMetadata();

            WsdlImporter             importer  = new WsdlImporter(metaDocs);
            ServiceContractGenerator generator = new ServiceContractGenerator();

            // Uncomment the following code if you are going to do your work programmatically rather than add
            // the WsdlDocumentationImporters through a configuration file.

            /*
             * // The following code inserts the custom WSDL programmatically adding the custom WsdlImporter without
             * // removing the other importers already in the collection.
             * System.Collections.Generic.IEnumerable<IWsdlImportExtension> exts = importer.WsdlExtensions;
             * System.Collections.Generic.List<IWsdlImportExtension> newExts = new System.Collections.Generic.List<IWsdlImportExtension>();
             * foreach (IWsdlImportExtension ext in exts)
             * newExts.Add(ext);
             * newExts.Add(new WsdlDocumentationImporter());
             * importer = new WsdlImporter(newExts.ToArray(), metaDocs.MetadataSections);
             */

            System.Collections.ObjectModel.Collection <ContractDescription> contracts
                = importer.ImportAllContracts();
            foreach (ContractDescription contract in contracts)
            {
                generator.GenerateServiceContractType(contract);
            }
            if (generator.Errors.Count != 0)
            {
                throw new ApplicationException("There were errors during code compilation.");
            }

            // Write the code dom
            System.CodeDom.Compiler.CodeGeneratorOptions options
                = new System.CodeDom.Compiler.CodeGeneratorOptions();
            options.BracingStyle = "C";
            System.CodeDom.Compiler.CodeDomProvider codeDomProvider
                = System.CodeDom.Compiler.CodeDomProvider.CreateProvider("C#");
            System.CodeDom.Compiler.IndentedTextWriter textWriter
                = new System.CodeDom.Compiler.IndentedTextWriter(new System.IO.StreamWriter(outputFile));
            codeDomProvider.GenerateCodeFromCompileUnit(
                generator.TargetCompileUnit, textWriter, options
                );
            textWriter.Close();
        }
Example #20
0
 protected override void RefreshValue()
 {
     using (Microsoft.CSharp.CSharpCodeProvider provider = new Microsoft.CSharp.CSharpCodeProvider())
     {
         System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions();
         using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString))
         {
             tw.Write("(");
             provider.GenerateCodeFromExpression(Expression, tw, opts);
             tw.Write(" is ");
             provider.GenerateCodeFromExpression(new CodeTypeReferenceExpression(TypeReference), tw, opts);
             tw.Write(")");
             Value = tw.InnerWriter.ToString();
         }
     }
 }
		public static byte[] GenerateAssembly(string namespaceName, string className, params CodeMemberMethod[] methods)
		{
			CodeCompileUnit unit = new CodeCompileUnit();
			CodeNamespace space = new CodeNamespace(namespaceName);
			CodeTypeDeclaration type = new CodeTypeDeclaration(className);

			type.Attributes = MemberAttributes.Static | MemberAttributes.Public;
			type.TypeAttributes = System.Reflection.TypeAttributes.Public | System.Reflection.TypeAttributes.Sealed;

			type.Members.AddRange(methods);
			space.Types.Add(type);
			unit.Namespaces.Add(space);

			Microsoft.CSharp.CSharpCodeProvider provider = new Microsoft.CSharp.CSharpCodeProvider();

			System.CodeDom.Compiler.CompilerParameters options = new System.CodeDom.Compiler.CompilerParameters();
			options.IncludeDebugInformation = false;
			options.GenerateExecutable = false;

			options.ReferencedAssemblies.Add(typeof(int).Assembly.Location);
			options.ReferencedAssemblies.Add(typeof(Vector2).Assembly.Location);

			System.CodeDom.Compiler.CompilerResults results = provider.CompileAssemblyFromDom(options,unit);

			System.CodeDom.Compiler.CodeGeneratorOptions ops = new System.CodeDom.Compiler.CodeGeneratorOptions();
			ops.IndentString = "\t";
			ops.VerbatimOrder = true;
			ops.BracingStyle = "C";

			StringWriter text = new StringWriter();
			provider.GenerateCodeFromCompileUnit(unit, text, ops);
			string code = text.ToString();

			if (results.Errors.HasErrors)
			{
				string errors = "";
				foreach (System.CodeDom.Compiler.CompilerError error in results.Errors)
				{
					errors += error.ToString() + Environment.NewLine;
				}
				throw new InvalidOperationException(errors);
			}
			
			byte[] data = File.ReadAllBytes(results.PathToAssembly);
			File.Delete(results.PathToAssembly);
			return data;
		}
        public void GenerateCode(CodeDomGenerator.Language language)
        {
            if (_left == null)
            {
                return;
            }

            switch (language)
            {
            case CodeDomGenerator.Language.CSharp:
                using (Microsoft.CSharp.CSharpCodeProvider provider = new Microsoft.CSharp.CSharpCodeProvider())
                {
                    System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions();
                    using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString))
                    {
                        provider.GenerateCodeFromExpression(_left, tw, opts);
                        if (_right != null)
                        {
                            tw.Write(_separator);
                            provider.GenerateCodeFromExpression(_right, tw, opts);
                        }
                        Value = tw.InnerWriter.ToString();
                    }
                }
                break;

            case CodeDomGenerator.Language.VB:
                using (Microsoft.VisualBasic.VBCodeProvider provider = new Microsoft.VisualBasic.VBCodeProvider())
                {
                    System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions();
                    using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString))
                    {
                        provider.GenerateCodeFromExpression(_left, tw, opts);
                        if (_right != null)
                        {
                            tw.Write(_separator);
                            provider.GenerateCodeFromExpression(_right, tw, opts);
                        }
                        Value = tw.InnerWriter.ToString();
                    }
                }
                break;

            default:
                throw new NotImplementedException(language.ToString());
            }
        }
        public void GenerateCode(CodeDomGenerator.Language language)
        {
            switch (language)
            {
            case CodeDomGenerator.Language.CSharp:
                using (Microsoft.CSharp.CSharpCodeProvider provider = new Microsoft.CSharp.CSharpCodeProvider())
                {
                    System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions();
                    using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString))
                    {
                        provider.GenerateCodeFromExpression(Parameter, tw, opts);
                        Value = tw.InnerWriter.ToString();
                    }
                }
                break;

            case CodeDomGenerator.Language.VB:
                using (Microsoft.VisualBasic.VBCodeProvider provider = new Microsoft.VisualBasic.VBCodeProvider())
                {
                    System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions();
                    StringBuilder sb = new StringBuilder();
                    using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(sb), opts.IndentString))
                    {
                        provider.GenerateCodeFromExpression(Parameter, tw, opts);
                        switch (Option)
                        {
                        case ParamOption.Optional:
                            sb.Replace("ByVal " + Parameter.Name, "Optional ByVal " + Parameter.Name);
                            break;

                        case ParamOption.ParamArray:
                            sb.Replace("ByVal " + Parameter.Name, "ByVal ParamArray " + Parameter.Name);
                            break;

                        default:
                            throw new NotSupportedException(Option.ToString());
                        }
                        Value = tw.InnerWriter.ToString();
                    }
                }
                break;

            default:
                throw new NotImplementedException(language.ToString());
            }
        }
Example #24
0
 /// <summary>
 /// Convert string value to an escaped C# string literal.
 /// </summary>
 public static string ToLiteral(string input, string language = "JScript")
 {
     using (var writer = new StringWriter())
     {
         using (var provider = System.CodeDom.Compiler.CodeDomProvider.CreateProvider(language))
         {
             var exp = new System.CodeDom.CodePrimitiveExpression(input);
             System.CodeDom.Compiler.CodeGeneratorOptions options = null;
             provider.GenerateCodeFromExpression(exp, writer, options);
             var literal = writer.ToString();
             var rxLines = new Regex("\"\\s*[+]\\s*[\r\n]\"", RegexOptions.Multiline);
             literal = rxLines.Replace(literal, "");
             //literal = literal.Replace(string.Format("\" +{0}\t\"", Environment.NewLine), "");
             //literal = literal.Replace("\\r\\n", "\\r\\n\"+\r\n\"");
             return(literal);
         }
     }
 }
        public virtual void GenerateCodeFromCodeDom(System.CodeDom.CodeCompileUnit compileUnit, TextWriter writer)
        {
            var provider = this.CreateCodeDomProvider();

            if (provider != null)
            {
                var options = new System.CodeDom.Compiler.CodeGeneratorOptions();
                options.BlankLinesBetweenMembers = AmbienceService.CodeGenerationProperties.Get("BlankLinesBetweenMembers", true);
                options.BracingStyle             = AmbienceService.CodeGenerationProperties.Get("StartBlockOnSameLine", true) ? "Block" : "C";
                options.ElseOnClosing            = AmbienceService.CodeGenerationProperties.Get("ElseOnClosing", true);
                options.IndentString             = SD.EditorControlService.GlobalOptions.IndentationString;
                provider.GenerateCodeFromCompileUnit(compileUnit, writer, options);
            }
            else
            {
                writer.WriteLine("No CodeDom provider was found for this language.");
            }
        }
 public void GenerateCode(CodeDomGenerator.Language language)
 {
     switch (language)
     {
         case CodeDomGenerator.Language.CSharp:
             using (Microsoft.CSharp.CSharpCodeProvider provider = new Microsoft.CSharp.CSharpCodeProvider())
             {
                 System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions();
                 using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString))
                 {
                     if (!_eq)
                     {
                         tw.Write("!");
                     }
                     tw.Write("ReferenceEquals(");
                     provider.GenerateCodeFromExpression(_left, tw, opts);
                     tw.Write(", ");
                     provider.GenerateCodeFromExpression(_right, tw, opts);
                     tw.Write(")");
                     Value = tw.InnerWriter.ToString();
                 }
             }
             break;
         case CodeDomGenerator.Language.VB:
             using (Microsoft.VisualBasic.VBCodeProvider provider = new Microsoft.VisualBasic.VBCodeProvider())
             {
                 System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions();
                 using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString))
                 {
                     provider.GenerateCodeFromExpression(_left, tw, opts);
                     if (_eq)
                         tw.Write(" Is ");
                     else
                         tw.Write(" IsNot ");
                     provider.GenerateCodeFromExpression(_right, tw, opts);
                     Value = tw.InnerWriter.ToString();
                 }
             }
             break;
         default:
             throw new NotImplementedException(language.ToString());
     }
 }
 public void GenerateCode(CodeDomGenerator.Language language)
 {
     switch (language)
     {
         case CodeDomGenerator.Language.CSharp:
             using (Microsoft.CSharp.CSharpCodeProvider provider = new Microsoft.CSharp.CSharpCodeProvider())
             {
                 System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions();
                 using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString))
                 {
                     provider.GenerateCodeFromExpression(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());
            }
        }
        System.CodeDom.CodeCompileUnit GenerateCompileUnit(System.CodeDom.Compiler.CodeDomProvider provider,
                                                           System.CodeDom.Compiler.CodeGeneratorOptions options, string file, List <NSObjectTypeInfo> types)
        {
            var ccu        = new System.CodeDom.CodeCompileUnit();
            var namespaces = new Dictionary <string, System.CodeDom.CodeNamespace> ();

            foreach (var t in types)
            {
                System.CodeDom.CodeTypeDeclaration type;
                string nsName;
                System.CodeDom.CodeNamespace ns;
                t.GenerateCodeTypeDeclaration(provider, options, infoService.WrapperRoot, out type, out nsName);
                if (!namespaces.TryGetValue(nsName, out ns))
                {
                    namespaces[nsName] = ns = new System.CodeDom.CodeNamespace(nsName);
                    ccu.Namespaces.Add(ns);
                }
                ns.Types.Add(type);
            }
            return(ccu);
        }
 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());
     }
 }
        string GenerateCode(ITextTemplatingEngineHost host, string content, string name, string generatorNewline)
        {
            ParsedTemplate pt = ParsedTemplate.FromText(content, host);

            if (pt.Errors.HasErrors)
            {
                host.LogErrors(pt.Errors);
                return(null);
            }

            TemplateSettings settings = TemplatingEngine.GetSettings(host, pt);

            if (name != null)
            {
                settings.Name = name;
            }
            if (pt.Errors.HasErrors)
            {
                host.LogErrors(pt.Errors);
                return(null);
            }

            var ccu = TemplatingEngine.GenerateCompileUnit(host, content, pt, settings);

            if (pt.Errors.HasErrors)
            {
                host.LogErrors(pt.Errors);
                return(null);
            }

            var opts = new System.CodeDom.Compiler.CodeGeneratorOptions();

            using (var writer = new System.IO.StringWriter())
            {
                writer.NewLine = generatorNewline;
                settings.Provider.GenerateCodeFromCompileUnit(ccu, writer, opts);
                return(writer.ToString());
            }
        }
        public void GenerateCode(CodeDomGenerator.Language language)
        {
            switch (language)
            {
            case CodeDomGenerator.Language.CSharp:
                if (_csStatement != null)
                {
                    using (Microsoft.CSharp.CSharpCodeProvider provider = new Microsoft.CSharp.CSharpCodeProvider())
                    {
                        System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions();
                        using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString))
                        {
                            provider.GenerateCodeFromStatement(_csStatement, tw, opts);
                            Value = tw.InnerWriter.ToString();
                        }
                    }
                }
                break;

            case CodeDomGenerator.Language.VB:
                if (_vbStatement != null)
                {
                    using (Microsoft.VisualBasic.VBCodeProvider provider = new Microsoft.VisualBasic.VBCodeProvider())
                    {
                        System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions();
                        using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString))
                        {
                            provider.GenerateCodeFromStatement(_vbStatement, tw, opts);
                            Value = tw.InnerWriter.ToString();
                        }
                    }
                }
                break;

            default:
                throw new NotImplementedException(language.ToString());
            }
        }
        /// <summary>
        /// Updates the cli types.
        /// </summary>
        /// <returns>
        /// Returns whether or not any files were added to the project.
        /// </returns>
        /// <param name='monitor'>
        /// A progress monitor.
        /// </param>
        /// <param name='context'>
        /// A sync-back context.
        /// </param>
        /// <param name='typesAdded'>
        /// An output variable specifying whether or not any types were added to the project.
        /// </param>
        bool UpdateCliTypes(IProgressMonitor monitor, XcodeSyncBackContext context, out bool typesAdded)
        {
            var provider = dnp.LanguageBinding.GetCodeDomProvider();
            var options  = new System.CodeDom.Compiler.CodeGeneratorOptions();
            var writer   = MonoDevelop.DesignerSupport.CodeBehindWriter.CreateForProject(
                new MonoDevelop.Core.ProgressMonitoring.NullProgressMonitor(), dnp);

            monitor.BeginTask(GettextCatalog.GetString("Detecting changes made in Xcode"), 0);
            Dictionary <string, NSObjectTypeInfo> newTypes;
            Dictionary <string, ProjectFile>      newFiles;
            var updates = context.GetTypeUpdates(monitor, provider, out newTypes, out newFiles);

            if ((updates == null || updates.Count == 0) && newTypes == null && newFiles == null)
            {
                monitor.Log.WriteLine("No changes found");
                monitor.EndTask();
                typesAdded = false;
                return(false);
            }

            monitor.Log.WriteLine("Found {0} changed types", updates.Count);
            monitor.EndTask();

            int count = updates.Count + (newTypes != null ? newTypes.Count : 0);

            monitor.BeginTask(GettextCatalog.GetString("Updating types in MonoDevelop"), count);

            // First, add new types...
            if (newTypes != null && newTypes.Count > 0)
            {
                foreach (var nt in newTypes)
                {
                    if (provider is Microsoft.CSharp.CSharpCodeProvider)
                    {
                        var cs = new CSharpCodeTypeDefinition()
                        {
                            WrapperNamespace = infoService.WrapperRoot,
                            Provider         = provider,
                            Type             = nt.Value,
                        };

                        string baseDir = Path.GetDirectoryName(nt.Key);
                        if (!Directory.Exists(baseDir))
                        {
                            Directory.CreateDirectory(baseDir);
                        }

                        writer.WriteFile(nt.Key, cs.TransformText());
                    }
                    else
                    {
                        // FIXME: implement support for non-C# languages
                    }

                    monitor.Step(1);
                }

                typesAdded = true;
            }
            else
            {
                typesAdded = false;
            }

            // Next, generate the designer files for any added/changed types
            foreach (var df in updates)
            {
                monitor.Log.WriteLine("Syncing {0} types from Xcode to file '{1}'", df.Value.Count, df.Key);
                if (provider is Microsoft.CSharp.CSharpCodeProvider)
                {
                    var cs = new CSharpCodeCodebehind()
                    {
                        Types            = df.Value,
                        WrapperNamespace = infoService.WrapperRoot,
                        Provider         = provider,
                    };
                    writer.WriteFile(df.Key, cs.TransformText());
                }
                else
                {
                    var ccu = GenerateCompileUnit(provider, options, df.Key, df.Value);
                    writer.WriteFile(df.Key, ccu);
                }

                monitor.Step(1);
            }

            writer.WriteOpenFiles();

            // Update sync timestamps
            foreach (var df in updates)
            {
                foreach (var type in df.Value)
                {
                    context.SetSyncTimeToNow(type.ObjCName + ".h");
                    context.SetSyncTimeToNow(type.ObjCName + ".m");
                }
            }

            // Add new files to the DotNetProject
            if (newFiles != null)
            {
                foreach (var f in newFiles)
                {
                    monitor.Log.WriteLine("Added new designer file {0}", f.Key);
                    dnp.AddFile(f.Value);
                }
            }

            monitor.EndTask();

            return(newFiles != null && newFiles.Count > 0);
        }
        /// <summary>
        /// Adds the custom classes from user interface definition files.
        /// </summary>
        /// <returns>
        /// <c>true</c> if new types were added to the project, or <c>false</c> otherwise.
        /// </returns>
        /// <param name='monitor'>
        /// A progress monitor.
        /// </param>
        /// <param name='context'>
        /// A sync-back context.
        /// </param>
        bool AddCustomClassesFromUIDefinitionFiles(IProgressMonitor monitor, XcodeSyncBackContext context)
        {
            var provider = dnp.LanguageBinding.GetCodeDomProvider();
            var options  = new System.CodeDom.Compiler.CodeGeneratorOptions();
            var writer   = MonoDevelop.DesignerSupport.CodeBehindWriter.CreateForProject(
                new MonoDevelop.Core.ProgressMonitoring.NullProgressMonitor(), dnp);
            bool addedTypes = false;

            monitor.BeginTask(GettextCatalog.GetString("Generating custom classes defined in UI definition files"), 0);

            // Collect our list of custom classes from UI definition files
            foreach (var job in context.FileSyncJobs)
            {
                if (!HasInterfaceDefinitionExtension(job.Original))
                {
                    continue;
                }

                string relative = job.SyncedRelative.ParentDirectory;
                string dir      = dnp.BaseDirectory;

                if (!string.IsNullOrEmpty(relative))
                {
                    dir = Path.Combine(dir, relative);
                }

                foreach (var type in GetCustomTypesFromUIDefinition(job.Original))
                {
                    if (context.ProjectInfo.ContainsType(type.ObjCName))
                    {
                        continue;
                    }

                    string designerPath = Path.Combine(dir, type.ObjCName + ".designer." + provider.FileExtension);
                    string path         = Path.Combine(dir, type.ObjCName + "." + provider.FileExtension);
                    string ns           = dnp.GetDefaultNamespace(path);

                    type.CliName = ns + "." + provider.CreateValidIdentifier(type.ObjCName);

                    if (provider is Microsoft.CSharp.CSharpCodeProvider)
                    {
                        CodebehindTemplateBase cs = new CSharpCodeTypeDefinition()
                        {
                            WrapperNamespace = infoService.WrapperRoot,
                            Provider         = provider,
                            Type             = type,
                        };

                        writer.WriteFile(path, cs.TransformText());

                        List <NSObjectTypeInfo> types = new List <NSObjectTypeInfo> ();
                        types.Add(type);

                        cs = new CSharpCodeCodebehind()
                        {
                            WrapperNamespace = infoService.WrapperRoot,
                            Provider         = provider,
                            Types            = types,
                        };

                        writer.WriteFile(designerPath, cs.TransformText());

                        context.ProjectInfo.InsertUpdatedType(type);
                    }
                    else
                    {
                        // FIXME: implement support for non-C# languages
                    }

                    dnp.AddFile(new ProjectFile(path));
                    dnp.AddFile(new ProjectFile(designerPath)
                    {
                        DependsOn = path
                    });
                    addedTypes = true;
                }
            }

            writer.WriteOpenFiles();

            monitor.EndTask();

            return(addedTypes);
        }
Example #35
0
		/// <summary>
		/// Updates the cli types.
		/// </summary>
		/// <returns>
		/// Returns whether or not any files were added to the project.
		/// </returns>
		/// <param name='monitor'>
		/// A progress monitor.
		/// </param>
		/// <param name='context'>
		/// A sync-back context.
		/// </param>
		/// <param name='typesAdded'>
		/// An output variable specifying whether or not any types were added to the project.
		/// </param>
		bool UpdateCliTypes (IProgressMonitor monitor, XcodeSyncBackContext context, out bool typesAdded)
		{
			var provider = dnp.LanguageBinding.GetCodeDomProvider ();
			var options = new System.CodeDom.Compiler.CodeGeneratorOptions ();
			var writer = MonoDevelop.DesignerSupport.CodeBehindWriter.CreateForProject (
				new MonoDevelop.Core.ProgressMonitoring.NullProgressMonitor (), dnp);
			
			monitor.BeginTask (GettextCatalog.GetString ("Detecting changes made in Xcode to custom user types..."), 0);
			Dictionary<string, NSObjectTypeInfo> newTypes;
			Dictionary<string, ProjectFile> newFiles;
			var updates = context.GetTypeUpdates (monitor, provider, out newTypes, out newFiles);
			if ((updates == null || updates.Count == 0) && newTypes == null && newFiles == null) {
				monitor.Log.WriteLine ("No changes found.");
				monitor.EndTask ();
				typesAdded = false;
				return false;
			}
			monitor.EndTask ();
			
			int count = updates.Count + (newTypes != null ? newTypes.Count : 0);
			monitor.BeginTask (GettextCatalog.GetString ("Updating custom user types in MonoDevelop..."), count);
			
			// First, add new types...
			if (newTypes != null && newTypes.Count > 0) {
				foreach (var nt in newTypes) {
					monitor.Log.WriteLine ("Adding new type: {0}", nt.Value.CliName);
					
					if (provider is Microsoft.CSharp.CSharpCodeProvider) {
						var cs = new CSharpCodeTypeDefinition () {
							WrapperNamespace = infoService.WrapperRoot,
							Provider = provider,
							Type = nt.Value,
						};
						
						string baseDir = Path.GetDirectoryName (nt.Key);
						if (!Directory.Exists (baseDir))
							Directory.CreateDirectory (baseDir);
						
						writer.WriteFile (nt.Key, cs.TransformText ());
					} else {
						// FIXME: implement support for non-C# languages
					}
					
					monitor.Step (1);
				}
				
				typesAdded = true;
			} else {
				typesAdded = false;
			}
			
			// Next, generate the designer files for any added/changed types
			foreach (var df in updates) {
				monitor.Log.WriteLine ("Generating designer file: {0}", df.Key);
				if (provider is Microsoft.CSharp.CSharpCodeProvider) {
					var cs = new CSharpCodeCodebehind () {
						Types = df.Value,
						WrapperNamespace = infoService.WrapperRoot,
						Provider = provider,
					};
					writer.WriteFile (df.Key, cs.TransformText ());
				} else {
					var ccu = GenerateCompileUnit (provider, options, df.Key, df.Value);
					writer.WriteFile (df.Key, ccu);
				}
				
				monitor.Step (1);
			}
			
			writer.WriteOpenFiles ();
			
			// Update sync timestamps
			foreach (var df in updates) {
				foreach (var type in df.Value)
					context.SetSyncTime (type.ObjCName + ".h", DateTime.Now);
			}
			
			// Add new files to the DotNetProject
			if (newFiles != null) {
				foreach (var f in newFiles) {
					monitor.Log.WriteLine ("Added new designer file: {0}", f.Key);
					dnp.AddFile (f.Value);
				}
			}
			
			monitor.EndTask ();
			
			return newFiles != null && newFiles.Count > 0;
		}
Example #36
0
		/// <summary>
		/// Adds the custom classes from user interface definition files.
		/// </summary>
		/// <returns>
		/// <c>true</c> if new types were added to the project, or <c>false</c> otherwise.
		/// </returns>
		/// <param name='monitor'>
		/// A progress monitor.
		/// </param>
		/// <param name='context'>
		/// A sync-back context.
		/// </param>
		bool AddCustomClassesFromUIDefinitionFiles (IProgressMonitor monitor, XcodeSyncBackContext context)
		{
			var provider = dnp.LanguageBinding.GetCodeDomProvider ();
			var options = new System.CodeDom.Compiler.CodeGeneratorOptions ();
			var writer = MonoDevelop.DesignerSupport.CodeBehindWriter.CreateForProject (
				new MonoDevelop.Core.ProgressMonitoring.NullProgressMonitor (), dnp);
			bool addedTypes = false;
			bool beganTask = false;
			
			// Collect our list of custom classes from UI definition files
			foreach (var job in context.FileSyncJobs) {
				if (!HasInterfaceDefinitionExtension (job.Original))
					continue;
				
				if (!beganTask) {
					monitor.BeginTask (GettextCatalog.GetString ("Generating custom classes defined in UI definition files..."), 0);
					beganTask = true;
				}
				
				string relative = job.SyncedRelative.ParentDirectory;
				string dir = dnp.BaseDirectory;
				
				if (!string.IsNullOrEmpty (relative))
					dir = Path.Combine (dir, relative);
				
				foreach (var type in GetCustomTypesFromUIDefinition (job.Original)) {
					if (context.ProjectInfo.ContainsType (type.ObjCName))
						continue;
					
					string designerPath = Path.Combine (dir, type.ObjCName + ".designer." + provider.FileExtension);
					string path = Path.Combine (dir, type.ObjCName + "." + provider.FileExtension);
					string ns = dnp.GetDefaultNamespace (path);
					
					type.CliName = ns + "." + provider.CreateValidIdentifier (type.ObjCName);
					
					if (provider is Microsoft.CSharp.CSharpCodeProvider) {
						CodebehindTemplateBase cs = new CSharpCodeTypeDefinition () {
							WrapperNamespace = infoService.WrapperRoot,
							Provider = provider,
							Type = type,
						};
						
						writer.WriteFile (path, cs.TransformText ());
						
						List<NSObjectTypeInfo> types = new List<NSObjectTypeInfo> ();
						types.Add (type);
						
						cs = new CSharpCodeCodebehind () {
							WrapperNamespace = infoService.WrapperRoot,
							Provider = provider,
							Types = types,
						};
						
						writer.WriteFile (designerPath, cs.TransformText ());
						
						context.ProjectInfo.InsertUpdatedType (type);
					} else {
						// FIXME: implement support for non-C# languages
					}
					
					dnp.AddFile (new ProjectFile (path));
					dnp.AddFile (new ProjectFile (designerPath) { DependsOn = path });
					addedTypes = true;
				}
			}
			
			writer.WriteOpenFiles ();
			
			if (beganTask)
				monitor.EndTask ();
			
			return addedTypes;
		}
        public void GenerateCode(CodeDomGenerator.Language language)
        {
            switch (language)
            {
                case CodeDomGenerator.Language.CSharp:
                    using (Microsoft.CSharp.CSharpCodeProvider provider = new Microsoft.CSharp.CSharpCodeProvider())
                    {
                        System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions();
                        using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString))
                        {
                            if (_params.Count != 1 || _params[0].Type != null)
                                tw.Write("(");

                            for (int i = 0; i < _params.Count; i++)
                            {
                                if (i > 0)
                                    tw.Write(", ");

                                if (_params[i].Type != null)
                                {
                                    provider.GenerateCodeFromExpression(new CodeTypeReferenceExpression(_params[i].Type), tw, opts);
                                    tw.Write(" ");
                                }

                                tw.Write(_params[i].Name);
                            }

                            if (_params.Count != 1 || _params[0].Type != null)
                                tw.Write(")");

                            tw.Write(" => ");
                            provider.GenerateCodeFromExpression(Expression, tw, opts);
                            Value = tw.InnerWriter.ToString();
                        }
                    }
                    break;
                case CodeDomGenerator.Language.VB:
                    using (Microsoft.VisualBasic.VBCodeProvider provider = new Microsoft.VisualBasic.VBCodeProvider())
                    {
                        System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions();
                        using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString))
                        {
                            tw.Write("Function(");

                            for (int i = 0; i < _params.Count; i++)
                            {
                                if (i > 0)
                                    tw.Write(", ");

                                tw.Write(_params[i].Name);

                                if (_params[i].Type != null)
                                {
                                    tw.Write(" As ");
                                    provider.GenerateCodeFromExpression(new CodeTypeReferenceExpression(_params[i].Type), tw, opts);
                                }
                            }

                            tw.Write(") ");
                            provider.GenerateCodeFromExpression(Expression, tw, opts);
                            Value = tw.InnerWriter.ToString();
                        }
                    }
                    break;
                default:
                    throw new NotImplementedException(language.ToString());
            }
        }
		void UpdateCliTypes (IProgressMonitor monitor, XcodeSyncBackContext context)
		{
			
			var provider = dnp.LanguageBinding.GetCodeDomProvider ();
			var options = new System.CodeDom.Compiler.CodeGeneratorOptions ();
			var writer = MonoDevelop.DesignerSupport.CodeBehindWriter.CreateForProject (
				new MonoDevelop.Core.ProgressMonitoring.NullProgressMonitor (), dnp);
			
			monitor.BeginTask (GettextCatalog.GetString ("Detecting changed types from Xcode"), 0);
			Dictionary<string,ProjectFile> newFiles;
			var updates = context.GetTypeUpdates (out newFiles);
			if (updates == null || updates.Count == 0) {
				monitor.Log.WriteLine ("No changed types found");
				monitor.EndTask ();
				return;
			}
			monitor.Log.WriteLine ("Found {0} changed types", updates.Count);
			monitor.EndTask ();
			
			monitor.BeginTask (GettextCatalog.GetString ("Updating types in MonoDevelop"), updates.Count);
			foreach (var df in updates) {
				monitor.Log.WriteLine ("Syncing {0} types from Xcode to file '{1}'", df.Value.Count, df.Key);
				if (provider is Microsoft.CSharp.CSharpCodeProvider) {
					var cs = new CSharpCodeCodebehind () {
						Types = df.Value,
						WrapperNamespace = infoService.WrapperRoot,
						Provider = provider,
					};
					writer.WriteFile (df.Key, cs.TransformText ());
				} else {
					var ccu = GenerateCompileUnit (provider, options, df.Key, df.Value);
					writer.WriteFile (df.Key, ccu);
				}
				monitor.Step (1);
			}
			writer.WriteOpenFiles ();
			
			foreach (var df in updates) {
				foreach (var type in df.Value) {
					context.SetSyncTimeToNow (type.ObjCName + ".h");
					context.SetSyncTimeToNow (type.ObjCName + ".m");
				}
			}
			
			foreach (var job in context.TypeSyncJobs) {
				context.ProjectInfo.InsertUpdatedType (job.Type);
			}
			
			if (newFiles != null) {
				foreach (var f in newFiles) {
					monitor.Log.WriteLine ("Added new designer file {0}", f.Key);
					dnp.AddFile (f.Value);
				}
				monitor.Log.WriteLine ("Saving project '{0}'", dnp.Name);
				Ide.IdeApp.ProjectOperations.Save (dnp);
			}
			monitor.EndTask ();
		}
        public void GenerateCode(CodeDomGenerator.Language language)
        {
            if (_left == null) return;

            switch (language)
            {
                case CodeDomGenerator.Language.CSharp:
                    using (Microsoft.CSharp.CSharpCodeProvider provider = new Microsoft.CSharp.CSharpCodeProvider())
                    {
                        System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions();
                        using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString))
                        {
                            provider.GenerateCodeFromExpression(_left, tw, opts);
                            if (_right != null)
                            {
                                tw.Write(_separator);
                                provider.GenerateCodeFromExpression(_right, tw, opts);
                            }
                            Value = tw.InnerWriter.ToString();
                        }
                    }
                    break;
                case CodeDomGenerator.Language.VB:
                    using (Microsoft.VisualBasic.VBCodeProvider provider = new Microsoft.VisualBasic.VBCodeProvider())
                    {
                        System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions();
                        using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString))
                        {
                            provider.GenerateCodeFromExpression(_left, tw, opts);
                            if (_right != null)
                            {
                                tw.Write(_separator);
                                provider.GenerateCodeFromExpression(_right, tw, opts);
                            }
                            Value = tw.InnerWriter.ToString();
                        }
                    }
                    break;
                default:
                    throw new NotImplementedException(language.ToString());
            }
        }
Example #40
0
        public static void Main(string[] args)
        {
            string directory   = "../../NRefactory/Project/Src/Ast/";
            string visitorsDir = "../../NRefactory/Project/Src/Visitors/";

            Console.WriteLine("AST Generator running...");
            if (!File.Exists(directory + "INode.cs"))
            {
                Console.WriteLine("did not find output directory " + Path.GetFullPath(Path.GetDirectoryName(directory)));
                return;
            }
            if (!File.Exists(visitorsDir + "AbstractAstTransformer.cs"))
            {
                Console.WriteLine("did not find visitor output directory");
                return;
            }

            List <Type> nodeTypes = new List <Type>();

            foreach (Type type in typeof(MainClass).Assembly.GetTypes())
            {
                if (type.IsClass && typeof(INode).IsAssignableFrom(type))
                {
                    nodeTypes.Add(type);
                }
            }
            nodeTypes.Sort(delegate(Type a, Type b) { return(a.Name.CompareTo(b.Name)); });

            CodeCompileUnit ccu = new CodeCompileUnit();
            CodeNamespace   cns = ccu.AddNamespace("ICSharpCode.NRefactory.Ast");

            cns.AddImport("System");
            cns.AddImport("System.Collections.Generic");
            cns.AddImport("AgentRalph.Visitors");
            foreach (Type type in nodeTypes)
            {
                if (type.GetCustomAttributes(typeof(CustomImplementationAttribute), false).Length == 0)
                {
                    CodeTypeDeclaration ctd = cns.AddType(type.Name);
                    if (type.IsAbstract)
                    {
                        ctd.TypeAttributes |= TypeAttributes.Abstract;
                    }
                    ctd.IsPartial = true;
                    ctd.BaseTypes.Add(new CodeTypeReference(type.BaseType.Name));

                    ProcessType(type, ctd);

                    foreach (object o in type.GetCustomAttributes(false))
                    {
                        if (o is TypeImplementationModifierAttribute)
                        {
                            (o as TypeImplementationModifierAttribute).ModifyImplementation(cns, ctd, type);
                        }
                    }

                    if (!type.IsAbstract)
                    {
                        AddAnAcceptVisitorMethod(type, ctd, "IAstVisitor", typeof(object));

                        // Create an overload
                        AddAnAcceptVisitorMethod(type, ctd, "AstComparisonVisitor", typeof(bool));

                        AddAChillunsGetter(type, ctd);

                        var method = new CodeMemberMethod();
                        method.Name       = "ToString";
                        method.Attributes = MemberAttributes.Public | MemberAttributes.Override;
                        method.ReturnType = new CodeTypeReference(typeof(string));
                        method.Statements.Add(new CodeMethodReturnStatement(CreateToString(type)));
                        ctd.Members.Add(method);
                    }
                }
            }

            System.CodeDom.Compiler.CodeGeneratorOptions settings = new System.CodeDom.Compiler.CodeGeneratorOptions();
            settings.IndentString  = "\t";
            settings.VerbatimOrder = true;

            using (StringWriter writer = new StringWriter()) {
                new Microsoft.CSharp.CSharpCodeProvider().GenerateCodeFromCompileUnit(ccu, writer, settings);
                File.WriteAllText(directory + "Generated.cs", writer.ToString());
            }

            ccu = new CodeCompileUnit();
            cns = ccu.AddNamespace("ICSharpCode.NRefactory");
            cns.AddImport("System");
            cns.AddImport("ICSharpCode.NRefactory.Ast");
            cns.Types.Add(CreateAstVisitorInterface(nodeTypes));

            using (StringWriter writer = new StringWriter()) {
                new Microsoft.CSharp.CSharpCodeProvider().GenerateCodeFromCompileUnit(ccu, writer, settings);
                File.WriteAllText(visitorsDir + "../IAstVisitor.cs", writer.ToString());
            }

            // My modifications to the generation process are not preserving the creation of these particular files.
            // So I just don't regenerate them for the time being.
//			ccu = new CodeCompileUnit();
//			cns = ccu.AddNamespace("ICSharpCode.NRefactory.Visitors");
//			cns.AddImport("System");
//			cns.AddImport("System.Collections.Generic");
//			cns.AddImport("System.Diagnostics");
//			cns.AddImport("ICSharpCode.NRefactory.Ast");
//			cns.Types.Add(CreateAstVisitorClass(nodeTypes, false));
//
//			using (StringWriter writer = new StringWriter()) {
//				new Microsoft.CSharp.CSharpCodeProvider().GenerateCodeFromCompileUnit(ccu, writer, settings);
//				File.WriteAllText(visitorsDir + "AbstractAstVisitor.cs", writer.ToString());
//			}
//
//			ccu = new CodeCompileUnit();
//			cns = ccu.AddNamespace("ICSharpCode.NRefactory.Visitors");
//			cns.AddImport("System");
//			cns.AddImport("System.Collections.Generic");
//			cns.AddImport("System.Diagnostics");
//			cns.AddImport("ICSharpCode.NRefactory.Ast");
//			cns.Types.Add(CreateAstVisitorClass(nodeTypes, true));
//
//			using (StringWriter writer = new StringWriter()) {
//				new Microsoft.CSharp.CSharpCodeProvider().GenerateCodeFromCompileUnit(ccu, writer, settings);
//				File.WriteAllText(visitorsDir + "AbstractAstTransformer.cs", writer.ToString());
//			}

            ccu = new CodeCompileUnit();
            cns = ccu.AddNamespace("ICSharpCode.NRefactory.Visitors");
            cns.AddImport("System");
            cns.AddImport("ICSharpCode.NRefactory.Ast");
            cns.Types.Add(CreateNodeTrackingAstVisitorClass(nodeTypes));

            using (StringWriter writer = new StringWriter()) {
                new Microsoft.CSharp.CSharpCodeProvider().GenerateCodeFromCompileUnit(ccu, writer, settings);
                // CodeDom cannot output "sealed", so we need to use this hack:
                File.WriteAllText(visitorsDir + "NodeTrackingAstVisitor.cs",
                                  writer.ToString().Replace("public override object", "public sealed override object"));
            }

            //NotImplementedAstVisitor
            ccu = new CodeCompileUnit();
            cns = ccu.AddNamespace("ICSharpCode.NRefactory.Visitors");
            cns.AddImport("System");
            cns.AddImport("ICSharpCode.NRefactory.Ast");
            cns.Types.Add(CreateNotImplementedAstVisitorClass(nodeTypes));

            using (StringWriter writer = new StringWriter()) {
                new Microsoft.CSharp.CSharpCodeProvider().GenerateCodeFromCompileUnit(ccu, writer, settings);
                File.WriteAllText(visitorsDir + "NotImplementedAstVisitor.cs", writer.ToString());
            }


            // TwoTreeAbstractAstVisitor
            ccu = new CodeCompileUnit();
            cns = ccu.AddNamespace("AgentRalph.Visitors");
            cns.AddImport("System");
            cns.AddImport("System.Collections.Generic");
            cns.AddImport("System.Diagnostics");
            cns.AddImport("ICSharpCode.NRefactory.Ast");
            cns.AddImport("ICSharpCode.NRefactory");
            cns.Types.Add(CreateAstComparisonVisitorClass(nodeTypes));

            using (StringWriter writer = new StringWriter())
            {
                new Microsoft.CSharp.CSharpCodeProvider().GenerateCodeFromCompileUnit(ccu, writer, settings);
                // Put it in the NRefactor project
                var path = visitorsDir + "AstComparisonVisitor.Generated.cs";
                File.WriteAllText(path, writer.ToString());
                Console.WriteLine("Created file " + path);
            }



            Console.WriteLine("AST Generator done!");
        }
Example #41
0
		public static void Main(string[] args)
		{
			string directory = "../../../ICSharpCode.NRefactory.VB/Ast/";
			string visitorsDir = "../../../ICSharpCode.NRefactory.VB/Visitors/";
			
			Debug.WriteLine("AST Generator running...");
			if (!File.Exists(directory + "INode.cs")) {
				Debug.WriteLine("did not find output directory");
				return;
			}
			if (!File.Exists(visitorsDir + "AbstractAstTransformer.cs")) {
				Debug.WriteLine("did not find visitor output directory");
				return;
			}
			
			List<Type> nodeTypes = new List<Type>();
			foreach (Type type in typeof(MainClass).Assembly.GetTypes()) {
				if (type.IsClass && typeof(INode).IsAssignableFrom(type)) {
					nodeTypes.Add(type);
				}
			}
			nodeTypes.Sort(delegate(Type a, Type b) { return a.Name.CompareTo(b.Name); });
			
			CodeCompileUnit ccu = new CodeCompileUnit();
			CodeNamespace cns = ccu.AddNamespace("ICSharpCode.NRefactory.VB.Ast");
			cns.AddImport("System");
			cns.AddImport("System.Collections.Generic");
			foreach (Type type in nodeTypes) {
				if (type.GetCustomAttributes(typeof(CustomImplementationAttribute), false).Length == 0) {
					CodeTypeDeclaration ctd = cns.AddType(type.Name);
					if (type.IsAbstract) {
						ctd.TypeAttributes |= TypeAttributes.Abstract;
					}
					ctd.BaseTypes.Add(new CodeTypeReference(type.BaseType.Name));
					
					ProcessType(type, ctd);
					
					foreach (object o in type.GetCustomAttributes(false)) {
						if (o is TypeImplementationModifierAttribute) {
							(o as TypeImplementationModifierAttribute).ModifyImplementation(cns, ctd, type);
						}
					}
					
					if (!type.IsAbstract) {
						CodeMemberMethod method = new CodeMemberMethod();
						method.Name = "AcceptVisitor";
						method.Attributes = MemberAttributes.Public | MemberAttributes.Override;
						method.Parameters.Add(new CodeParameterDeclarationExpression("IAstVisitor", "visitor"));
						method.Parameters.Add(new CodeParameterDeclarationExpression(typeof(object), "data"));
						method.ReturnType = new CodeTypeReference(typeof(object));
						CodeExpression ex = new CodeVariableReferenceExpression("visitor");
						ex = new CodeMethodInvokeExpression(ex, VisitPrefix + ctd.Name,
						                                    new CodeThisReferenceExpression(),
						                                    new CodeVariableReferenceExpression("data"));
						method.Statements.Add(new CodeMethodReturnStatement(ex));
						ctd.Members.Add(method);
						
						method = new CodeMemberMethod();
						method.Name = "ToString";
						method.Attributes = MemberAttributes.Public | MemberAttributes.Override;
						method.ReturnType = new CodeTypeReference(typeof(string));
						method.Statements.Add(new CodeMethodReturnStatement(CreateToString(type)));
						ctd.Members.Add(method);
					}
				}
			}
			
			System.CodeDom.Compiler.CodeGeneratorOptions settings = new System.CodeDom.Compiler.CodeGeneratorOptions();
			settings.IndentString = "\t";
			settings.VerbatimOrder = true;
			
			using (StringWriter writer = new StringWriter()) {
				new Microsoft.CSharp.CSharpCodeProvider().GenerateCodeFromCompileUnit(ccu, writer, settings);
				File.WriteAllText(directory + "Generated.cs", NormalizeNewLines(writer));
			}
			
			ccu = new CodeCompileUnit();
			cns = ccu.AddNamespace("ICSharpCode.NRefactory.VB");
			cns.AddImport("System");
			cns.AddImport("ICSharpCode.NRefactory.VB.Ast");
			cns.Types.Add(CreateAstVisitorInterface(nodeTypes));
			
			using (StringWriter writer = new StringWriter()) {
				new Microsoft.CSharp.CSharpCodeProvider().GenerateCodeFromCompileUnit(ccu, writer, settings);
				File.WriteAllText(visitorsDir + "../IAstVisitor.cs", NormalizeNewLines(writer));
			}
			
			ccu = new CodeCompileUnit();
			cns = ccu.AddNamespace("ICSharpCode.NRefactory.VB.Visitors");
			cns.AddImport("System");
			cns.AddImport("System.Collections.Generic");
			cns.AddImport("System.Diagnostics");
			cns.AddImport("ICSharpCode.NRefactory.VB.Ast");
			cns.Types.Add(CreateAstVisitorClass(nodeTypes, false));
			
			using (StringWriter writer = new StringWriter()) {
				new Microsoft.CSharp.CSharpCodeProvider().GenerateCodeFromCompileUnit(ccu, writer, settings);
				File.WriteAllText(visitorsDir + "AbstractAstVisitor.cs", NormalizeNewLines(writer));
			}
			
			ccu = new CodeCompileUnit();
			cns = ccu.AddNamespace("ICSharpCode.NRefactory.VB.Visitors");
			cns.AddImport("System");
			cns.AddImport("System.Collections.Generic");
			cns.AddImport("System.Diagnostics");
			cns.AddImport("ICSharpCode.NRefactory.VB.Ast");
			cns.Types.Add(CreateAstVisitorClass(nodeTypes, true));
			
			using (StringWriter writer = new StringWriter()) {
				new Microsoft.CSharp.CSharpCodeProvider().GenerateCodeFromCompileUnit(ccu, writer, settings);
				File.WriteAllText(visitorsDir + "AbstractAstTransformer.cs", NormalizeNewLines(writer));
			}
			
			ccu = new CodeCompileUnit();
			cns = ccu.AddNamespace("ICSharpCode.NRefactory.VB.Visitors");
			cns.AddImport("System");
			cns.AddImport("ICSharpCode.NRefactory.VB.Ast");
			cns.Types.Add(CreateNodeTrackingAstVisitorClass(nodeTypes));
			
			using (StringWriter writer = new StringWriter()) {
				new Microsoft.CSharp.CSharpCodeProvider().GenerateCodeFromCompileUnit(ccu, writer, settings);
				// CodeDom cannot output "sealed", so we need to use this hack:
				File.WriteAllText(visitorsDir + "NodeTrackingAstVisitor.cs",
				                  NormalizeNewLines(writer).Replace("public override object", "public sealed override object"));
			}
			
			//NotImplementedAstVisitor
			ccu = new CodeCompileUnit();
			cns = ccu.AddNamespace("ICSharpCode.NRefactory.VB.Visitors");
			cns.AddImport("System");
			cns.AddImport("ICSharpCode.NRefactory.VB.Ast");
			cns.Types.Add(CreateNotImplementedAstVisitorClass(nodeTypes));
			
			using (StringWriter writer = new StringWriter()) {
				new Microsoft.CSharp.CSharpCodeProvider().GenerateCodeFromCompileUnit(ccu, writer, settings);
				File.WriteAllText(visitorsDir + "NotImplementedAstVisitor.cs", NormalizeNewLines(writer));
			}
			Debug.WriteLine("DOM Generator done!");
			
			Debug.WriteLine("start keyword list generation...");
			
			KeywordGenerator.Generate();
			
			Debug.WriteLine("keyword list generation done!");
		}
        public void GenerateCode(CodeDomGenerator.Language language)
        {
            switch (language)
            {
                case CodeDomGenerator.Language.CSharp:
                    using (Microsoft.CSharp.CSharpCodeProvider provider = new Microsoft.CSharp.CSharpCodeProvider())
                    {
                        System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions();
                        using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString))
                        {

                            tw.Write("foreach (");
                            provider.GenerateCodeFromExpression(new CodeTypeReferenceExpression(IterationItemType), tw, opts);
                            tw.Write(" {0} in ", provider.CreateValidIdentifier(IterationItemName));
                            provider.GenerateCodeFromExpression(IterExpression, tw, opts);
                            tw.WriteLine(")");
                            tw.WriteLine("{");
                            tw.Indent++;
                            if (Statements != null)
                                foreach (CodeStatement statement in Statements)
                                {
                                    provider.GenerateCodeFromStatement(statement, tw, opts);
                                }
                            tw.Indent--;
                            tw.WriteLine("}");
                            Value = tw.InnerWriter.ToString();
                        }
                    }
                    break;
                case CodeDomGenerator.Language.VB:
                    using (Microsoft.VisualBasic.VBCodeProvider provider = new Microsoft.VisualBasic.VBCodeProvider())
                    {
                        System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions();
                        using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString))
                        {
                            tw.Write("For Each {0} As ", provider.CreateValidIdentifier(IterationItemName));
                            provider.GenerateCodeFromExpression(new CodeTypeReferenceExpression(IterationItemType), tw, opts);
                            tw.Write(" in ");
                            provider.GenerateCodeFromExpression(IterExpression, tw, opts);
                            tw.WriteLine();
                            tw.Indent++;
                            if (Statements != null)
                                foreach (CodeStatement statement in Statements)
                                {
                                    provider.GenerateCodeFromStatement(statement, tw, opts);
                                }
                            tw.Indent--;
                            tw.WriteLine("Next");
                            Value = tw.InnerWriter.ToString();
                        }
                    }
                    break;
                default:
                    throw new NotImplementedException(language.ToString());
            }
        }
        public void GenerateCode(CodeDomGenerator.Language language)
        {
            switch (language)
            {
                case CodeDomGenerator.Language.CSharp:
                    using (Microsoft.CSharp.CSharpCodeProvider provider = new Microsoft.CSharp.CSharpCodeProvider())
                    {
                        System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions();
                        using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString))
                        {

                            tw.Write("switch (");
                            if (SwitchExpression != null)
                                provider.GenerateCodeFromExpression(SwitchExpression, tw, opts);
                            tw.WriteLine(")");
                            tw.WriteLine("{");
                            tw.Indent++;
                            foreach (CaseBlock c in m_cases)
                            {
                                if (c.Statements != null)
                                {
                                    if (c.CaseExpression != null)
                                    {
                                        tw.Write("case ");
                                        provider.GenerateCodeFromExpression(c.CaseExpression, tw, opts);
                                        tw.WriteLine(":");
                                    }
                                    else
                                    {
                                        tw.WriteLine("default:");
                                    }

                                    tw.Indent++;
                                    foreach (CodeStatement stmt in c.Statements)
                                    {
                                        provider.GenerateCodeFromStatement(stmt, tw, opts);
                                    }
                                    tw.Indent--;
                                }
                                //else
                                //{
                                //    tw.Indent++;
                                //    tw.WriteLine("break;");
                                //    tw.Indent--;
                                //}
                            }
                            tw.Indent--;
                            tw.WriteLine("}");
                            Value = tw.InnerWriter.ToString();
                        }
                    }
                    break;
                case CodeDomGenerator.Language.VB:
                    using (Microsoft.VisualBasic.VBCodeProvider provider = new Microsoft.VisualBasic.VBCodeProvider())
                    {
                        System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions();
                        using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString))
                        {
                            tw.Write("Select Case ");
                            if (SwitchExpression != null)
                                provider.GenerateCodeFromExpression(SwitchExpression, tw, opts);
                            tw.WriteLine();
                            tw.Indent++;
                            foreach (CaseBlock c in m_cases)
                            {
                                if (c.Statements != null)
                                {
                                    if (c.CaseExpression != null)
                                    {
                                        tw.Write("Case ");
                                        provider.GenerateCodeFromExpression(c.CaseExpression, tw, opts);
                                        tw.WriteLine();
                                    }
                                    else
                                    {
                                        tw.WriteLine("Case Else");
                                    }

                                    tw.Indent++;
                                    for (int i = 0; i < c.Statements.Length; i++)
                                    {
                                        CodeStatement stmt = c.Statements[i];
                                        if (!(stmt is CodeExitSelectStatement) || i < c.Statements.Length-1)
                                            provider.GenerateCodeFromStatement(stmt, tw, opts);
                                    }
                                    tw.Indent--;
                                }
                                //else if (i < m_cases.Count - 1)
                                //{
                                //    tw.Indent++;
                                //    tw.WriteLine("Exit Select");
                                //    tw.Indent--;
                                //}
                            }
                            tw.Indent--;
                            tw.WriteLine("End Select");
                            Value = tw.InnerWriter.ToString();
                        }
                    }
                    break;
                default:
                    throw new NotImplementedException(language.ToString());
            }
        }
Example #44
0
        private static void GenerateCSCodeForServiceThread()
        {
            try
            {
                string outputFile = "WSDL-Output";

                MetadataExchangeClient mexClient = new MetadataExchangeClient(server.metaAddress, MetadataExchangeClientMode.HttpGet);
                mexClient.ResolveMetadataReferences = true;
                mexClient.OperationTimeout          = TimeSpan.FromSeconds(60);
                mexClient.MaximumResolvedReferences = 1000;

                MetadataSet metaDocs = mexClient.GetMetadata();

                WsdlImporter             importer  = new WsdlImporter(metaDocs);
                ServiceContractGenerator generator = new ServiceContractGenerator();

                // Add our custom DCAnnotationSurrogate
                // to write XSD annotations into the comments.
                object dataContractImporter;

                XsdDataContractImporter xsdDCImporter;
                if (!importer.State.TryGetValue(typeof(XsdDataContractImporter), out dataContractImporter))
                {
                    Console.WriteLine("Couldn't find the XsdDataContractImporter! Adding custom importer.");
                    xsdDCImporter         = new XsdDataContractImporter();
                    xsdDCImporter.Options = new ImportOptions();
                    importer.State.Add(typeof(XsdDataContractImporter), xsdDCImporter);
                }
                else
                {
                    xsdDCImporter = (XsdDataContractImporter)dataContractImporter;
                    if (xsdDCImporter.Options == null)
                    {
                        Console.WriteLine("There were no ImportOptions on the importer.");
                        xsdDCImporter.Options = new ImportOptions();
                    }
                }
                ////TODO: This is a customer implementation using the IDataContractSurrogate interface
                // xsdDCImporter.Options.DataContractSurrogate = new DCAnnotationSurrogate();

                // Uncomment the following code if you are going to do your work programmatically rather than add
                // the WsdlDocumentationImporters through a configuration file.

                /*
                 * // The following code inserts a custom WsdlImporter without removing the other
                 * // importers already in the collection.
                 * System.Collections.Generic.IEnumerable<IWsdlImportExtension> exts = importer.WsdlImportExtensions;
                 * System.Collections.Generic.List<IWsdlImportExtension> newExts
                 * = new System.Collections.Generic.List<IWsdlImportExtension>();
                 * foreach (IWsdlImportExtension ext in exts)
                 * {
                 * Console.WriteLine("Default WSDL import extensions: {0}", ext.GetType().Name);
                 * newExts.Add(ext);
                 * }
                 * newExts.Add(new WsdlDocumentationImporter());
                 * System.Collections.Generic.IEnumerable<IPolicyImportExtension> polExts = importer.PolicyImportExtensions;
                 * importer = new WsdlImporter(metaDocs, polExts, newExts);
                 */

                System.Collections.ObjectModel.Collection <ContractDescription> contracts = importer.ImportAllContracts();

                importer.ImportAllEndpoints();

                foreach (ContractDescription contract in contracts)
                {
                    generator.GenerateServiceContractType(contract);
                }

                if (generator.Errors.Count != 0)
                {
                    throw new Exception("There were errors during code compilation.");
                }

                // Write the code dom
                System.CodeDom.Compiler.CodeGeneratorOptions options = new System.CodeDom.Compiler.CodeGeneratorOptions();
                options.BracingStyle = "C";
                System.CodeDom.Compiler.CodeDomProvider    codeDomProvider = System.CodeDom.Compiler.CodeDomProvider.CreateProvider("C#");
                System.CodeDom.Compiler.IndentedTextWriter textWriter      = new System.CodeDom.Compiler.IndentedTextWriter(new System.IO.StreamWriter(outputFile));

                codeDomProvider.GenerateCodeFromCompileUnit(generator.TargetCompileUnit, textWriter, options);

                textWriter.Close();
            }
            catch (FaultException fx)
            {
                MessageBox.Show(fx.Message + " > " + fx.Reason + " > " + fx.Action + " > " + fx.Data + " > " + fx.Code + " > " + fx.InnerException);
            }
            catch (TimeoutException tx)
            {
                MessageBox.Show(tx.Message + " > " + tx.Data + " > " + tx.InnerException);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
Example #45
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());
            }
        }
		//FIXME: error handling
		void UpdateCliTypes (NSObjectProjectInfo pinfo, List<SyncObjcBackJob> typeSyncJobs)
		{
			var provider = System.CodeDom.Compiler.CodeDomProvider.CreateProvider ("C#");
			var options = new System.CodeDom.Compiler.CodeGeneratorOptions ();
			var writer = MonoDevelop.DesignerSupport.CodeBehindWriter.CreateForProject (
				new MonoDevelop.Core.ProgressMonitoring.NullProgressMonitor (), dnp);
			
			//group all the types by designer file
			var designerFile = new Dictionary<string, List<NSObjectTypeInfo>> ();
			foreach (var job in typeSyncJobs) {
				List<NSObjectTypeInfo> types;
				if (!designerFile.TryGetValue (job.DesignerFile, out types))
					designerFile[job.DesignerFile] = types = new List<NSObjectTypeInfo> ();
				types.Add (job.Type);
			}
			
			//add in other designer types that exist in the designer files
			foreach (var ut in pinfo.GetTypes ()) {
				if (!ut.IsUserType)
					continue;
				var df = ut.GetDesignerFile ();
				List<NSObjectTypeInfo> types;
				if (df != null && designerFile.TryGetValue (df, out types))
					if (!types.Any (t => t.ObjCName == ut.ObjCName))
						types.Add (ut);
			}
			
			updatingProjectFiles = true;
			
			try {
				foreach (var df in designerFile) {
					var ccu = GenerateCompileUnit (provider, options, df.Key, df.Value);
					writer.Write (ccu, df.Key);
				}
				writer.WriteOpenFiles ();
				
				foreach (var job in typeSyncJobs) {
					pinfo.InsertUpdatedType (job.Type);
					trackedFiles[job.HFile] = File.GetLastWriteTime (job.HFile);
				}
				
			} finally {
				updatingProjectFiles = false;
			}
		}
Example #47
0
        public static void Main(string[] args)
        {
            string directory   = "../../../Project/Src/Ast/";
            string visitorsDir = "../../../Project/Src/Visitors/";

            Debug.WriteLine("AST Generator running...");
            if (!File.Exists(directory + "INode.cs"))
            {
                Debug.WriteLine("did not find output directory");
                return;
            }
            if (!File.Exists(visitorsDir + "AbstractAstTransformer.cs"))
            {
                Debug.WriteLine("did not find visitor output directory");
                return;
            }

            List <Type> nodeTypes = new List <Type>();

            foreach (Type type in typeof(MainClass).Assembly.GetTypes())
            {
                if (type.IsClass && typeof(INode).IsAssignableFrom(type))
                {
                    nodeTypes.Add(type);
                }
            }
            nodeTypes.Sort(delegate(Type a, Type b) { return(a.Name.CompareTo(b.Name)); });

            CodeCompileUnit ccu = new CodeCompileUnit();
            CodeNamespace   cns = ccu.AddNamespace("ICSharpCode.NRefactory.Ast");

            cns.AddImport("System");
            cns.AddImport("System.Collections.Generic");
            foreach (Type type in nodeTypes)
            {
                if (type.GetCustomAttributes(typeof(CustomImplementationAttribute), false).Length == 0)
                {
                    CodeTypeDeclaration ctd = cns.AddType(type.Name);
                    if (type.IsAbstract)
                    {
                        ctd.TypeAttributes |= TypeAttributes.Abstract;
                    }
                    ctd.BaseTypes.Add(new CodeTypeReference(type.BaseType.Name));

                    ProcessType(type, ctd);

                    foreach (object o in type.GetCustomAttributes(false))
                    {
                        if (o is TypeImplementationModifierAttribute)
                        {
                            (o as TypeImplementationModifierAttribute).ModifyImplementation(cns, ctd, type);
                        }
                    }

                    if (!type.IsAbstract)
                    {
                        CodeMemberMethod method = new CodeMemberMethod();
                        method.Name       = "AcceptVisitor";
                        method.Attributes = MemberAttributes.Public | MemberAttributes.Override;
                        method.Parameters.Add(new CodeParameterDeclarationExpression("IAstVisitor", "visitor"));
                        method.Parameters.Add(new CodeParameterDeclarationExpression(typeof(object), "data"));
                        method.ReturnType = new CodeTypeReference(typeof(object));
                        CodeExpression ex = new CodeVariableReferenceExpression("visitor");
                        ex = new CodeMethodInvokeExpression(ex, VisitPrefix + ctd.Name,
                                                            new CodeThisReferenceExpression(),
                                                            new CodeVariableReferenceExpression("data"));
                        method.Statements.Add(new CodeMethodReturnStatement(ex));
                        ctd.Members.Add(method);

                        method            = new CodeMemberMethod();
                        method.Name       = "ToString";
                        method.Attributes = MemberAttributes.Public | MemberAttributes.Override;
                        method.ReturnType = new CodeTypeReference(typeof(string));
                        method.Statements.Add(new CodeMethodReturnStatement(CreateToString(type)));
                        ctd.Members.Add(method);
                    }
                }
            }

            System.CodeDom.Compiler.CodeGeneratorOptions settings = new System.CodeDom.Compiler.CodeGeneratorOptions();
            settings.IndentString  = "\t";
            settings.VerbatimOrder = true;

            using (StringWriter writer = new StringWriter()) {
                new Microsoft.CSharp.CSharpCodeProvider().GenerateCodeFromCompileUnit(ccu, writer, settings);
                File.WriteAllText(directory + "Generated.cs", writer.ToString());
            }

            ccu = new CodeCompileUnit();
            cns = ccu.AddNamespace("ICSharpCode.NRefactory");
            cns.AddImport("System");
            cns.AddImport("ICSharpCode.NRefactory.Ast");
            cns.Types.Add(CreateAstVisitorInterface(nodeTypes));

            using (StringWriter writer = new StringWriter()) {
                new Microsoft.CSharp.CSharpCodeProvider().GenerateCodeFromCompileUnit(ccu, writer, settings);
                File.WriteAllText(visitorsDir + "../IAstVisitor.cs", writer.ToString());
            }

            ccu = new CodeCompileUnit();
            cns = ccu.AddNamespace("ICSharpCode.NRefactory.Visitors");
            cns.AddImport("System");
            cns.AddImport("System.Collections.Generic");
            cns.AddImport("System.Diagnostics");
            cns.AddImport("ICSharpCode.NRefactory.Ast");
            cns.Types.Add(CreateAstVisitorClass(nodeTypes, false));

            using (StringWriter writer = new StringWriter()) {
                new Microsoft.CSharp.CSharpCodeProvider().GenerateCodeFromCompileUnit(ccu, writer, settings);
                File.WriteAllText(visitorsDir + "AbstractAstVisitor.cs", writer.ToString());
            }

            ccu = new CodeCompileUnit();
            cns = ccu.AddNamespace("ICSharpCode.NRefactory.Visitors");
            cns.AddImport("System");
            cns.AddImport("System.Collections.Generic");
            cns.AddImport("System.Diagnostics");
            cns.AddImport("ICSharpCode.NRefactory.Ast");
            cns.Types.Add(CreateAstVisitorClass(nodeTypes, true));

            using (StringWriter writer = new StringWriter()) {
                new Microsoft.CSharp.CSharpCodeProvider().GenerateCodeFromCompileUnit(ccu, writer, settings);
                File.WriteAllText(visitorsDir + "AbstractAstTransformer.cs", writer.ToString());
            }

            ccu = new CodeCompileUnit();
            cns = ccu.AddNamespace("ICSharpCode.NRefactory.Visitors");
            cns.AddImport("System");
            cns.AddImport("ICSharpCode.NRefactory.Ast");
            cns.Types.Add(CreateNodeTrackingAstVisitorClass(nodeTypes));

            using (StringWriter writer = new StringWriter()) {
                new Microsoft.CSharp.CSharpCodeProvider().GenerateCodeFromCompileUnit(ccu, writer, settings);
                // CodeDom cannot output "sealed", so we need to use this hack:
                File.WriteAllText(visitorsDir + "NodeTrackingAstVisitor.cs",
                                  writer.ToString().Replace("public override object", "public sealed override object"));
            }

            //NotImplementedAstVisitor
            ccu = new CodeCompileUnit();
            cns = ccu.AddNamespace("ICSharpCode.NRefactory.Visitors");
            cns.AddImport("System");
            cns.AddImport("ICSharpCode.NRefactory.Ast");
            cns.Types.Add(CreateNotImplementedAstVisitorClass(nodeTypes));

            using (StringWriter writer = new StringWriter()) {
                new Microsoft.CSharp.CSharpCodeProvider().GenerateCodeFromCompileUnit(ccu, writer, settings);
                File.WriteAllText(visitorsDir + "NotImplementedAstVisitor.cs", writer.ToString());
            }
            Debug.WriteLine("AST Generator done!");
        }
Example #48
0
        static void GenerateVBCodeForService(EndpointAddress metadataAddress, string outputFile)
        {
          MetadataExchangeClient mexClient = new MetadataExchangeClient(metadataAddress);
          mexClient.ResolveMetadataReferences = true;
          MetadataSet metaDocs = mexClient.GetMetadata();

          WsdlImporter importer = new WsdlImporter(metaDocs);
          ServiceContractGenerator generator = new ServiceContractGenerator();

          // Uncomment the following code if you are going to do your work programmatically rather than add 
          // the WsdlDocumentationImporters through a configuration file. 
          /*
          // The following code inserts the custom WSDL programmatically adding the custom WsdlImporter without
          // removing the other importers already in the collection.
          System.Collections.Generic.IEnumerable<IWsdlImportExtension> exts = importer.WsdlExtensions;
          System.Collections.Generic.List<IWsdlImportExtension> newExts = new System.Collections.Generic.List<IWsdlImportExtension>();
          foreach (IWsdlImportExtension ext in exts)
            newExts.Add(ext);
          newExts.Add(new WsdlDocumentationImporter());
          importer = new WsdlImporter(newExts.ToArray(), metaDocs.MetadataSections);
          */

          System.Collections.ObjectModel.Collection<ContractDescription> contracts = importer.ImportAllContracts();
          foreach (ContractDescription contract in contracts)
          {
            generator.GenerateServiceContractType(contract);
          }
          if (generator.Errors.Count != 0)
            throw new ApplicationException("There were errors during code compilation.");

          // Write the code dom.
          System.CodeDom.Compiler.CodeGeneratorOptions options = new System.CodeDom.Compiler.CodeGeneratorOptions();
          options.BracingStyle = "C";
          System.CodeDom.Compiler.CodeDomProvider codeDomProvider = System.CodeDom.Compiler.CodeDomProvider.CreateProvider("VB");
          System.CodeDom.Compiler.IndentedTextWriter textWriter = new System.CodeDom.Compiler.IndentedTextWriter(new System.IO.StreamWriter(outputFile));
          codeDomProvider.GenerateCodeFromCompileUnit(generator.TargetCompileUnit, textWriter, options);
          textWriter.Close();
        }
        protected override void GenerateTransformCode(string directiveName, System.Text.StringBuilder codeBuffer, System.CodeDom.Compiler.CodeDomProvider languageProvider, System.Collections.Generic.IDictionary <string, string> requiresArguments, System.Collections.Generic.IDictionary <string, string> providesArguments)
        {
            base.GenerateTransformCode(directiveName, codeBuffer, languageProvider, requiresArguments, providesArguments);

            System.CodeDom.CodeMemberField codeMemberField = null;
            if (!System.String.IsNullOrEmpty(providesArguments["GeneratedResourceName"]))
            {
                codeMemberField            = new System.CodeDom.CodeMemberField(new System.CodeDom.CodeTypeReference(typeof(string)), providesArguments["GeneratedResourceName"]);
                codeMemberField.Attributes = System.CodeDom.MemberAttributes.Abstract | System.CodeDom.MemberAttributes.Override | System.CodeDom.MemberAttributes.FamilyAndAssembly | System.CodeDom.MemberAttributes.FamilyOrAssembly;
                string s = requiresArguments["ProjectDefaultNamespace"];
                if (!System.String.IsNullOrEmpty(requiresArguments["GeneratedCodeFolder"]))
                {
                    if (!System.String.IsNullOrEmpty(s))
                    {
                        s += ".";
                    }
                    s += requiresArguments["GeneratedCodeFolder"];
                }
                if (!System.String.IsNullOrEmpty(requiresArguments["GeneratedResourceFile"]))
                {
                    if (!System.String.IsNullOrEmpty(s))
                    {
                        s += ".";
                    }
                    s += requiresArguments["GeneratedResourceFile"];
                }
                codeMemberField.InitExpression = new System.CodeDom.CodePrimitiveExpression(s);

                System.CodeDom.Compiler.CodeGeneratorOptions codeGeneratorOptions = new System.CodeDom.Compiler.CodeGeneratorOptions();
                codeGeneratorOptions.BlankLinesBetweenMembers = true;
                codeGeneratorOptions.IndentString             = "    ";
                codeGeneratorOptions.VerbatimOrder            = true;
                codeGeneratorOptions.BracingStyle             = "C";
                using (System.IO.StringWriter stringWriter = new System.IO.StringWriter(codeBuffer, System.Globalization.CultureInfo.InvariantCulture))
                {
                    if (codeMemberField != null)
                    {
                        languageProvider.GenerateCodeFromMember(codeMemberField, stringWriter, codeGeneratorOptions);
                    }
                }
            }
            if (!System.String.IsNullOrEmpty(providesArguments["GeneratedNamespace"]))
            {
                codeMemberField            = new System.CodeDom.CodeMemberField(new System.CodeDom.CodeTypeReference(typeof(string)), providesArguments["GeneratedNamespace"]);
                codeMemberField.Attributes = System.CodeDom.MemberAttributes.Abstract | System.CodeDom.MemberAttributes.Override | System.CodeDom.MemberAttributes.FamilyAndAssembly | System.CodeDom.MemberAttributes.FamilyOrAssembly;
                string s = requiresArguments["ProjectDefaultNamespace"];
                codeMemberField.InitExpression = new System.CodeDom.CodePrimitiveExpression(s);

                System.CodeDom.Compiler.CodeGeneratorOptions codeGeneratorOptions = new System.CodeDom.Compiler.CodeGeneratorOptions();
                codeGeneratorOptions.BlankLinesBetweenMembers = true;
                codeGeneratorOptions.IndentString             = "    ";
                codeGeneratorOptions.VerbatimOrder            = true;
                codeGeneratorOptions.BracingStyle             = "C";
                using (System.IO.StringWriter stringWriter = new System.IO.StringWriter(codeBuffer, System.Globalization.CultureInfo.InvariantCulture))
                {
                    if (codeMemberField != null)
                    {
                        languageProvider.GenerateCodeFromMember(codeMemberField, stringWriter, codeGeneratorOptions);
                    }
                }
            }
        }
 public override void GenerateCodeFromMember(System.CodeDom.CodeTypeMember member, TextWriter writer, System.CodeDom.Compiler.CodeGeneratorOptions options)
 {
 }
		string GenerateCode (ITextTemplatingEngineHost host, string content, string name, string generatorNewline)
		{
			ParsedTemplate pt = ParsedTemplate.FromText (content, host);
			if (pt.Errors.HasErrors) {
				host.LogErrors (pt.Errors);
				return null;
			}
			
			TemplateSettings settings = TemplatingEngine.GetSettings (host, pt);
			if (name != null)
				settings.Name = name;
			if (pt.Errors.HasErrors) {
				host.LogErrors (pt.Errors);
				return null;
			}
			
			var ccu = TemplatingEngine.GenerateCompileUnit (host, content, pt, settings);
			if (pt.Errors.HasErrors) {
				host.LogErrors (pt.Errors);
				return null;
			}
			
			var opts = new System.CodeDom.Compiler.CodeGeneratorOptions ();
			using (var writer = new System.IO.StringWriter ()) {
				writer.NewLine = generatorNewline;
				settings.Provider.GenerateCodeFromCompileUnit (ccu, writer, opts);
				return writer.ToString ();
			}
		}
Example #52
0
        public static void Main(string[] args)
        {
            string directory = "../../NRefactory/Project/Src/Ast/";
            string visitorsDir = "../../NRefactory/Project/Src/Visitors/";
            Console.WriteLine("AST Generator running...");
            if (!File.Exists(directory + "INode.cs")) {
                Console.WriteLine("did not find output directory " + Path.GetFullPath(Path.GetDirectoryName(directory)));
                return;
            }
            if (!File.Exists(visitorsDir + "AbstractAstTransformer.cs")) {
                Console.WriteLine("did not find visitor output directory");
                return;
            }

            List<Type> nodeTypes = new List<Type>();
            foreach (Type type in typeof(MainClass).Assembly.GetTypes()) {
                if (type.IsClass && typeof(INode).IsAssignableFrom(type)) {
                    nodeTypes.Add(type);
                }
            }
            nodeTypes.Sort(delegate(Type a, Type b) { return a.Name.CompareTo(b.Name); });

            CodeCompileUnit ccu = new CodeCompileUnit();
            CodeNamespace cns = ccu.AddNamespace("ICSharpCode.NRefactory.Ast");
            cns.AddImport("System");
            cns.AddImport("System.Collections.Generic");
            cns.AddImport("AgentRalph.Visitors");
            foreach (Type type in nodeTypes) {
                if (type.GetCustomAttributes(typeof(CustomImplementationAttribute), false).Length == 0) {
                    CodeTypeDeclaration ctd = cns.AddType(type.Name);
                    if (type.IsAbstract) {
                        ctd.TypeAttributes |= TypeAttributes.Abstract;
                    }
                  ctd.IsPartial = true;
                    ctd.BaseTypes.Add(new CodeTypeReference(type.BaseType.Name));

                    ProcessType(type, ctd);

                    foreach (object o in type.GetCustomAttributes(false)) {
                        if (o is TypeImplementationModifierAttribute) {
                            (o as TypeImplementationModifierAttribute).ModifyImplementation(cns, ctd, type);
                        }
                    }

                    if (!type.IsAbstract) {
                        AddAnAcceptVisitorMethod(type, ctd, "IAstVisitor", typeof(object));

                        // Create an overload
                        AddAnAcceptVisitorMethod(type, ctd, "AstComparisonVisitor", typeof(bool));

                        AddAChillunsGetter(type, ctd);

                        var method = new CodeMemberMethod();
                        method.Name = "ToString";
                        method.Attributes = MemberAttributes.Public | MemberAttributes.Override;
                        method.ReturnType = new CodeTypeReference(typeof(string));
                        method.Statements.Add(new CodeMethodReturnStatement(CreateToString(type)));
                        ctd.Members.Add(method);
                    }
                }
            }

            System.CodeDom.Compiler.CodeGeneratorOptions settings = new System.CodeDom.Compiler.CodeGeneratorOptions();
            settings.IndentString = "\t";
            settings.VerbatimOrder = true;

            using (StringWriter writer = new StringWriter()) {
                new Microsoft.CSharp.CSharpCodeProvider().GenerateCodeFromCompileUnit(ccu, writer, settings);
                File.WriteAllText(directory + "Generated.cs", writer.ToString());
            }

            ccu = new CodeCompileUnit();
            cns = ccu.AddNamespace("ICSharpCode.NRefactory");
            cns.AddImport("System");
            cns.AddImport("ICSharpCode.NRefactory.Ast");
            cns.Types.Add(CreateAstVisitorInterface(nodeTypes));

            using (StringWriter writer = new StringWriter()) {
                new Microsoft.CSharp.CSharpCodeProvider().GenerateCodeFromCompileUnit(ccu, writer, settings);
                File.WriteAllText(visitorsDir + "../IAstVisitor.cs", writer.ToString());
            }

            // My modifications to the generation process are not preserving the creation of these particular files.
            // So I just don't regenerate them for the time being.
            //			ccu = new CodeCompileUnit();
            //			cns = ccu.AddNamespace("ICSharpCode.NRefactory.Visitors");
            //			cns.AddImport("System");
            //			cns.AddImport("System.Collections.Generic");
            //			cns.AddImport("System.Diagnostics");
            //			cns.AddImport("ICSharpCode.NRefactory.Ast");
            //			cns.Types.Add(CreateAstVisitorClass(nodeTypes, false));
            //
            //			using (StringWriter writer = new StringWriter()) {
            //				new Microsoft.CSharp.CSharpCodeProvider().GenerateCodeFromCompileUnit(ccu, writer, settings);
            //				File.WriteAllText(visitorsDir + "AbstractAstVisitor.cs", writer.ToString());
            //			}
            //
            //			ccu = new CodeCompileUnit();
            //			cns = ccu.AddNamespace("ICSharpCode.NRefactory.Visitors");
            //			cns.AddImport("System");
            //			cns.AddImport("System.Collections.Generic");
            //			cns.AddImport("System.Diagnostics");
            //			cns.AddImport("ICSharpCode.NRefactory.Ast");
            //			cns.Types.Add(CreateAstVisitorClass(nodeTypes, true));
            //
            //			using (StringWriter writer = new StringWriter()) {
            //				new Microsoft.CSharp.CSharpCodeProvider().GenerateCodeFromCompileUnit(ccu, writer, settings);
            //				File.WriteAllText(visitorsDir + "AbstractAstTransformer.cs", writer.ToString());
            //			}

            ccu = new CodeCompileUnit();
            cns = ccu.AddNamespace("ICSharpCode.NRefactory.Visitors");
            cns.AddImport("System");
            cns.AddImport("ICSharpCode.NRefactory.Ast");
            cns.Types.Add(CreateNodeTrackingAstVisitorClass(nodeTypes));

            using (StringWriter writer = new StringWriter()) {
                new Microsoft.CSharp.CSharpCodeProvider().GenerateCodeFromCompileUnit(ccu, writer, settings);
                // CodeDom cannot output "sealed", so we need to use this hack:
                File.WriteAllText(visitorsDir + "NodeTrackingAstVisitor.cs",
                                  writer.ToString().Replace("public override object", "public sealed override object"));
            }

            //NotImplementedAstVisitor
            ccu = new CodeCompileUnit();
            cns = ccu.AddNamespace("ICSharpCode.NRefactory.Visitors");
            cns.AddImport("System");
            cns.AddImport("ICSharpCode.NRefactory.Ast");
            cns.Types.Add(CreateNotImplementedAstVisitorClass(nodeTypes));

            using (StringWriter writer = new StringWriter()) {
                new Microsoft.CSharp.CSharpCodeProvider().GenerateCodeFromCompileUnit(ccu, writer, settings);
                File.WriteAllText(visitorsDir + "NotImplementedAstVisitor.cs", writer.ToString());
            }

            // TwoTreeAbstractAstVisitor
            ccu = new CodeCompileUnit();
            cns = ccu.AddNamespace("AgentRalph.Visitors");
            cns.AddImport("System");
            cns.AddImport("System.Collections.Generic");
            cns.AddImport("System.Diagnostics");
            cns.AddImport("ICSharpCode.NRefactory.Ast");
            cns.AddImport("ICSharpCode.NRefactory");
            cns.Types.Add(CreateAstComparisonVisitorClass(nodeTypes));

            using (StringWriter writer = new StringWriter())
            {
                new Microsoft.CSharp.CSharpCodeProvider().GenerateCodeFromCompileUnit(ccu, writer, settings);
                // Put it in the NRefactor project
                var path = visitorsDir + "AstComparisonVisitor.Generated.cs";
                File.WriteAllText(path, writer.ToString());
                Console.WriteLine("Created file " + path);
            }

            Console.WriteLine("AST Generator done!");
        }
Example #53
0
        //<snippet8>
        static void GenerateCSCodeForService(EndpointAddress metadataAddress, string outputFile)
        {
            //<snippet10>
            MetadataExchangeClient mexClient = new MetadataExchangeClient(metadataAddress);

            mexClient.ResolveMetadataReferences = true;
            MetadataSet metaDocs = mexClient.GetMetadata();

            WsdlImporter             importer  = new WsdlImporter(metaDocs);
            ServiceContractGenerator generator = new ServiceContractGenerator();
            //</snippet10>

            // Add our custom DCAnnotationSurrogate
            // to write XSD annotations into the comments.
            object dataContractImporter;
            XsdDataContractImporter xsdDCImporter;

            if (!importer.State.TryGetValue(typeof(XsdDataContractImporter), out dataContractImporter))
            {
                Console.WriteLine("Couldn't find the XsdDataContractImporter! Adding custom importer.");
                xsdDCImporter         = new XsdDataContractImporter();
                xsdDCImporter.Options = new ImportOptions();
                importer.State.Add(typeof(XsdDataContractImporter), xsdDCImporter);
            }
            else
            {
                xsdDCImporter = (XsdDataContractImporter)dataContractImporter;
                if (xsdDCImporter.Options == null)
                {
                    Console.WriteLine("There were no ImportOptions on the importer.");
                    xsdDCImporter.Options = new ImportOptions();
                }
            }
            xsdDCImporter.Options.DataContractSurrogate = new DCAnnotationSurrogate();

            // Uncomment the following code if you are going to do your work programmatically rather than add
            // the WsdlDocumentationImporters through a configuration file.

            /*
             * // <snippet11>
             * // The following code inserts a custom WsdlImporter without removing the other
             * // importers already in the collection.
             * System.Collections.Generic.IEnumerable<IWsdlImportExtension> exts = importer.WsdlImportExtensions;
             * System.Collections.Generic.List<IWsdlImportExtension> newExts
             * = new System.Collections.Generic.List<IWsdlImportExtension>();
             * foreach (IWsdlImportExtension ext in exts)
             * {
             * Console.WriteLine("Default WSDL import extensions: {0}", ext.GetType().Name);
             * newExts.Add(ext);
             * }
             * newExts.Add(new WsdlDocumentationImporter());
             * System.Collections.Generic.IEnumerable<IPolicyImportExtension> polExts = importer.PolicyImportExtensions;
             * importer = new WsdlImporter(metaDocs, polExts, newExts);
             * // </snippet11>
             */

            System.Collections.ObjectModel.Collection <ContractDescription> contracts
                = importer.ImportAllContracts();
            importer.ImportAllEndpoints();
            foreach (ContractDescription contract in contracts)
            {
                generator.GenerateServiceContractType(contract);
            }
            if (generator.Errors.Count != 0)
            {
                throw new Exception("There were errors during code compilation.");
            }

            // Write the code dom
            System.CodeDom.Compiler.CodeGeneratorOptions options
                = new System.CodeDom.Compiler.CodeGeneratorOptions();
            options.BracingStyle = "C";
            System.CodeDom.Compiler.CodeDomProvider codeDomProvider
                = System.CodeDom.Compiler.CodeDomProvider.CreateProvider("C#");
            System.CodeDom.Compiler.IndentedTextWriter textWriter
                = new System.CodeDom.Compiler.IndentedTextWriter(new System.IO.StreamWriter(outputFile));
            codeDomProvider.GenerateCodeFromCompileUnit(
                generator.TargetCompileUnit, textWriter, options
                );
            textWriter.Close();
        }
        public void GenerateCode(CodeDomGenerator.Language language)
        {
            switch (language)
            {
            case CodeDomGenerator.Language.CSharp:
                using (Microsoft.CSharp.CSharpCodeProvider provider = new Microsoft.CSharp.CSharpCodeProvider())
                {
                    System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions();
                    using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString))
                    {
                        tw.Write("foreach (");
                        provider.GenerateCodeFromExpression(new CodeTypeReferenceExpression(IterationItemType), tw, opts);
                        tw.Write(" {0} in ", provider.CreateValidIdentifier(IterationItemName));
                        provider.GenerateCodeFromExpression(IterExpression, tw, opts);
                        tw.WriteLine(")");
                        tw.WriteLine("{");
                        tw.Indent++;
                        if (Statements != null)
                        {
                            foreach (CodeStatement statement in Statements)
                            {
                                provider.GenerateCodeFromStatement(statement, tw, opts);
                            }
                        }
                        tw.Indent--;
                        tw.WriteLine("}");
                        Value = tw.InnerWriter.ToString();
                    }
                }
                break;

            case CodeDomGenerator.Language.VB:
                using (Microsoft.VisualBasic.VBCodeProvider provider = new Microsoft.VisualBasic.VBCodeProvider())
                {
                    System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions();
                    using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString))
                    {
                        tw.Write("For Each {0} As ", provider.CreateValidIdentifier(IterationItemName));
                        provider.GenerateCodeFromExpression(new CodeTypeReferenceExpression(IterationItemType), tw, opts);
                        tw.Write(" in ");
                        provider.GenerateCodeFromExpression(IterExpression, tw, opts);
                        tw.WriteLine();
                        tw.Indent++;
                        if (Statements != null)
                        {
                            foreach (CodeStatement statement in Statements)
                            {
                                provider.GenerateCodeFromStatement(statement, tw, opts);
                            }
                        }
                        tw.Indent--;
                        tw.WriteLine("Next");
                        Value = tw.InnerWriter.ToString();
                    }
                }
                break;

            default:
                throw new NotImplementedException(language.ToString());
            }
        }