From 78231e4cf49a768243ec75110aab5eb31e908cc1 Mon Sep 17 00:00:00 2001 From: nik Date: Fri, 23 Mar 2012 18:23:07 +0400 Subject: [PATCH] IDEA-83077: UI locked up after dismissing project settings [rev by Dmitry A.] (cherry picked from commit b60cdcf) --- .../com/intellij/compiler/ModuleCompilerUtil.java | 14 ++++++++------ .../GeneralProjectSettingsElement.java | 13 ++++++------- .../ui/configuration/ModulesConfigurator.java | 6 +++--- .../openapi/roots/ModifiableRootModel.java | 4 ---- .../intellij/openapi/roots/ModuleRootModel.java | 6 ++++++ .../openapi/roots/impl/ModuleRootManagerImpl.java | 12 ++++++++++++ 6 files changed, 35 insertions(+), 20 deletions(-) diff --git a/java/compiler/openapi/src/com/intellij/compiler/ModuleCompilerUtil.java b/java/compiler/openapi/src/com/intellij/compiler/ModuleCompilerUtil.java index bf4cce63dc53..185648ac146e 100644 --- a/java/compiler/openapi/src/com/intellij/compiler/ModuleCompilerUtil.java +++ b/java/compiler/openapi/src/com/intellij/compiler/ModuleCompilerUtil.java @@ -24,6 +24,7 @@ import com.intellij.openapi.module.ModuleManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.ModifiableRootModel; import com.intellij.openapi.roots.ModuleRootManager; +import com.intellij.openapi.roots.ModuleRootModel; import com.intellij.openapi.util.Pair; import com.intellij.util.Chunk; import com.intellij.util.containers.ContainerUtil; @@ -106,15 +107,16 @@ public final class ModuleCompilerUtil { } } - public static GraphGenerator createGraphGenerator(final Map models) { - return GraphGenerator.create(CachingSemiGraph.create(new GraphGenerator.SemiGraph() { - public Collection getNodes() { + + public static GraphGenerator createGraphGenerator(final Map models) { + return GraphGenerator.create(CachingSemiGraph.create(new GraphGenerator.SemiGraph() { + public Collection getNodes() { return models.values(); } - public Iterator getIn(final ModifiableRootModel model) { + public Iterator getIn(final ModuleRootModel model) { final Module[] modules = model.getModuleDependencies(); - final List dependencies = new ArrayList(); + final List dependencies = new ArrayList(); for (Module module : modules) { dependencies.add(models.get(module)); } @@ -162,7 +164,7 @@ public final class ModuleCompilerUtil { return null; } - public static Collection> buildChunks(final Map models) { + public static Collection> buildChunks(final Map models) { return toChunkGraph(createGraphGenerator(models)).getNodes(); } } diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/GeneralProjectSettingsElement.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/GeneralProjectSettingsElement.java index 10bdcd813327..68688e1cbee0 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/GeneralProjectSettingsElement.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/GeneralProjectSettingsElement.java @@ -18,7 +18,7 @@ package com.intellij.openapi.roots.ui.configuration; import com.intellij.compiler.ModuleCompilerUtil; import com.intellij.openapi.project.Project; import com.intellij.openapi.project.ProjectBundle; -import com.intellij.openapi.roots.ModifiableRootModel; +import com.intellij.openapi.roots.ModuleRootModel; import com.intellij.openapi.roots.ui.configuration.projectRoot.StructureConfigurableContext; import com.intellij.openapi.roots.ui.configuration.projectRoot.daemon.*; import com.intellij.openapi.util.text.StringUtil; @@ -49,14 +49,13 @@ public class GeneralProjectSettingsElement extends ProjectStructureElement { @Override public void check(ProjectStructureProblemsHolder problemsHolder) { - final Graph> graph = ModuleCompilerUtil.toChunkGraph( - myContext.getModulesConfigurator().createGraphGenerator()); - final Collection> chunks = graph.getNodes(); + final Graph> graph = ModuleCompilerUtil.toChunkGraph(myContext.getModulesConfigurator().createGraphGenerator()); + final Collection> chunks = graph.getNodes(); List cycles = new ArrayList(); - for (Chunk chunk : chunks) { - final Set modules = chunk.getNodes(); + for (Chunk chunk : chunks) { + final Set modules = chunk.getNodes(); List names = new ArrayList(); - for (ModifiableRootModel model : modules) { + for (ModuleRootModel model : modules) { names.add(model.getModule().getName()); } if (modules.size() > 1) { diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ModulesConfigurator.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ModulesConfigurator.java index 35fcf40f66f7..8f60ad874018 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ModulesConfigurator.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ModulesConfigurator.java @@ -213,10 +213,10 @@ public class ModulesConfigurator implements ModulesProvider, ModuleEditor.Change myAllModulesChangeListeners.add(listener); } - public GraphGenerator createGraphGenerator() { - final Map models = new HashMap(); + public GraphGenerator createGraphGenerator() { + final Map models = new HashMap(); for (ModuleEditor moduleEditor : myModuleEditors) { - models.put(moduleEditor.getModule(), moduleEditor.getModifiableRootModel()); + models.put(moduleEditor.getModule(), moduleEditor.getRootModel()); } return ModuleCompilerUtil.createGraphGenerator(models); } diff --git a/platform/lang-api/src/com/intellij/openapi/roots/ModifiableRootModel.java b/platform/lang-api/src/com/intellij/openapi/roots/ModifiableRootModel.java index 4a355e58d60c..2277d4f19954 100644 --- a/platform/lang-api/src/com/intellij/openapi/roots/ModifiableRootModel.java +++ b/platform/lang-api/src/com/intellij/openapi/roots/ModifiableRootModel.java @@ -172,10 +172,6 @@ public interface ModifiableRootModel extends ModuleRootModel { void setExcludeExplodedDirectory(boolean excludeExplodedDir); - @NotNull Module[] getModuleDependencies(); - - @NotNull Module[] getModuleDependencies(boolean includeTests); - boolean isWritable(); void setRootUrls(OrderRootType orderRootType, String[] urls); diff --git a/platform/lang-api/src/com/intellij/openapi/roots/ModuleRootModel.java b/platform/lang-api/src/com/intellij/openapi/roots/ModuleRootModel.java index ba8b609dacad..70bc9e503190 100644 --- a/platform/lang-api/src/com/intellij/openapi/roots/ModuleRootModel.java +++ b/platform/lang-api/src/com/intellij/openapi/roots/ModuleRootModel.java @@ -193,4 +193,10 @@ public interface ModuleRootModel { @NotNull String[] getRootUrls(OrderRootType rootType); T getModuleExtension(Class klass); + + @NotNull + Module[] getModuleDependencies(); + + @NotNull + Module[] getModuleDependencies(boolean includeTests); } diff --git a/platform/lang-impl/src/com/intellij/openapi/roots/impl/ModuleRootManagerImpl.java b/platform/lang-impl/src/com/intellij/openapi/roots/impl/ModuleRootManagerImpl.java index de4ec3acdf7a..18f6aa3d2a02 100644 --- a/platform/lang-impl/src/com/intellij/openapi/roots/impl/ModuleRootManagerImpl.java +++ b/platform/lang-impl/src/com/intellij/openapi/roots/impl/ModuleRootManagerImpl.java @@ -267,6 +267,18 @@ public class ModuleRootManagerImpl extends ModuleRootManager implements ModuleCo return myRootModel.getModuleDependencies(includeTests); } + @NotNull + @Override + public Module[] getModuleDependencies() { + return myRootModel.getModuleDependencies(); + } + + @NotNull + @Override + public Module[] getModuleDependencies(boolean includeTests) { + return myRootModel.getModuleDependencies(includeTests); + } + public boolean isDependsOn(Module module) { return myRootModel.isDependsOn(module); }