diff --git a/platform/lang-impl/src/com/intellij/ide/projectView/impl/AsyncProjectViewSupport.java b/platform/lang-impl/src/com/intellij/ide/projectView/impl/AsyncProjectViewSupport.java index d0e5b77246cb..7324b45e5c99 100644 --- a/platform/lang-impl/src/com/intellij/ide/projectView/impl/AsyncProjectViewSupport.java +++ b/platform/lang-impl/src/com/intellij/ide/projectView/impl/AsyncProjectViewSupport.java @@ -51,7 +51,7 @@ class AsyncProjectViewSupport { @NotNull JTree tree, @NotNull AbstractTreeStructure structure, @NotNull Comparator comparator) { - myStructureTreeModel = new StructureTreeModel(structure, comparator); + myStructureTreeModel = new StructureTreeModel<>(structure, comparator); myAsyncTreeModel = new AsyncTreeModel(myStructureTreeModel, parent); myAsyncTreeModel.setRootImmediately(myStructureTreeModel.getRootImmediately()); myNodeUpdater = new ProjectFileNodeUpdater(project, myStructureTreeModel.getInvoker()) { @@ -165,8 +165,8 @@ class AsyncProjectViewSupport { SmartList pathsToSelect = new SmartList<>(); TreeVisitor visitor = AbstractProjectViewPane.createVisitor(element, file, pathsToSelect); if (visitor != null) { - //noinspection CodeBlock2Expr expand(tree, promise -> { + myNodeUpdater.updateImmediately(); myAsyncTreeModel .accept(visitor) .onProcessed(path -> { diff --git a/platform/platform-impl/src/com/intellij/ui/tree/project/ProjectFileNodeUpdater.java b/platform/platform-impl/src/com/intellij/ui/tree/project/ProjectFileNodeUpdater.java index 6acd30efed5b..89cea45536d0 100644 --- a/platform/platform-impl/src/com/intellij/ui/tree/project/ProjectFileNodeUpdater.java +++ b/platform/platform-impl/src/com/intellij/ui/tree/project/ProjectFileNodeUpdater.java @@ -148,7 +148,7 @@ public abstract class ProjectFileNodeUpdater { * Usually, it is needed to find an added file in a tree right after adding. */ public void updateImmediately() { - invoker.runOrInvokeLater(this::onInvokerThread); + invoker.runOrInvokeLater(() -> onInvokerThread(true)); } /** @@ -180,11 +180,11 @@ public abstract class ProjectFileNodeUpdater { } if (start) { LOG.debug("start collecting files to update @ ", invoker); - invoker.invokeLater(this::onInvokerThread, getUpdatingDelay()); + invoker.invokeLater(() -> onInvokerThread(false), getUpdatingDelay()); } } - private void onInvokerThread() { + private void onInvokerThread(boolean now) { Set files; long startedAt; boolean fromRoot; @@ -201,7 +201,7 @@ public abstract class ProjectFileNodeUpdater { root = false; reference.set(null); } - else if (size == files.size()) { + else if (now || size == files.size()) { reference.set(null); } else { @@ -210,7 +210,7 @@ public abstract class ProjectFileNodeUpdater { } if (restart) { LOG.debug("continue collecting files to update @ ", invoker); - invoker.invokeLater(this::onInvokerThread, getUpdatingDelay()); + invoker.invokeLater(() -> onInvokerThread(false), getUpdatingDelay()); } else { LOG.debug("spent ", System.currentTimeMillis() - startedAt, "ms to collect ", size, " files to update @ ", invoker);