string CreateCode(INode node, IOutputAstVisitor outputVisitor)
 {
     using (SpecialNodesInserter.Install(specials, outputVisitor)) {
         node.AcceptVisitor(outputVisitor, null);
     }
     return(outputVisitor.Text);
 }
        public override string AddBaseTypeToClass(string existingCode, IClass targetClass, IClass newBaseType)
        {
            NR.IParser parser = ParseFile(null, existingCode);
            if (parser == null)
            {
                return(null);
            }

            AddTypeToBaseTypesVisitor addTypeToBaseTypesVisitor = new AddTypeToBaseTypesVisitor(targetClass, newBaseType);

            parser.CompilationUnit.AcceptVisitor(addTypeToBaseTypesVisitor, null);

            // now use an output visitor for the appropriate language (based on
            // extension of the existing code file) to format the new interface.
            IOutputAstVisitor output = GetOutputVisitor();

            // run the output visitor with the specials inserter to insert comments
            using (SpecialNodesInserter.Install(parser.Lexer.SpecialTracker.RetrieveSpecials(), output)) {
                parser.CompilationUnit.AcceptVisitor(output, null);
            }

            parser.Dispose();

            if (output.Errors.Count > 0)
            {
                ShowSourceCodeErrors(null, output.Errors.ErrorOutput);
                return(null);
            }

            return(output.Text);
        }
示例#3
0
        public override void Run()
        {
            IViewContent content = WorkbenchSingleton.Workbench.ActiveViewContent;

            if (content != null && content.PrimaryFileName != null && content is IEditable)
            {
                IParser p = ParserFactory.CreateParser(SupportedLanguage.VBNet, new StringReader(((IEditable)content).Text));
                p.Parse();

                if (p.Errors.Count > 0)
                {
                    MessageService.ShowError("${res:ICSharpCode.SharpDevelop.Commands.Convert.CorrectSourceCodeErrors}\n" + p.Errors.ErrorOutput);
                    return;
                }
                ICSharpCode.NRefactory.PrettyPrinter.CSharpOutputVisitor output = new ICSharpCode.NRefactory.PrettyPrinter.CSharpOutputVisitor();
                List <ISpecial> specials = p.Lexer.SpecialTracker.CurrentSpecials;
                PreprocessingDirective.VBToCSharp(specials);
                IAstVisitor v = new VBNetToCSharpConvertVisitor(ParserService.CurrentProjectContent,
                                                                ParserService.GetParseInformation(content.PrimaryFileName));
                v.VisitCompilationUnit(p.CompilationUnit, null);
                using (SpecialNodesInserter.Install(specials, output)) {
                    output.VisitCompilationUnit(p.CompilationUnit, null);
                }

                FileService.NewFile("Generated.cs", output.Text);
            }
        }
 private static string GenerateCode(string sourceCode, SupportedLanguage language)
 {
     using (IParser parser = ParserFactory.CreateParser(language, new StringReader(sourceCode)))
     {
         parser.Parse();
         if (parser.Errors.Count == 0)
         {
             IList <ISpecial>  savedSpecialsList = new ISpecial[0];
             IOutputAstVisitor targetVisitor;
             if (language == SupportedLanguage.CSharp)
             {
                 targetVisitor = new VBNetOutputVisitor();
             }
             else
             {
                 targetVisitor = new CSharpOutputVisitor();
             }
             using (SpecialNodesInserter.Install(savedSpecialsList, targetVisitor))
             {
                 parser.CompilationUnit.AcceptVisitor(targetVisitor, null);
             }
             return(targetVisitor.Text);
         }
         StringBuilder errorBuilder = new StringBuilder();
         return(parser.Errors.ErrorOutput);
     }
 }
示例#5
0
        public override void Run()
        {
            IWorkbenchWindow window = WorkbenchSingleton.Workbench.ActiveWorkbenchWindow;

            if (window != null && window.ViewContent is IEditable)
            {
                IParser p = ParserFactory.CreateParser(SupportedLanguage.CSharp, new StringReader(((IEditable)window.ViewContent).Text));
                p.Parse();
                if (p.Errors.Count > 0)
                {
                    MessageService.ShowError("${res:ICSharpCode.SharpDevelop.Commands.Convert.CorrectSourceCodeErrors}\n" + p.Errors.ErrorOutput);
                    return;
                }

                VBNetOutputVisitor vbv = new VBNetOutputVisitor();

                List <ISpecial> specials = p.Lexer.SpecialTracker.CurrentSpecials;
                PreprocessingDirective.CSharpToVB(specials);
                new CSharpToVBNetConvertVisitor().VisitCompilationUnit(p.CompilationUnit, null);
                using (SpecialNodesInserter.Install(specials, vbv)) {
                    vbv.VisitCompilationUnit(p.CompilationUnit, null);
                }

                FileService.NewFile("Generated.VB", "VBNET", vbv.Text);
            }
        }
        void VB2CS(string input, string expectedOutput)
        {
            SnippetParser parser = new SnippetParser(SupportedLanguage.VBNet);
            INode         node   = parser.Parse(input);

            // parser.Errors.ErrorOutput contains syntax errors, if any
            Assert.IsNotNull(node);
            Assert.AreEqual("", parser.Errors.ErrorOutput);
            // parser.Specials is the list of comments, preprocessor directives etc.
            PreprocessingDirective.VBToCSharp(parser.Specials);
            // Convert VB.NET constructs to C#:
            node.AcceptVisitor(new VBNetConstructsConvertVisitor(), null);
            node.AcceptVisitor(new ToCSharpConvertVisitor(), null);

            CSharpOutputVisitor output = new CSharpOutputVisitor();

            using (SpecialNodesInserter.Install(parser.Specials, output))
            {
                node.AcceptVisitor(output, null);
            }
            // output.Errors.ErrorOutput contains conversion errors/warnings, if any
            // output.Text contains the converted code
            Assert.AreEqual("", output.Errors.ErrorOutput);
            Assert.AreEqual(expectedOutput, output.Text);
        }
示例#7
0
 void GenerateCode(IOutputAstVisitor outputVisitor)
 {
     // re-insert the comments we saved from the parser into the output
     using (SpecialNodesInserter.Install(savedSpecialsList, outputVisitor)) {
         astView.Unit.AcceptVisitor(outputVisitor, null);
     }
     codeTextBox.Text = outputVisitor.Text.Replace("\t", "  ");
 }
        void TestProgram(SupportedLanguage sourceLanguage, string sourceCode, string expectedOutput)
        {
            DefaultProjectContent pc = new DefaultProjectContent();

            pc.ReferencedContents.Add(projectContentRegistry.Mscorlib);
            pc.ReferencedContents.Add(projectContentRegistry.GetProjectContentForReference("System.Windows.Forms", "System.Windows.Forms"));
            if (sourceLanguage == SupportedLanguage.VBNet)
            {
                pc.ReferencedContents.Add(projectContentRegistry.GetProjectContentForReference("Microsoft.VisualBasic", "Microsoft.VisualBasic"));
                pc.DefaultImports = new DefaultUsing(pc);
                pc.DefaultImports.Usings.Add("System");
                pc.DefaultImports.Usings.Add("Microsoft.VisualBasic");
            }
            pc.Language = sourceLanguage == SupportedLanguage.CSharp ? LanguageProperties.CSharp : LanguageProperties.VBNet;
            HostCallback.GetCurrentProjectContent = delegate {
                return(pc);
            };

            ICSharpCode.NRefactory.IParser parser = ParserFactory.CreateParser(sourceLanguage, new StringReader(sourceCode));
            parser.Parse();
            Assert.AreEqual("", parser.Errors.ErrorOutput);

            NRefactoryASTConvertVisitor visitor = new NRefactoryASTConvertVisitor(pc);

            visitor.VisitCompilationUnit(parser.CompilationUnit, null);
            visitor.Cu.FileName = sourceLanguage == SupportedLanguage.CSharp ? "a.cs" : "a.vb";
            foreach (IClass c in visitor.Cu.Classes)
            {
                pc.AddClassToNamespaceList(c);
            }

            ParseInformation parseInfo = new ParseInformation();

            parseInfo.SetCompilationUnit(visitor.Cu);

            if (sourceLanguage == SupportedLanguage.CSharp)
            {
                CSharpToVBNetConvertVisitor convertVisitor = new CSharpToVBNetConvertVisitor(pc, parseInfo);
                convertVisitor.RootNamespaceToRemove = "RootNamespace";
                parser.CompilationUnit.AcceptVisitor(convertVisitor, null);
            }
            else
            {
                VBNetToCSharpConvertVisitor convertVisitor = new VBNetToCSharpConvertVisitor(pc, parseInfo);
                parser.CompilationUnit.AcceptVisitor(convertVisitor, null);
            }

            IOutputAstVisitor outputVisitor = sourceLanguage == SupportedLanguage.CSharp ? (IOutputAstVisitor) new VBNetOutputVisitor() : new CSharpOutputVisitor();

            outputVisitor.Options.IndentationChar = ' ';
            outputVisitor.Options.IndentSize      = 2;
            using (SpecialNodesInserter.Install(parser.Lexer.SpecialTracker.RetrieveSpecials(),
                                                outputVisitor)) {
                outputVisitor.VisitCompilationUnit(parser.CompilationUnit, null);
            }
            Assert.AreEqual("", outputVisitor.Errors.ErrorOutput);
            Assert.AreEqual(expectedOutput.Replace("\r", ""), outputVisitor.Text.Trim().Replace("\r", ""));
        }
示例#9
0
        public void rewriteCode_CSharp(CompilationUnit unit, IList <ISpecial> specials)
        {
            var outputVisitor = new CSharpOutputVisitor();

            using (SpecialNodesInserter.Install(specials, outputVisitor)) {
                unit.AcceptVisitor(outputVisitor, null);
            }
            //codeTextBox.Text = outputVisitor.Text.Replace("\t", "  ");
            CSharpCode = outputVisitor.Text;
        }
示例#10
0
        protected void ConvertFile(FileProjectItem sourceItem, FileProjectItem targetItem,
                                   string sourceExtension, string targetExtension,
                                   SupportedLanguage sourceLanguage, IOutputAstVisitor outputVisitor)
        {
            FixExtensionOfExtraProperties(targetItem, sourceExtension, targetExtension);
            if (sourceExtension.Equals(Path.GetExtension(sourceItem.FileName), StringComparison.OrdinalIgnoreCase))
            {
                string  code = ParserService.GetParseableFileContent(sourceItem.FileName);
                IParser p    = ParserFactory.CreateParser(sourceLanguage, new StringReader(code));
                p.Parse();
                if (p.Errors.Count > 0)
                {
                    conversionLog.AppendLine();
                    conversionLog.AppendLine(StringParser.Parse("${res:ICSharpCode.SharpDevelop.Commands.Convert.IsNotConverted}",
                                                                new string[, ] {
                        { "FileName", sourceItem.FileName }
                    }));
                    conversionLog.AppendLine(StringParser.Parse("${res:ICSharpCode.SharpDevelop.Commands.Convert.ParserErrorCount}",
                                                                new string[, ] {
                        { "ErrorCount", p.Errors.Count.ToString() }
                    }));
                    conversionLog.AppendLine(p.Errors.ErrorOutput);
                    base.ConvertFile(sourceItem, targetItem);
                    return;
                }

                List <ISpecial> specials = p.Lexer.SpecialTracker.CurrentSpecials;

                ConvertAst(p.CompilationUnit, specials, sourceItem);

                using (SpecialNodesInserter.Install(specials, outputVisitor)) {
                    outputVisitor.VisitCompilationUnit(p.CompilationUnit, null);
                }

                p.Dispose();

                if (outputVisitor.Errors.Count > 0)
                {
                    conversionLog.AppendLine();
                    conversionLog.AppendLine(StringParser.Parse("${res:ICSharpCode.SharpDevelop.Commands.Convert.ConverterErrorCount}",
                                                                new string[, ] {
                        { "FileName", sourceItem.FileName },
                        { "ErrorCount", outputVisitor.Errors.Count.ToString() }
                    }));
                    conversionLog.AppendLine(outputVisitor.Errors.ErrorOutput);
                }

                targetItem.Include = Path.ChangeExtension(targetItem.Include, targetExtension);
                File.WriteAllText(targetItem.FileName, outputVisitor.Text);
            }
            else
            {
                base.ConvertFile(sourceItem, targetItem);
            }
        }
示例#11
0
        public String ToCSharp2()
        {
            IOutputAstVisitor outputVisitor = new CSharpOutputVisitor();

            SetPrettyPrintOptions(outputVisitor);

            using (SpecialNodesInserter.Install(specials, outputVisitor)) {
                unit.AcceptVisitor(outputVisitor, null);
            }
            return(outputVisitor.Text);
        }
示例#12
0
        public void rewriteCode_VBNet(CompilationUnit unit, IList <ISpecial> specials)
        {
            var outputVisitor = new VBNetOutputVisitor();

            using (SpecialNodesInserter.Install(specials, outputVisitor)) {
                unit.AcceptVisitor(outputVisitor, null);
            }
            //codeTextBox.Text = outputVisitor.Text.Replace("\t", "  ");
            VBNetCode = outputVisitor.Text;

//          PublicDI.log.debug(recreatedCode);
        }
示例#13
0
 void GenerateCodeButtonClick(object sender, EventArgs e)
 {
     if (syntaxTree.Unit != null)
     {
         VBNetOutputVisitor visitor = new VBNetOutputVisitor();
         // re-insert the comments we saved from the parser into the output
         using (SpecialNodesInserter.Install(savedSpecials, visitor)) {
             syntaxTree.Unit.AcceptVisitor(visitor, null);
         }
         codeView.Text = visitor.Text.Replace("\t", "  ");
     }
 }
示例#14
0
        public static string ConvertVBNET2CS(string vbcode)
        {
            var snippetParser = new SnippetParser(SupportedLanguage.VBNet);
            var node          = snippetParser.Parse(vbcode);

            node.AcceptVisitor(new ToVBNetConvertVisitor(), null);
            var csharpOutputVisitor = new CSharpOutputVisitor();

            using (SpecialNodesInserter.Install(snippetParser.Specials, csharpOutputVisitor))
                node.AcceptVisitor(csharpOutputVisitor, null);
            return(csharpOutputVisitor.Text);
        }
        protected override string GenerateCode(INode unit, bool installSpecials)
        {
            CSharpOutputVisitor visitor = new CSharpOutputVisitor();

            if (installSpecials)
            {
                SpecialNodesInserter.Install(this.specialsList, visitor);
            }

            unit.AcceptVisitor(visitor, null);
            return(visitor.Text);
        }
示例#16
0
        public static string ConvertCS2VBNET(string cscode)
        {
            var snippetParser = new SnippetParser(SupportedLanguage.CSharp);
            var node          = snippetParser.Parse(cscode);

            node.AcceptVisitor(new ToVBNetConvertVisitor(), null);
            var netOutputVisitor = new VBNetOutputVisitor();

            using (SpecialNodesInserter.Install(snippetParser.Specials, netOutputVisitor))
                node.AcceptVisitor(netOutputVisitor, null);
            return(netOutputVisitor.Text);
        }
示例#17
0
        private void GenerateCode()
        {
            foreach (Source entry in Sources.Values)
            {
                if (entry.CodeFile)
                {
                    CSharpOutputVisitor csharpOutputVisitor = new CSharpOutputVisitor();
                    SpecialNodesInserter.Install(entry.Parser.Lexer.SpecialTracker.RetrieveSpecials(), csharpOutputVisitor);
                    csharpOutputVisitor.VisitCompilationUnit(entry.CompilationUnit, null);

                    entry.Code = csharpOutputVisitor.Text;
                }
            }
        }
示例#18
0
        private void Generate(SupportedLanguage language, TextReader inputstream, OutputClass output)
        {
            IParser parser = ParserFactory.CreateParser(language, inputstream);

            parser.Parse();
            if (parser.Errors.Count > 0)
            {
                new ExceptionDialog(null, "Error Parsing Input Code").ShowDialog();
            }
            else if (output.CodeDomProvider != null)
            {
                CodeDomVisitor visitor = new CodeDomVisitor();
                visitor.VisitCompilationUnit(parser.CompilationUnit, null);
                for (int i = visitor.codeCompileUnit.Namespaces.Count - 1; i >= 0; i--)
                {
                    if (visitor.codeCompileUnit.Namespaces[i].Types.Count == 0)
                    {
                        visitor.codeCompileUnit.Namespaces.RemoveAt(i);
                    }
                }
                CodeGeneratorOptions options = new CodeGeneratorOptions();
                options.BlankLinesBetweenMembers = true;
                StringWriter writer = new StringWriter();
                output.CodeDomProvider.GenerateCodeFromCompileUnit(visitor.codeCompileUnit, writer, options);
                this.scintillaOutput.Text = writer.ToString();
                writer.Close();
            }
            else
            {
                AbstractAstTransformer transformer     = output.CreateTransformer();
                List <ISpecial>        currentSpecials = parser.Lexer.SpecialTracker.CurrentSpecials;
                if ((language == SupportedLanguage.CSharp) && (transformer is ToVBNetConvertVisitor))
                {
                    PreprocessingDirective.CSharpToVB(currentSpecials);
                }
                else if ((language == SupportedLanguage.VBNet) && (transformer is ToCSharpConvertVisitor))
                {
                    PreprocessingDirective.VBToCSharp(currentSpecials);
                }
                parser.CompilationUnit.AcceptVisitor(transformer, null);
                IOutputAstVisitor outputVisitor = output.CreatePrettyPrinter();
                using (SpecialNodesInserter.Install(currentSpecials, outputVisitor))
                {
                    outputVisitor.VisitCompilationUnit(parser.CompilationUnit, null);
                }
                this.scintillaOutput.Text = outputVisitor.Text;
            }
        }
示例#19
0
        void TestProgramCS2VB(string programCS, string programVB)
        {
            IParser parser = ParserFactory.CreateParser(SupportedLanguage.CSharp, new StringReader(programCS));

            parser.Parse();
            Assert.AreEqual("", parser.Errors.ErrorOutput);
            VBNetOutputVisitor outputVisitor = new VBNetOutputVisitor();

            using (SpecialNodesInserter.Install(parser.Lexer.SpecialTracker.RetrieveSpecials(),
                                                outputVisitor)) {
                outputVisitor.VisitCompilationUnit(parser.CompilationUnit, null);
            }
            Assert.AreEqual("", outputVisitor.Errors.ErrorOutput);
            Assert.AreEqual(programVB.Replace("\r", ""), outputVisitor.Text.TrimEnd().Replace("\r", ""));
            parser.Dispose();
        }
        public void InsertAfterCurrentMethod()
        {
            IOutputAstVisitor outputVisitor = this.GetOutputVisitor();

            using (SpecialNodesInserter.Install(this.specialsList, outputVisitor)) {
                string code = "\r\n\r\n" + GenerateCode(this.extractedMethod, true);

                code = code.TrimEnd('\r', '\n', ' ', '\t');

                Dom.IMember p = GetParentMember(this.textEditor, start.Line, start.Column);

                int offset = textEditor.Document.PositionToOffset(p.BodyRegion.EndLine, p.BodyRegion.EndColumn);

                textEditor.Document.Insert(offset, code);
            }
        }
示例#21
0
        static int Main(string[] args)
        {
            File.Delete("conversion.log");

            try {
                List <string> map = new List <string>()
                {
                    "..\\Controller\\Profiler",
                    "..\\Controller\\Data\\UnmanagedCallTreeNode",
                    "..\\Controller\\structs"
                };

                foreach (string path in map)
                {
                    using (IParser parser = ParserFactory.CreateParser(path + ".cs"))
                    {
                        parser.Parse();

                        if (parser.Errors.Count > 0)
                        {
                            string message = "Parser errors in file " + path + ":\n" + parser.Errors.ErrorOutput;
                            Console.WriteLine(message);
                            File.WriteAllText(path + "64.cs", message);
                            return(2);
                        }

                        var specials = parser.Lexer.SpecialTracker.RetrieveSpecials().Where(item => item is PreprocessingDirective);

                        parser.CompilationUnit.AcceptVisitor(new Converter(), null);
                        CSharpOutputVisitor output = new CSharpOutputVisitor();
                        SpecialNodesInserter.Install(specials, output);
                        parser.CompilationUnit.AcceptVisitor(output, null);

                        if (!File.Exists(path + "64.cs") || File.ReadAllText(path + "64.cs") != output.Text)
                        {
                            File.WriteAllText(path + "64.cs", output.Text);
                        }
                    }
                }

                return(0);
            } catch (Exception e) {
                File.WriteAllText("conversion.log", e.ToString());
                return(-1);
            }
        }
示例#22
0
        void TestProgram(string program)
        {
            VBParser parser = ParserFactory.CreateParser(new StringReader(program));

            parser.Parse();
            Assert.AreEqual("", parser.Errors.ErrorOutput);
            VBNetOutputVisitor outputVisitor = new VBNetOutputVisitor();

            outputVisitor.Options.IndentationChar = ' ';
            outputVisitor.Options.TabSize         = 2;
            outputVisitor.Options.IndentSize      = 2;
            using (SpecialNodesInserter.Install(parser.Lexer.SpecialTracker.RetrieveSpecials(),
                                                outputVisitor)) {
                outputVisitor.VisitCompilationUnit(parser.CompilationUnit, null);
            }
            Assert.AreEqual("", outputVisitor.Errors.ErrorOutput);
            Assert.AreEqual(program.Replace("\r", ""), outputVisitor.Text.TrimEnd().Replace("\r", ""));
            parser.Dispose();
        }
示例#23
0
        void TestProgramCS2VB(string programCS, string programVB)
        {
            IParser parser = ParserFactory.CreateParser(SupportedLanguage.CSharp, new StringReader(programCS));

            parser.Parse();
            Assert.AreEqual("", parser.Errors.ErrorOutput);
            VBNetOutputVisitor outputVisitor = new VBNetOutputVisitor();
            List <ISpecial>    specials      = parser.Lexer.SpecialTracker.RetrieveSpecials();

            PreprocessingDirective.CSharpToVB(specials);
            outputVisitor.Options.IndentationChar = ' ';
            outputVisitor.Options.IndentSize      = 2;
            using (SpecialNodesInserter.Install(specials, outputVisitor)) {
                outputVisitor.VisitCompilationUnit(parser.CompilationUnit, null);
            }
            Assert.AreEqual("", outputVisitor.Errors.ErrorOutput);
            Assert.AreEqual(programVB.Replace("\r", ""), outputVisitor.Text.TrimEnd().Replace("\r", ""));
            parser.Dispose();
        }
        public void InsertAfterCurrentMethod()
        {
            IOutputAstVisitor outputVisitor = this.GetOutputVisitor();

            using (SpecialNodesInserter.Install(this.specialsList, outputVisitor)) {
                string code = "\r\n\r\n" + GenerateCode(this.extractedMethod, true);

                code = code.TrimEnd('\r', '\n', ' ', '\t');

                Dom.IMember p = GetParentMember(this.textEditor, this.currentSelection.StartPosition.Line + 1, this.currentSelection.StartPosition.Column + 1);

                TextLocation loc = new ICSharpCode.TextEditor.TextLocation(
                    p.BodyRegion.EndColumn - 1, p.BodyRegion.EndLine - 1);

                int offset = textEditor.Document.PositionToOffset(loc);

                textEditor.Document.Insert(offset, code);
            }
        }
示例#25
0
        public void FormatCode()
        {
            TextReader r      = new StringReader(this.syntaxBoxControl1.Document.Text);
            IParser    parser = ParserFactory.CreateParser(SupportedLanguage.CSharp, r);

            parser.Parse();
            List <ISpecial> specials = parser.Lexer.SpecialTracker.RetrieveSpecials();

            try {
                if (parser.Errors.Count == 0)
                {
                    CSharpOutputVisitor ov = new CSharpOutputVisitor();
                    SpecialNodesInserter.Install(specials, ov);
                    foreach (INode c in parser.CompilationUnit.Children)
                    {
                        c.AcceptVisitor(ov, null);
                    }
                    this.syntaxBoxControl1.Document.Text = ov.Text;
                }
            } catch (Exception) {}
        }
示例#26
0
        public void TestProgram(string input, string expectedOutput)
        {
            IParser parser = ParserFactory.CreateParser(SupportedLanguage.CSharp, new StringReader(input));

            parser.Parse();
            Assert.AreEqual("", parser.Errors.ErrorOutput);
            var specials = parser.Lexer.SpecialTracker.RetrieveSpecials();

            PreprocessingDirective.CSharpToVB(specials);
            parser.CompilationUnit.AcceptVisitor(new CSharpConstructsConvertVisitor(), null);
            parser.CompilationUnit.AcceptVisitor(new ToVBNetConvertVisitor(), null);
            VBNetOutputVisitor outputVisitor = new VBNetOutputVisitor();

            outputVisitor.Options.IndentationChar     = ' ';
            outputVisitor.Options.IndentSize          = 2;
            outputVisitor.Options.OutputByValModifier = true;
            using (SpecialNodesInserter.Install(specials, outputVisitor)) {
                outputVisitor.VisitCompilationUnit(parser.CompilationUnit, null);
            }
            Assert.AreEqual("", outputVisitor.Errors.ErrorOutput);
            Assert.AreEqual(expectedOutput.Replace("\r", ""), outputVisitor.Text.Replace("\r", ""));
        }
        public void Uninternalize(string file)
        {
            using (var parser = ParserFactory.CreateParser(SupportedLanguage.CSharp, new StringReader(File.ReadAllText(file))))
            {
                parser.Parse();

                if (parser.Errors.Count > 0)
                {
                    Console.WriteLine(parser.Errors.ErrorOutput);
                    return;
                }

                var specials = parser.Lexer.SpecialTracker.RetrieveSpecials();

                parser.CompilationUnit.AcceptVisitor(new UninternalizerVisitor(), null);

                var visitor = new CSharpOutputVisitor();
                using (SpecialNodesInserter.Install(specials, visitor))
                    parser.CompilationUnit.AcceptVisitor(visitor, null);

                File.WriteAllText(file, visitor.Text);
            }
        }
示例#28
0
        void RunButtonClick(object sender, EventArgs e)
        {
            StringReader input  = new StringReader(inputTextBox.Text);
            IParser      parser = ParserFactory.CreateParser(SupportedLanguage.CSharp, input);

            parser.Parse();
            if (parser.Errors.Count > 0)
            {
                outputTextBox.Text = parser.Errors.ErrorOutput;
                return;
            }
            CompilationUnit cu = parser.CompilationUnit;

            cu.AcceptVisitor(new WrapperGeneratorVisitor(), null);

            IOutputAstVisitor output = new CSharpOutputVisitor();             //new VBNetOutputVisitor();

            // SpecialNodesInserter will re-insert the comments into the generated code
            using (SpecialNodesInserter.Install(parser.Lexer.SpecialTracker.RetrieveSpecials(), output)) {
                cu.AcceptVisitor(output, null);
            }
            outputTextBox.Text = output.Text;
        }
示例#29
0
        string Output(IParser parser)
        {
            IOutputASTVisitor visitor = CreateOutputVisitor();

            visitor.Options = CreatePrettyPrintOptions();

            List <ISpecial> specials = parser.Lexer.SpecialTracker.CurrentSpecials;

            SpecialNodesInserter sni = new SpecialNodesInserter(specials,
                                                                new SpecialOutputVisitor(visitor.OutputFormatter));

            visitor.NodeTracker.NodeVisiting        += sni.AcceptNodeStart;
            visitor.NodeTracker.NodeVisited         += sni.AcceptNodeEnd;
            visitor.NodeTracker.NodeChildrenVisited += sni.AcceptNodeEnd;
            visitor.NodeTracker.NodeVisited         += delegate(INode node) {
                if (IsMemberDeclaration(node))
                {
                    visitor.OutputFormatter.NewLine();
                }
            };
            parser.CompilationUnit.AcceptVisitor(visitor, null);
            sni.Finish();
            return(visitor.Text);
        }
示例#30
0
        public override string CreateNewFileLikeExisting(string existingFileContent, string codeForNewType)
        {
            NR.IParser parser = ParseFile(existingFileContent);
            if (parser == null)
            {
                return(null);
            }
            RemoveTypesVisitor visitor = new RemoveTypesVisitor();

            parser.CompilationUnit.AcceptVisitor(visitor, null);
            List <NR.ISpecial> comments = new List <NR.ISpecial>();

            foreach (NR.ISpecial c in parser.Lexer.SpecialTracker.CurrentSpecials)
            {
                if (c.StartPosition.Y <= visitor.includeCommentsUpToLine ||
                    c.StartPosition.Y > visitor.includeCommentsAfterLine)
                {
                    comments.Add(c);
                }
            }
            IOutputAstVisitor outputVisitor = (language == NR.SupportedLanguage.CSharp) ? new CSharpOutputVisitor() : (IOutputAstVisitor) new VBNetOutputVisitor();

            using (SpecialNodesInserter.Install(comments, outputVisitor)) {
                parser.CompilationUnit.AcceptVisitor(outputVisitor, null);
            }
            string expectedText;

            if (language == NR.SupportedLanguage.CSharp)
            {
                expectedText = "using " + RemoveTypesVisitor.DummyIdentifier + ";";
            }
            else
            {
                expectedText = "Imports " + RemoveTypesVisitor.DummyIdentifier;
            }
            using (StringWriter w = new StringWriter()) {
                using (StringReader r1 = new StringReader(outputVisitor.Text)) {
                    string line;
                    while ((line = r1.ReadLine()) != null)
                    {
                        string trimLine = line.TrimStart();
                        if (trimLine == expectedText)
                        {
                            string indentation = line.Substring(0, line.Length - trimLine.Length);
                            using (StringReader r2 = new StringReader(codeForNewType)) {
                                while ((line = r2.ReadLine()) != null)
                                {
                                    w.Write(indentation);
                                    w.WriteLine(line);
                                }
                            }
                        }
                        else
                        {
                            w.WriteLine(line);
                        }
                    }
                }
                if (visitor.firstType)
                {
                    w.WriteLine(codeForNewType);
                }
                return(w.ToString());
            }
        }