diff --git a/platform/platform-api/src/com/intellij/ide/util/treeView/AbstractTreeUi.java b/platform/platform-api/src/com/intellij/ide/util/treeView/AbstractTreeUi.java index 893d91942275..434ccefcd86c 100644 --- a/platform/platform-api/src/com/intellij/ide/util/treeView/AbstractTreeUi.java +++ b/platform/platform-api/src/com/intellij/ide/util/treeView/AbstractTreeUi.java @@ -1489,6 +1489,18 @@ public class AbstractTreeUi { myInitialized.setDone(); } + + if (myUpdaterState != null && !myUpdaterState.isProcessingNow()) { + UpdaterTreeState oldState = myUpdaterState; + if (!myUpdaterState.restore(null)) { + setUpdaterState(oldState); + } + + if (!isReady()) { + return; + } + } + if (myTree.isShowing()) { if (getBuilder().isToEnsureSelectionOnFocusGained() && Registry.is("ide.tree.ensureSelectionOnFocusGained")) { TreeUtil.ensureSelection(myTree); @@ -2868,7 +2880,11 @@ public class AbstractTreeUi { addNext(elementsToSelect, 0, new Runnable() { public void run() { if (getTree().isSelectionEmpty()) { - restoreSelection(currentElements); + processInnerChange(new Runnable() { + public void run() { + restoreSelection(currentElements); + } + }); } runDone(onDone); } diff --git a/platform/platform-api/src/com/intellij/ide/util/treeView/UpdaterTreeState.java b/platform/platform-api/src/com/intellij/ide/util/treeView/UpdaterTreeState.java index 5e61c53e07fd..31b5f1b70ef1 100644 --- a/platform/platform-api/src/com/intellij/ide/util/treeView/UpdaterTreeState.java +++ b/platform/platform-api/src/com/intellij/ide/util/treeView/UpdaterTreeState.java @@ -143,7 +143,9 @@ public class UpdaterTreeState { } public boolean restore(@Nullable DefaultMutableTreeNode actionNode) { - if (isProcessingNow() || !myCanRunRestore || myUi.hasNodesToUpdate()) return false; + if (isProcessingNow() || !myCanRunRestore || myUi.hasNodesToUpdate()) { + return false; + } invalidateToSelectWithRefsToParent(actionNode);