diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/PositionManagerImpl.java b/java/debugger/impl/src/com/intellij/debugger/engine/PositionManagerImpl.java index 2ed9b5283ada..da915026b9d3 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/PositionManagerImpl.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/PositionManagerImpl.java @@ -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; } diff --git a/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerUtilsEx.java b/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerUtilsEx.java index 8ad0f30c03c0..608e43c9adb9 100644 --- a/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerUtilsEx.java +++ b/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerUtilsEx.java @@ -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; } diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/ExecutionPointHighlighter.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/ExecutionPointHighlighter.java index 269665ef7c80..66a362779492 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/ExecutionPointHighlighter.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/ExecutionPointHighlighter.java @@ -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(); } }