From e4597ede43311e6a1faa5eea59d78666ba63d528 Mon Sep 17 00:00:00 2001 From: peter Date: Tue, 2 Feb 2016 20:23:54 +0100 Subject: [PATCH] avoid potentially long VFS access when updating project view during "scanning files to index" phase (IDEA-151067) --- .../intellij/ide/projectView/impl/ProjectViewPane.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/ide/projectView/impl/ProjectViewPane.java b/platform/lang-impl/src/com/intellij/ide/projectView/impl/ProjectViewPane.java index 9f15bffa9a88..52c17502e4a7 100644 --- a/platform/lang-impl/src/com/intellij/ide/projectView/impl/ProjectViewPane.java +++ b/platform/lang-impl/src/com/intellij/ide/projectView/impl/ProjectViewPane.java @@ -36,6 +36,7 @@ import com.intellij.openapi.actionSystem.DefaultActionGroup; import com.intellij.openapi.actionSystem.Presentation; import com.intellij.openapi.actionSystem.ToggleAction; import com.intellij.openapi.project.DumbAware; +import com.intellij.openapi.project.DumbService; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.InvalidDataException; import com.intellij.openapi.util.JDOMExternalizerUtil; @@ -156,8 +157,11 @@ public class ProjectViewPane extends AbstractProjectViewPSIPane { final PsiDirectory dir = (PsiDirectory)element; final ProjectTreeStructure treeStructure = (ProjectTreeStructure)myTreeStructure; PsiDirectory dirToUpdateFrom = dir; - if (!treeStructure.isFlattenPackages() && treeStructure.isHideEmptyMiddlePackages()) { - // optimization: this check makes sense only if flattenPackages == false && HideEmptyMiddle == true + + // optimization + // isEmptyMiddleDirectory can be slow when project VFS is not fully loaded (initial dumb mode). + // It's easiest to disable the optimization in any dumb mode + if (!treeStructure.isFlattenPackages() && treeStructure.isHideEmptyMiddlePackages() && !DumbService.isDumb(myProject)) { while (dirToUpdateFrom != null && ProjectViewDirectoryHelper.getInstance(myProject).isEmptyMiddleDirectory(dirToUpdateFrom, true)) { dirToUpdateFrom = dirToUpdateFrom.getParentDirectory(); }