protected override void ReParseImpl() { var outputWindow = OutputWindowService.TryGetPane(PredefinedOutputWindowPanes.TvlIntellisense); Stopwatch stopwatch = Stopwatch.StartNew(); string filename = "<Unknown File>"; ITextDocument textDocument = TextDocument; if (textDocument != null) filename = textDocument.FilePath; var snapshot = TextBuffer.CurrentSnapshot; var input = new SnapshotCharStream(snapshot, new Span(0, snapshot.Length)); var lexer = new PhpLexer(input); lexer.TokenFactory = new SnapshotTokenFactory(snapshot, lexer); var tokens = new CommonTokenStream(lexer); var parser = new PhpParser(tokens); parser.BuildParseTree = true; List<ParseErrorEventArgs> errors = new List<ParseErrorEventArgs>(); parser.AddErrorListener(new ErrorListener(filename, errors, outputWindow)); var result = parser.compileUnit(); NavigationTreesListener listener = new NavigationTreesListener(); ParseTreeWalker.Default.Walk(listener, result); OnParseComplete(new PhpEditorNavigationParseResultEventArgs(snapshot, errors, stopwatch.Elapsed, tokens.GetTokens(), result, listener.NavigationTrees)); }
protected virtual ICharStream CreateInputStream(SnapshotSpan span) { SnapshotCharStream input; if (span.Length > 1000) { input = new SnapshotCharStream(span.Snapshot, span.Span); } else { input = new SnapshotCharStream(span.Snapshot); } input.Seek(span.Start.Position); return(input); }