internal void Fire_FileParseMessagesAvailable(object sender, Protocol.Response.FileParseMessagesResponse response) { if (FileParseMessagesAvailable != null) { FileParseMessagesAvailable(sender, response); } }
void JavaEditor_FileParseMessagesAvailable(object sender, Protocol.Response.FileParseMessagesResponse e) { Task.Run(() => { var parser = sender as JavaParser; var newSquiggles = from s in e.problems select new Tuple <SnapshotSpan, int>(new SnapshotSpan(parser.TextSnapshot, Span.FromBounds(s.scopeStart, s.scopeEnd)), s.id); var existingSquiggles = from s in CurrentProblems.Item2 select new Tuple <SnapshotSpan, int>(new SnapshotSpan(CurrentProblems.Item1.TextSnapshot, Span.FromBounds(s.scopeStart, s.scopeEnd)).TranslateTo(parser.TextSnapshot, SpanTrackingMode.EdgeExclusive), s.id); var lookupNewSquiggles = newSquiggles.ToLookup(x => x); var lookupOldSquiggles = existingSquiggles.ToLookup(x => x); var removedSquiggles = from o in lookupOldSquiggles where lookupNewSquiggles[o.Key].Count() != o.Count() select o.Key; var addedSquiggles = from n in lookupNewSquiggles where lookupOldSquiggles[n.Key].Count() != n.Count() select n.Key; if (removedSquiggles.Count() != 0 || addedSquiggles.Count() != 0) { int changeStart = int.MaxValue; int changeEnd = -1; foreach (var r in removedSquiggles) { changeStart = Math.Min(changeStart, r.Item1.Start); changeEnd = Math.Max(changeEnd, r.Item1.End); } foreach (var r in addedSquiggles) { changeStart = Math.Min(changeStart, r.Item1.Start); changeEnd = Math.Max(changeEnd, r.Item1.End); } this.CurrentProblems = new Tuple <JavaParser, List <Protocol.Response.FileParseMessagesResponse.Problem> >(parser, e.problems); var trace = string.Format("Java Parser: Squiggles have changed. Removed: {0}, Added: {1}", removedSquiggles.Count(), addedSquiggles.Count()); Trace.WriteLine(trace); Telemetry.Client.Get().TrackTrace(trace); var temp = this.TagsChanged; if (temp != null) { temp(this, new SnapshotSpanEventArgs(new SnapshotSpan(parser.TextSnapshot, Span.FromBounds(changeStart, changeEnd)))); } } }); }