void AddMarkers(bool updateActiveStatements) { Debug.Assert(currentStatementMarker == null); Debug.Assert(callReturnMarker == null); bool tooManyFrames; var frames = stackFrameManager.GetFrames(out tooManyFrames); if (frames.Count == 0) { return; } var methodOffset = GetModuleTokenId(frames[0]); if (methodOffset != null) { currentStatementMarker = glyphTextMarkerService.AddMarker( methodOffset.Value.Key, methodOffset.Value.Value, new ImageReference(GetType().Assembly, "CurrentStatement"), ThemeClassificationTypeNameKeys.CurrentStatementMarker, null, classificationTypeCurrentStatement, GlyphTextMarkerServiceZIndexes.CurrentStatement, null, null, textViewFilter); } int selectedFrameNumber = stackFrameManager.SelectedFrameNumber; methodOffset = selectedFrameNumber != 0 && selectedFrameNumber < frames.Count ? GetModuleTokenId(frames[selectedFrameNumber]) : null; if (methodOffset != null) { callReturnMarker = glyphTextMarkerService.AddMarker( methodOffset.Value.Key, methodOffset.Value.Value, new ImageReference(GetType().Assembly, "CallReturn"), ThemeClassificationTypeNameKeys.CallReturnMarker, null, classificationTypeCallReturn, GlyphTextMarkerServiceZIndexes.ReturnStatement, null, null, textViewFilter); } if (updateActiveStatements) { activeStatementService.Value.OnNewActiveStatements(frames); } }
void ClearMarkers() { if (currentStatementMarker != null || callReturnMarker != null) { var list = new List <IGlyphTextMarker>(2); if (currentStatementMarker != null) { list.Add(currentStatementMarker); } if (callReturnMarker != null) { list.Add(callReturnMarker); } currentStatementMarker = null; callReturnMarker = null; glyphTextMarkerService.Remove(list); } }
SnapshotSpan?GetSnapshotSpan(IGlyphTextMethodMarker marker) { if (methodOffsetSpanMap == null) { return(null); } var span = methodOffsetSpanMap.ToSpan(marker.Method, marker.ILOffset); if (span == null) { return(null); } var snapshot = TextView.TextSnapshot; if (span.Value.End > snapshot.Length) { return(null); } return(new SnapshotSpan(snapshot, span.Value)); }
SnapshotSpan? GetSnapshotSpan(IGlyphTextMethodMarker marker) { if (methodOffsetSpanMap == null) return null; var span = methodOffsetSpanMap.ToSpan(marker.Method, marker.ILOffset); if (span == null) return null; var snapshot = TextView.TextSnapshot; if (span.Value.End > snapshot.Length) return null; return new SnapshotSpan(snapshot, span.Value); }