import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.Document;
-import com.intellij.openapi.editor.impl.DocumentMarkupModel;
-import com.intellij.openapi.editor.markup.HighlighterTargetArea;
-import com.intellij.openapi.editor.markup.RangeHighlighter;
-import com.intellij.openapi.editor.markup.TextAttributes;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.*;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.containers.EmptyIterable;
import com.intellij.xdebugger.impl.ui.ExecutionPointHighlighter;
-import com.intellij.xdebugger.ui.DebuggerColors;
import com.sun.jdi.AbsentInformationException;
import com.sun.jdi.Location;
import com.sun.jdi.Method;
@Nullable
@Override
- public RangeHighlighter createHighlighter(Document document, Project project, TextAttributes attributes) {
+ public TextRange getHighlightRange() {
PsiElement element = getElementAt();
NavigatablePsiElement method = PsiTreeUtil.getParentOfType(element, PsiMethod.class, PsiLambdaExpression.class);
if (method instanceof PsiLambdaExpression) {
- TextRange range = method.getTextRange();
- int startOffset = document.getLineStartOffset(getLine());
- int endOffset = document.getLineEndOffset(getLine());
- int hlStart = Math.max(startOffset, range.getStartOffset());
- int hlEnd = Math.min(endOffset, range.getEndOffset());
- if (hlStart != startOffset || hlEnd != endOffset) {
- return DocumentMarkupModel.forDocument(document, project, true).
- addRangeHighlighter(hlStart, hlEnd, DebuggerColors.EXECUTION_LINE_HIGHLIGHTERLAYER, attributes,
- HighlighterTargetArea.EXACT_RANGE);
- }
+ return method.getTextRange();
}
return null;
}
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.Editor;
-import com.intellij.openapi.editor.markup.RangeHighlighter;
-import com.intellij.openapi.editor.markup.TextAttributes;
import com.intellij.openapi.fileEditor.OpenFileDescriptor;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.fileTypes.StdFileTypes;
@Nullable
@Override
- public RangeHighlighter createHighlighter(Document document, Project project, TextAttributes attributes) {
+ public TextRange getHighlightRange() {
if (mySourcePosition instanceof ExecutionPointHighlighter.HighlighterProvider) {
- return ((ExecutionPointHighlighter.HighlighterProvider)mySourcePosition).createHighlighter(document, project, attributes);
+ return ((ExecutionPointHighlighter.HighlighterProvider)mySourcePosition).getHighlightRange();
}
return null;
}
import com.intellij.openapi.editor.colors.EditorColorsScheme;
import com.intellij.openapi.editor.impl.DocumentMarkupModel;
import com.intellij.openapi.editor.impl.EditorImpl;
-import com.intellij.openapi.editor.markup.GutterIconRenderer;
-import com.intellij.openapi.editor.markup.RangeHighlighter;
-import com.intellij.openapi.editor.markup.TextAttributes;
+import com.intellij.openapi.editor.markup.*;
import com.intellij.openapi.fileEditor.OpenFileDescriptor;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Key;
+import com.intellij.openapi.util.TextRange;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.ui.AppUIUtil;
+import com.intellij.util.DocumentUtil;
import com.intellij.xdebugger.XSourcePosition;
import com.intellij.xdebugger.impl.XDebuggerUtilImpl;
import com.intellij.xdebugger.impl.XSourcePositionImpl;
EditorColorsScheme scheme = EditorColorsManager.getInstance().getGlobalScheme();
TextAttributes attributes = myNotTopFrame ? scheme.getAttributes(DebuggerColors.NOT_TOP_FRAME_ATTRIBUTES)
- : scheme.getAttributes(DebuggerColors.EXECUTIONPOINT_ATTRIBUTES);
+ : scheme.getAttributes(DebuggerColors.EXECUTIONPOINT_ATTRIBUTES);
+ MarkupModel markupModel = DocumentMarkupModel.forDocument(document, myProject, true);
if (mySourcePosition instanceof HighlighterProvider) {
- myRangeHighlighter = ((HighlighterProvider)mySourcePosition).createHighlighter(document, myProject, attributes);
+ TextRange range = ((HighlighterProvider)mySourcePosition).getHighlightRange();
+ if (range != null) {
+ range = range.intersection(DocumentUtil.getLineTextRange(document, line));
+ if (range != null && !range.isEmpty()) {
+ myRangeHighlighter = markupModel.addRangeHighlighter(range.getStartOffset(), range.getEndOffset(),
+ DebuggerColors.EXECUTION_LINE_HIGHLIGHTERLAYER, attributes,
+ HighlighterTargetArea.EXACT_RANGE);
+ }
+ }
}
if (myRangeHighlighter == null) {
- myRangeHighlighter = DocumentMarkupModel.forDocument(document, myProject, true).
- addLineHighlighter(line, DebuggerColors.EXECUTION_LINE_HIGHLIGHTERLAYER, attributes);
+ myRangeHighlighter = markupModel.addLineHighlighter(line, DebuggerColors.EXECUTION_LINE_HIGHLIGHTERLAYER, attributes);
}
myRangeHighlighter.putUserData(EXECUTION_POINT_HIGHLIGHTER_KEY, true);
myRangeHighlighter.setGutterIconRenderer(myGutterIconRenderer);
public interface HighlighterProvider {
@Nullable
- RangeHighlighter createHighlighter(Document document, Project project, TextAttributes attributes);
+ TextRange getHighlightRange();
}
}