Exemple #1
0
 internal void Fire_OutlineResponseAvailable(object sender, Protocol.Response.OutlineResultResponse response)
 {
     if (OutlineResponseAvailable != null)
     {
         OutlineResponseAvailable(sender, response);
     }
 }
Exemple #2
0
        void javaEditor_OutlineResponseAvailable(object sender, Protocol.Response.OutlineResultResponse e)
        {
            Task.Run(() =>
            {
                var parser         = sender as JavaParser;
                var outlineManager = Parent.OutlineManagerService.GetOutliningManager(parser.Parent.TextView);
                if (!outlineManager.Enabled)
                {
                    return; // Quickly bail out since outlining is disabled
                }
                var newRegions      = from o in e.outline select new Tuple <SnapshotSpan, string>(new SnapshotSpan(parser.TextSnapshot, o.startPosition, o.length), o.summaryText);
                var existingRegions = from o in CurrentOutlining.Item2 select new Tuple <SnapshotSpan, string>(new SnapshotSpan(CurrentOutlining.Item1.TextSnapshot, o.startPosition, o.length).TranslateTo(parser.TextSnapshot, SpanTrackingMode.EdgeExclusive), o.summaryText);

                var lookupNewRegions = newRegions.ToLookup(x => x);
                var lookupOldRegions = existingRegions.ToLookup(x => x);
                var removedRegions   = from o in lookupOldRegions where lookupNewRegions[o.Key].Count() != o.Count() select o.Key;
                var addedRegions     = from n in lookupNewRegions where lookupOldRegions[n.Key].Count() != n.Count() select n.Key;

                if (removedRegions.Count() != 0 || addedRegions.Count() != 0)
                {
                    int changeStart = int.MaxValue;
                    int changeEnd   = -1;

                    foreach (var r in removedRegions)
                    {
                        changeStart = Math.Min(changeStart, r.Item1.Start);
                        changeEnd   = Math.Max(changeEnd, r.Item1.End);
                    }
                    foreach (var r in addedRegions)
                    {
                        changeStart = Math.Min(changeStart, r.Item1.Start);
                        changeEnd   = Math.Max(changeEnd, r.Item1.End);
                    }

                    this.CurrentOutlining = new Tuple <JavaParser, List <Protocol.Response.OutlineResultResponse.Outline> >(parser, e.outline);

                    var trace = string.Format("Java Parser: Outlining has changed. Removed: {0}, Added: {1}", removedRegions.Count(), addedRegions.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))));
                    }
                }
            });
        }