avoid loading documents for all stack frames files

This commit is contained in:
Egor.Ushakov
2014-09-26 16:10:22 +04:00
parent a6bbe35082
commit 737777103b
2 changed files with 36 additions and 7 deletions
@@ -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<XSourcePosition>() {
@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);
}
}
}
@@ -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));