コード例 #1
0
        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);
            }
        }
コード例 #2
0
 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);
     }
 }
コード例 #3
0
        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));
        }
コード例 #4
0
		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);
		}