remember 100 last debugger tree states to keep expansion across frames

This commit is contained in:
Egor.Ushakov
2017-06-06 15:41:28 +03:00
parent 8b891ddee0
commit aed6b68d44
2 changed files with 21 additions and 11 deletions
@@ -277,6 +277,7 @@ debugger.capture.points.annotations=false
debugger.resume.yourkit.threads=false
debugger.keep.step.requests=false
debugger.enable.memory.view=true
debugger.tree.states.depth=100
analyze.exceptions.on.the.fly=false
analyze.exceptions.on.the.fly.description=Automatically analyze clipboard on frame activation,\
@@ -51,18 +51,24 @@ import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.awt.*;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* @author nik
*/
public abstract class XVariablesViewBase extends XDebugView {
private final XDebuggerTreePanel myTreePanel;
private XDebuggerTreeState myTreeState;
private XDebuggerTreeRestorer myTreeRestorer;
private Object myFrameEqualityObject;
private MySelectionListener mySelectionListener;
private XDebuggerTreeRestorer myTreeRestorer;
private final Map<Object, XDebuggerTreeState> myTreeStates = new LinkedHashMap<Object, XDebuggerTreeState>() {
@Override
protected boolean removeEldestEntry(Map.Entry<Object, XDebuggerTreeState> eldest) {
return size() > Registry.get("debugger.tree.states.depth").asInteger();
}
};
protected XVariablesViewBase(@NotNull Project project, @NotNull XDebuggerEditorsProvider editorsProvider, @Nullable XValueMarkers<?, ?> markers) {
myTreePanel = new XDebuggerTreePanel(
project, editorsProvider, this, null, this instanceof XWatchesView ? XDebuggerActions.WATCHES_TREE_POPUP_GROUP : XDebuggerActions.VARIABLES_TREE_POPUP_GROUP, markers);
@@ -79,11 +85,14 @@ public abstract class XVariablesViewBase extends XDebugView {
project.putUserData(XVariablesView.DEBUG_VARIABLES, new XVariablesView.InlineVariablesInfo());
clearInlays(tree);
Object newEqualityObject = stackFrame.getEqualityObject();
if (myFrameEqualityObject != null && newEqualityObject != null && myFrameEqualityObject.equals(newEqualityObject)
&& myTreeState != null) {
disposeTreeRestorer();
myTreeRestorer = myTreeState.restoreState(tree);
if (newEqualityObject != null) {
XDebuggerTreeState state = myTreeStates.get(newEqualityObject);
if (state != null) {
disposeTreeRestorer();
myTreeRestorer = state.restoreState(tree);
}
}
if (position != null && Registry.is("debugger.valueTooltipAutoShowOnSelection")) {
registerInlineEvaluator(stackFrame, position, project);
}
@@ -120,9 +129,9 @@ public abstract class XVariablesViewBase extends XDebugView {
protected void saveCurrentTreeState(@Nullable XStackFrame stackFrame) {
removeSelectionListener();
myFrameEqualityObject = stackFrame != null ? stackFrame.getEqualityObject() : null;
if (myTreeRestorer == null || myTreeRestorer.isFinished()) {
myTreeState = XDebuggerTreeState.saveState(getTree());
Object equalityObject = stackFrame != null ? stackFrame.getEqualityObject() : null;
if (equalityObject != null && (myTreeRestorer == null || myTreeRestorer.isFinished())) {
myTreeStates.put(equalityObject, XDebuggerTreeState.saveState(getTree()));
}
disposeTreeRestorer();
}