mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
use less getTopFrame (which is synchronous)
This commit is contained in:
@@ -80,13 +80,12 @@ public interface XDebugSession extends AbstractDebuggerSession {
|
||||
|
||||
void showExecutionPoint();
|
||||
|
||||
void setCurrentStackFrame(@NotNull XExecutionStack executionStack, @NotNull XStackFrame frame);
|
||||
void setCurrentStackFrame(@NotNull XExecutionStack executionStack, @NotNull XStackFrame frame, boolean isTopFrame);
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #setCurrentStackFrame(com.intellij.xdebugger.frame.XExecutionStack, com.intellij.xdebugger.frame.XStackFrame)} instead
|
||||
* @deprecated use {@link #setCurrentStackFrame(com.intellij.xdebugger.frame.XExecutionStack, com.intellij.xdebugger.frame.XStackFrame, boolean)} instead
|
||||
*/
|
||||
@SuppressWarnings("UnusedDeclaration")
|
||||
void setCurrentStackFrame(@NotNull XStackFrame frame);
|
||||
void setCurrentStackFrame(@NotNull XExecutionStack executionStack, @NotNull XStackFrame frame);
|
||||
|
||||
/**
|
||||
* Call this method to setup custom icon and/or error message (it will be shown in tooltip) for breakpoint
|
||||
|
||||
@@ -97,6 +97,7 @@ public class XDebugSessionImpl implements XDebugSession {
|
||||
private XSuspendContext mySuspendContext;
|
||||
private XExecutionStack myCurrentExecutionStack;
|
||||
private XStackFrame myCurrentStackFrame;
|
||||
private boolean myIsTopFrame;
|
||||
private XSourcePosition myCurrentPosition;
|
||||
private final AtomicBoolean myPaused = new AtomicBoolean();
|
||||
private MyDependentBreakpointListener myDependentBreakpointListener;
|
||||
@@ -560,7 +561,7 @@ public class XDebugSessionImpl implements XDebugSession {
|
||||
}
|
||||
|
||||
private boolean isTopFrameSelected() {
|
||||
return myCurrentExecutionStack != null && myCurrentExecutionStack.getTopFrame() == myCurrentStackFrame;
|
||||
return myCurrentExecutionStack != null && myIsTopFrame;
|
||||
}
|
||||
|
||||
|
||||
@@ -571,7 +572,7 @@ public class XDebugSessionImpl implements XDebugSession {
|
||||
if (executionStack != null) {
|
||||
XStackFrame topFrame = executionStack.getTopFrame();
|
||||
if (topFrame != null) {
|
||||
setCurrentStackFrame(executionStack, topFrame);
|
||||
setCurrentStackFrame(executionStack, topFrame, true);
|
||||
myDebuggerManager.showExecutionPosition();
|
||||
}
|
||||
}
|
||||
@@ -579,17 +580,18 @@ public class XDebugSessionImpl implements XDebugSession {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCurrentStackFrame(@NotNull final XStackFrame frame) {
|
||||
setCurrentStackFrame(myCurrentExecutionStack, frame);
|
||||
public void setCurrentStackFrame(@NotNull XExecutionStack executionStack, @NotNull XStackFrame frame) {
|
||||
setCurrentStackFrame(myCurrentExecutionStack, frame, frame == executionStack.getTopFrame());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCurrentStackFrame(@NotNull XExecutionStack executionStack, @NotNull XStackFrame frame) {
|
||||
public void setCurrentStackFrame(@NotNull XExecutionStack executionStack, @NotNull XStackFrame frame, boolean isTopFrame) {
|
||||
if (mySuspendContext == null) return;
|
||||
|
||||
boolean frameChanged = myCurrentStackFrame != frame;
|
||||
myCurrentExecutionStack = executionStack;
|
||||
myCurrentStackFrame = frame;
|
||||
myIsTopFrame = isTopFrame;
|
||||
activateSession();
|
||||
|
||||
if (frameChanged) {
|
||||
|
||||
@@ -188,10 +188,10 @@ public class XFramesView extends XDebugView {
|
||||
return toolbar;
|
||||
}
|
||||
|
||||
private StackFramesListBuilder getOrCreateBuilder(XExecutionStack executionStack) {
|
||||
private StackFramesListBuilder getOrCreateBuilder(XExecutionStack executionStack, XDebugSession session) {
|
||||
StackFramesListBuilder builder = myBuilders.get(executionStack);
|
||||
if (builder == null) {
|
||||
builder = new StackFramesListBuilder(executionStack);
|
||||
builder = new StackFramesListBuilder(executionStack, session);
|
||||
myBuilders.put(executionStack, builder);
|
||||
}
|
||||
return builder;
|
||||
@@ -244,7 +244,6 @@ public class XFramesView extends XDebugView {
|
||||
}
|
||||
myToolbar.setAddSeparatorFirst(!invisible);
|
||||
updateFrames(activeExecutionStack, session);
|
||||
myListenersEnabled = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -270,19 +269,14 @@ public class XFramesView extends XDebugView {
|
||||
return;
|
||||
}
|
||||
if (mySelectedStack != null) {
|
||||
getOrCreateBuilder(mySelectedStack).stop();
|
||||
getOrCreateBuilder(mySelectedStack, session).stop();
|
||||
}
|
||||
|
||||
mySelectedStack = executionStack;
|
||||
if (executionStack != null) {
|
||||
StackFramesListBuilder builder = getOrCreateBuilder(executionStack);
|
||||
StackFramesListBuilder builder = getOrCreateBuilder(executionStack, session);
|
||||
builder.initModel(myFramesList.getModel());
|
||||
builder.start();
|
||||
XStackFrame topFrame = executionStack.getTopFrame();
|
||||
if (topFrame != null) {
|
||||
myFramesList.setSelectedValue(topFrame, true);
|
||||
session.setCurrentStackFrame(executionStack, topFrame);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -303,7 +297,7 @@ public class XFramesView extends XDebugView {
|
||||
if (selected instanceof XStackFrame) {
|
||||
XDebugSession session = getSession(e);
|
||||
if (session != null) {
|
||||
session.setCurrentStackFrame(mySelectedStack, (XStackFrame)selected);
|
||||
session.setCurrentStackFrame(mySelectedStack, (XStackFrame)selected, myFramesList.getSelectedIndex() == 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -312,21 +306,15 @@ public class XFramesView extends XDebugView {
|
||||
private XExecutionStack myExecutionStack;
|
||||
private final List<XStackFrame> myStackFrames;
|
||||
private String myErrorMessage;
|
||||
private int myNextFrameIndex;
|
||||
private int myNextFrameIndex = 0;
|
||||
private boolean myRunning;
|
||||
private boolean myAllFramesLoaded;
|
||||
private final XDebugSession mySession;
|
||||
|
||||
private StackFramesListBuilder(final XExecutionStack executionStack) {
|
||||
private StackFramesListBuilder(final XExecutionStack executionStack, XDebugSession session) {
|
||||
myExecutionStack = executionStack;
|
||||
mySession = session;
|
||||
myStackFrames = new ArrayList<XStackFrame>();
|
||||
XStackFrame topFrame = executionStack.getTopFrame();
|
||||
if (topFrame != null) {
|
||||
myStackFrames.add(topFrame);
|
||||
myNextFrameIndex = 1;
|
||||
}
|
||||
else {
|
||||
myNextFrameIndex = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -336,6 +324,9 @@ public class XFramesView extends XDebugView {
|
||||
public void run() {
|
||||
myStackFrames.addAll(stackFrames);
|
||||
addFrameListElements(stackFrames, last);
|
||||
if (myNextFrameIndex == 0) {
|
||||
selectTopFrame();
|
||||
}
|
||||
myNextFrameIndex += stackFrames.size();
|
||||
myAllFramesLoaded = last;
|
||||
if (last) {
|
||||
@@ -399,6 +390,15 @@ public class XFramesView extends XDebugView {
|
||||
myRunning = false;
|
||||
}
|
||||
|
||||
private void selectTopFrame() {
|
||||
if (!myStackFrames.isEmpty()) {
|
||||
XStackFrame topFrame = myStackFrames.get(0);
|
||||
myFramesList.setSelectedValue(topFrame, true);
|
||||
mySession.setCurrentStackFrame(mySelectedStack, topFrame, true);
|
||||
myListenersEnabled = true;
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public void initModel(final DefaultListModel model) {
|
||||
model.removeAllElements();
|
||||
@@ -411,6 +411,7 @@ public class XFramesView extends XDebugView {
|
||||
else if (!myAllFramesLoaded) {
|
||||
model.addElement(null);
|
||||
}
|
||||
selectTopFrame();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user