simplify execution point highlighting

This commit is contained in:
Egor.Ushakov
2015-06-16 18:47:31 +03:00
parent 9dac9a17a8
commit cbe7971523
3 changed files with 20 additions and 28 deletions
@@ -27,10 +27,6 @@ import com.intellij.execution.filters.LineNumbersMapping;
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;
@@ -42,7 +38,6 @@ import com.intellij.psi.util.PsiTreeUtil;
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;
@@ -286,20 +281,11 @@ public class PositionManagerImpl implements PositionManager, MultiRequestPositio
@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;
}
@@ -46,8 +46,6 @@ import com.intellij.openapi.application.ApplicationManager;
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;
@@ -752,9 +750,9 @@ public abstract class DebuggerUtilsEx extends DebuggerUtils {
@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;
}
@@ -24,14 +24,14 @@ import com.intellij.openapi.editor.colors.EditorColorsManager;
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;
@@ -202,13 +202,21 @@ public class ExecutionPointHighlighter {
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);
@@ -231,6 +239,6 @@ public class ExecutionPointHighlighter {
public interface HighlighterProvider {
@Nullable
RangeHighlighter createHighlighter(Document document, Project project, TextAttributes attributes);
TextRange getHighlightRange();
}
}