void ConstructCompilationUnit() { CompilationUnitSnippet cu = new CompilationUnitSnippet(); this.compilationUnit = cu; this.compilation.CompilationUnits.Add(cu); cu.Compilation = this.compilation; cu.Name = new Identifier(this.inputLine.Substring(5)); string snippetText = this.ReadString(); cu.SourceContext.Document = this.currentDocument = this.compiler.CreateDocument(cu.Name.ToString(), 1, snippetText); cu.SourceContext.EndPos = snippetText.Length; cu.ParserFactory = new Microsoft.SpecSharp.ParserFactory(); }
public virtual CompilationUnitSnippet VisitCompilationUnitSnippet(CompilationUnitSnippet snippet, CompilationUnitSnippet changes, CompilationUnitSnippet deletions, CompilationUnitSnippet insertions){ CompilationUnit cu = this.VisitCompilationUnit(snippet, changes, deletions, insertions); Debug.Assert(cu is CompilationUnitSnippet); return cu as CompilationUnitSnippet; }
public virtual Differences VisitCompilationUnitSnippet(CompilationUnitSnippet snippet1, CompilationUnitSnippet snippet2){ Differences differences = new Differences(snippet1, snippet2); if (snippet1 == null || snippet2 == null){ if (snippet1 != snippet2) differences.NumberOfDifferences++; else differences.NumberOfSimilarities++; return differences; } CompilationUnitSnippet changes = (CompilationUnitSnippet)snippet2.Clone(); CompilationUnitSnippet deletions = (CompilationUnitSnippet)snippet2.Clone(); CompilationUnitSnippet insertions = (CompilationUnitSnippet)snippet2.Clone(); if (snippet1.SourceContext.Document == null || snippet2.SourceContext.Document == null){ if (snippet1.SourceContext.Document == snippet2.SourceContext.Document) differences.NumberOfSimilarities++; else differences.NumberOfDifferences++; }else if (snippet1.SourceContext.Document.Name == snippet2.SourceContext.Document.Name) differences.NumberOfSimilarities++; else differences.NumberOfDifferences++; if (differences.NumberOfDifferences == 0){ differences.Changes = null; differences.Deletions = null; differences.Insertions = null; }else{ differences.Changes = changes; differences.Deletions = deletions; differences.Insertions = insertions; } return differences; }
public virtual CompilationUnit VisitCompilationUnitSnippet(CompilationUnitSnippet snippet){ return this.VisitCompilationUnit(snippet); }
public override CompilationUnit VisitCompilationUnitSnippet(CompilationUnitSnippet snippet){ if (snippet == null) return null; Document doc = snippet.SourceContext.Document; if (doc == null) return null; string fileName = doc.Name; int lineNumber = doc.LineNumber; DocumentText sourceText = doc.Text; IParserFactory pf = snippet.ParserFactory; IParser p; if (pf == null) p = this.DefaultParserFactory.CreateParser(fileName, lineNumber, sourceText, this.SymbolTable, this.ErrorNodes, this.Options); else p = pf.CreateParser(fileName, lineNumber, sourceText, this.SymbolTable, this.ErrorNodes, this.Options); if (p == null) return null; p.ParseCompilationUnit(snippet); return snippet; }
public virtual void VisitCompilationUnitSnippet(CompilationUnitSnippet snippet) { this.VisitCompilationUnit(snippet); }
public override CompilationUnit VisitCompilationUnitSnippet(CompilationUnitSnippet snippet) { if (snippet == null) return null; return base.VisitCompilationUnitSnippet((CompilationUnitSnippet)snippet.Clone()); }
public virtual CompilationUnitSnippet VisitCompilationUnitSnippet(CompilationUnitSnippet snippet1, CompilationUnitSnippet snippet2) { return snippet1; }
public virtual Compilation IncrementalSymbolTableUpdate(Compilation compilation, CompilationUnitSnippet compilationUnit, Document changedDocument, Method method, SourceContext spanningContextForChanges, int changeInLength){ if (compilation == null || compilationUnit == null || changedDocument == null || method == null || method.Body == null){Debug.Assert(false); return null;} //Record the fact that method has changed, so that subsequent edits do not have to search for it //in an AST that now has source contexts with out of date positions (the line numbers are up to date, but not the positions). compilationUnit.ChangedMethod = method; compilationUnit.OriginalEndPosOfChangedMethod = method.SourceContext.EndPos; if (method.SourceContext.Document != null){ //Contruct a new context for the method that refers to the new document SourceContext newCtx = this.GetMethodBodyContextInNewDocument(changedDocument, method.Body.SourceContext, spanningContextForChanges, changeInLength); //Now update the original document so that all nodes that follow method in the source will report their source lines relative to the changedDocument int oldNumLines = method.Body.SourceContext.EndLine - method.Body.SourceContext.StartLine; int newNumLines = newCtx.EndLine - newCtx.StartLine; method.SourceContext.Document.InsertOrDeleteLines(method.SourceContext.EndPos, newNumLines-oldNumLines); //Replace the method body context with the new context method.Body.SourceContext = newCtx; } //Get rid of the body statements (if present) that was constructed from the old context method.Body.Statements = null; return compilation; }
public virtual CompilationUnitSnippet CreateCompilationUnitSnippet(string fileName, int lineNumber, DocumentText text, Compilation compilation){ Document doc = this.CreateDocument(Path.GetFullPath(fileName), 1, text); CompilationUnitSnippet cu = new CompilationUnitSnippet(); cu.Name = Identifier.For(doc.Name); cu.SourceContext = new SourceContext(doc); cu.Compilation = compilation; return cu; }
public override CompilationUnitSnippet VisitCompilationUnitSnippet(CompilationUnitSnippet snippet) { System.Compiler.Parser p = this.DefaultCompiler.CreateParser(snippet.SourceContext.Document, this.ErrorNodes); p.ParseCompilationUnit(snippet); return(null); }