diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/JavaStackFrame.java b/java/debugger/impl/src/com/intellij/debugger/engine/JavaStackFrame.java index 2385b790d26b..a20c06dd36d0 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/JavaStackFrame.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/JavaStackFrame.java @@ -34,15 +34,19 @@ import com.intellij.debugger.ui.tree.render.ClassRenderer; import com.intellij.debugger.ui.tree.render.DescriptorLabelListener; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.diagnostic.Logger; +import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Computable; import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.text.StringUtil; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.pom.Navigatable; import com.intellij.ui.ColoredTextContainer; import com.intellij.xdebugger.XDebugSession; import com.intellij.xdebugger.XSourcePosition; import com.intellij.xdebugger.evaluation.XDebuggerEvaluator; import com.intellij.xdebugger.frame.*; import com.intellij.xdebugger.frame.presentation.XValuePresentation; +import com.intellij.xdebugger.impl.XSourcePositionImpl; import com.intellij.xdebugger.impl.ui.XDebuggerUIConstants; import com.intellij.xdebugger.settings.XDebuggerSettingsManager; import com.sun.jdi.*; @@ -83,12 +87,7 @@ public class JavaStackFrame extends XStackFrame { } myDebugProcess = ((DebugProcessImpl)descriptor.getDebugProcess()); myNodeManager = myDebugProcess.getXdebugProcess().getNodeManager(); - myXSourcePosition = ApplicationManager.getApplication().runReadAction(new Computable() { - @Override - public XSourcePosition compute() { - return myDescriptor.getSourcePosition() != null ? DebuggerUtilsEx.toXSourcePosition(myDescriptor.getSourcePosition()) : null; - } - }); + myXSourcePosition = myDescriptor.getSourcePosition() != null ? new JavaXSourcePosition(myDescriptor.getSourcePosition()) : null; } @NotNull @@ -408,4 +407,34 @@ public class JavaStackFrame extends XStackFrame { return "JavaFrame position unknown"; } } + + private static class JavaXSourcePosition implements XSourcePosition { + private final SourcePosition mySourcePosition; + + public JavaXSourcePosition(@NotNull SourcePosition sourcePosition) { + mySourcePosition = sourcePosition; + } + + @Override + public int getLine() { + return mySourcePosition.getLine(); + } + + @Override + public int getOffset() { + return mySourcePosition.getOffset(); + } + + @NotNull + @Override + public VirtualFile getFile() { + return mySourcePosition.getFile().getVirtualFile(); + } + + @NotNull + @Override + public Navigatable createNavigatable(@NotNull Project project) { + return XSourcePositionImpl.createOpenFileDescriptor(project, this); + } + } } 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 11853229e67a..bb210975d431 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 @@ -177,7 +177,7 @@ public class ExecutionPointHighlighter { private void addHighlighter() { int line = mySourcePosition.getLine(); Document document = myEditor.getDocument(); - if (line >= document.getLineCount()) return; + if (line < 0 || line >= document.getLineCount()) return; if (myUseSelection) { myEditor.getSelectionModel().setSelection(document.getLineStartOffset(line), document.getLineEndOffset(line) + document.getLineSeparatorLength(line));