public override string CreateNewFileLikeExisting(string existingFileContent, string codeForNewType)
		{
			NR.IParser parser = ParseFile(null, 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();
			}
		}
Esempio n. 2
0
        public override string CreateNewFileLikeExisting(string existingFileContent, string codeForNewType)
        {
            NR.IParser parser = ParseFile(null, 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());
            }
        }