avoid potentially long VFS access when updating project view during "scanning files to index" phase (IDEA-151067)

This commit is contained in:
peter
2016-02-02 20:23:54 +01:00
parent 4fd10c881c
commit e4597ede43
@@ -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();
}