From 00cd871b05ea57dfd875801e3b67aecd7d5f942d Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Mon, 31 Aug 2009 21:23:29 +0400 Subject: [PATCH] fix red code --- .../intellij/compiler/ModuleCompilerUtil.java | 63 ++++++++++++++++++ .../ui/configuration/ModulesConfigurator.java | 65 +------------------ .../daemon/impl/quickfix/OrderEntryFix.java | 4 +- 3 files changed, 66 insertions(+), 66 deletions(-) diff --git a/java/compiler/openapi/src/com/intellij/compiler/ModuleCompilerUtil.java b/java/compiler/openapi/src/com/intellij/compiler/ModuleCompilerUtil.java index 8e4fd43205a3..271b7bbb1b5f 100644 --- a/java/compiler/openapi/src/com/intellij/compiler/ModuleCompilerUtil.java +++ b/java/compiler/openapi/src/com/intellij/compiler/ModuleCompilerUtil.java @@ -22,7 +22,9 @@ import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.module.Module; 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.util.Pair; import com.intellij.util.Chunk; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.graph.CachingSemiGraph; @@ -31,6 +33,7 @@ import com.intellij.util.graph.Graph; import com.intellij.util.graph.GraphGenerator; import gnu.trove.TIntArrayList; import gnu.trove.TIntProcedure; +import org.jetbrains.annotations.Nullable; import java.util.*; @@ -147,4 +150,64 @@ public final class ModuleCompilerUtil { application.runReadAction(sort); } } + + 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) { + final Module[] modules = model.getModuleDependencies(); + final List dependencies = new ArrayList(); + for (Module module : modules) { + dependencies.add(models.get(module)); + } + return dependencies.iterator(); + } + })); + } + + /** + * @return pair of modules which become circular after adding dependency, or null if all remains OK + */ + @Nullable + public static Pair addingDependencyFormsCircularity(final Module currentModule, Module toDependOn) { + assert currentModule != toDependOn; + // whatsa lotsa of @&#^%$ codes-a! + + final Map models = new LinkedHashMap(); + Project project = currentModule.getProject(); + for (Module module : ModuleManager.getInstance(project).getModules()) { + ModifiableRootModel model = ModuleRootManager.getInstance(module).getModifiableModel(); + models.put(module, model); + } + ModifiableRootModel currentModel = models.get(currentModule); + ModifiableRootModel toDependOnModel = models.get(toDependOn); + Collection> nodesBefore = buildChunks(models); + for (Chunk chunk : nodesBefore) { + if (chunk.containsNode(toDependOnModel) && chunk.containsNode(currentModel)) return null; // they circular already + } + + try { + currentModel.addModuleOrderEntry(toDependOn); + Collection> nodesAfter = buildChunks(models); + for (Chunk chunk : nodesAfter) { + if (chunk.containsNode(toDependOnModel) && chunk.containsNode(currentModel)) { + Iterator nodes = chunk.getNodes().iterator(); + return Pair.create(nodes.next().getModule(), nodes.next().getModule()); + } + } + } + finally { + for (ModifiableRootModel model : models.values()) { + model.dispose(); + } + } + return null; + } + + 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/ModulesConfigurator.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ModulesConfigurator.java index 1ce59274e757..14027a2945f8 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 @@ -19,7 +19,6 @@ import com.intellij.openapi.project.ProjectBundle; import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.roots.LibraryOrderEntry; import com.intellij.openapi.roots.ModifiableRootModel; -import com.intellij.openapi.roots.ModuleRootManager; import com.intellij.openapi.roots.ModuleRootModel; import com.intellij.openapi.roots.impl.ProjectRootManagerImpl; import com.intellij.openapi.roots.ui.configuration.actions.ModuleDeleteProvider; @@ -29,12 +28,9 @@ import com.intellij.openapi.roots.ui.configuration.projectRoot.StructureConfigur import com.intellij.openapi.ui.Messages; import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.Computable; -import com.intellij.openapi.util.Pair; import com.intellij.packaging.artifacts.Artifact; import com.intellij.packaging.artifacts.ModifiableArtifactModel; import com.intellij.projectImport.ProjectImportBuilder; -import com.intellij.util.Chunk; -import com.intellij.util.graph.CachingSemiGraph; import com.intellij.util.graph.GraphGenerator; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -191,24 +187,7 @@ public class ModulesConfigurator implements ModulesProvider, ModuleEditor.Change for (ModuleEditor moduleEditor : myModuleEditors) { models.put(moduleEditor.getModule(), moduleEditor.getModifiableRootModel()); } - return createGraphGenerator(models); - } - - private 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) { - final Module[] modules = model.getModuleDependencies(); - final List dependencies = new ArrayList(); - for (Module module : modules) { - dependencies.add(models.get(module)); - } - return dependencies.iterator(); - } - })); + return ModuleCompilerUtil.createGraphGenerator(models); } public void apply() throws ConfigurationException { @@ -499,46 +478,4 @@ public class ModulesConfigurator implements ModulesProvider, ModuleEditor.Change } } - /** - * @return pair of modules which become circular after adding dependency, or null if all remains OK - */ - @Nullable - public static Pair addingDependencyFormsCircularity(final Module currentModule, Module toDependOn) { - assert currentModule != toDependOn; - // whatsa lotsa of @&#^%$ codes-a! - - final Map models = new LinkedHashMap(); - Project project = currentModule.getProject(); - for (Module module : ModuleManager.getInstance(project).getModules()) { - ModifiableRootModel model = ModuleRootManager.getInstance(module).getModifiableModel(); - models.put(module, model); - } - ModifiableRootModel currentModel = models.get(currentModule); - ModifiableRootModel toDependOnModel = models.get(toDependOn); - Collection> nodesBefore = buildChunks(models); - for (Chunk chunk : nodesBefore) { - if (chunk.containsNode(toDependOnModel) && chunk.containsNode(currentModel)) return null; // they circular already - } - - try { - currentModel.addModuleOrderEntry(toDependOn); - Collection> nodesAfter = buildChunks(models); - for (Chunk chunk : nodesAfter) { - if (chunk.containsNode(toDependOnModel) && chunk.containsNode(currentModel)) { - Iterator nodes = chunk.getNodes().iterator(); - return Pair.create(nodes.next().getModule(), nodes.next().getModule()); - } - } - } - finally { - for (ModifiableRootModel model : models.values()) { - model.dispose(); - } - } - return null; - } - - private static Collection> buildChunks(final Map models) { - return ModuleCompilerUtil.toChunkGraph(createGraphGenerator(models)).getNodes(); - } } diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/OrderEntryFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/OrderEntryFix.java index 8ff98eb60030..12f62906640f 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/OrderEntryFix.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/OrderEntryFix.java @@ -18,7 +18,6 @@ import com.intellij.openapi.projectRoots.ex.JavaSdkUtil; import com.intellij.openapi.roots.*; import com.intellij.openapi.roots.impl.OrderEntryUtil; import com.intellij.openapi.roots.libraries.Library; -import com.intellij.openapi.roots.ui.configuration.ModulesConfigurator; import com.intellij.openapi.ui.Messages; import com.intellij.openapi.util.Pair; import com.intellij.openapi.vfs.VfsUtil; @@ -28,6 +27,7 @@ import com.intellij.psi.*; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.util.PsiUtil; import com.intellij.util.IncorrectOperationException; +import com.intellij.compiler.ModuleCompilerUtil; import gnu.trove.THashSet; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -190,7 +190,7 @@ public abstract class OrderEntryFix implements IntentionAction, LocalQuickFix { } } }; - final Pair circularModules = ModulesConfigurator.addingDependencyFormsCircularity(currentModule, classModule); + final Pair circularModules = ModuleCompilerUtil.addingDependencyFormsCircularity(currentModule, classModule); if (circularModules == null) { doit.run(); }