From 57461b809679d4eca786bc69d9698be973ef7af9 Mon Sep 17 00:00:00 2001 From: nik Date: Wed, 8 Jun 2011 16:16:34 +0400 Subject: [PATCH] improved modules dependencies diagram, added 'Show module cycles' intention action --- .../com/intellij/openapi/module/ModuleManager.java | 11 ++++++++++- .../openapi/module/impl/ModuleManagerImpl.java | 14 ++++++++++---- .../openapi/roots/impl/OrderEnumeratorBase.java | 8 +++++++- 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/platform/lang-api/src/com/intellij/openapi/module/ModuleManager.java b/platform/lang-api/src/com/intellij/openapi/module/ModuleManager.java index 1bc94d4a913b..69a3829d41e7 100644 --- a/platform/lang-api/src/com/intellij/openapi/module/ModuleManager.java +++ b/platform/lang-api/src/com/intellij/openapi/module/ModuleManager.java @@ -130,7 +130,16 @@ public abstract class ModuleManager { * @return the module dependency graph. */ @NotNull public abstract Graph moduleGraph(); - + + /** + * Returns the graph of dependencies between modules in the project. + * + * @param includeTests whether test-only dependencies should be included + * @return the module dependency graph. + * @since 11.0 + */ + @NotNull public abstract Graph moduleGraph(boolean includeTests); + /** * Adds a listener for receiving notifications to the module structure of the project. * diff --git a/platform/lang-impl/src/com/intellij/openapi/module/impl/ModuleManagerImpl.java b/platform/lang-impl/src/com/intellij/openapi/module/impl/ModuleManagerImpl.java index 2621ebdce55e..5cafe2cb3d5b 100644 --- a/platform/lang-impl/src/com/intellij/openapi/module/impl/ModuleManagerImpl.java +++ b/platform/lang-impl/src/com/intellij/openapi/module/impl/ModuleManagerImpl.java @@ -534,8 +534,14 @@ public class ModuleManagerImpl extends ModuleManager implements ProjectComponent @NotNull public Graph moduleGraph() { + return moduleGraph(true); + } + + @NotNull + @Override + public Graph moduleGraph(boolean includeTests) { ApplicationManager.getApplication().assertReadAccessAllowed(); - return myModuleModel.moduleGraph(); + return myModuleModel.moduleGraph(includeTests); } @NotNull public List getModuleDependentModules(@NotNull Module module) { @@ -782,18 +788,18 @@ public class ModuleManagerImpl extends ModuleManager implements ProjectComponent } private Comparator moduleDependencyComparator() { - DFSTBuilder builder = new DFSTBuilder(moduleGraph()); + DFSTBuilder builder = new DFSTBuilder(moduleGraph(true)); return builder.comparator(); } - private Graph moduleGraph() { + private Graph moduleGraph(final boolean includeTests) { return GraphGenerator.create(CachingSemiGraph.create(new GraphGenerator.SemiGraph() { public Collection getNodes() { return myPathToModule.values(); } public Iterator getIn(Module m) { - Module[] dependentModules = ModuleRootManager.getInstance(m).getDependencies(); + Module[] dependentModules = ModuleRootManager.getInstance(m).getDependencies(includeTests); return Arrays.asList(dependentModules).iterator(); } })); diff --git a/platform/lang-impl/src/com/intellij/openapi/roots/impl/OrderEnumeratorBase.java b/platform/lang-impl/src/com/intellij/openapi/roots/impl/OrderEnumeratorBase.java index 5a22cc1f7a22..d4fab01e0fc1 100644 --- a/platform/lang-impl/src/com/intellij/openapi/roots/impl/OrderEnumeratorBase.java +++ b/platform/lang-impl/src/com/intellij/openapi/roots/impl/OrderEnumeratorBase.java @@ -289,10 +289,16 @@ abstract class OrderEnumeratorBase extends OrderEnumerator implements OrderEnume forEach(new Processor() { @Override public boolean process(OrderEntry orderEntry) { - if (orderEntry instanceof ModuleSourceOrderEntry) { + if (myRecursively && orderEntry instanceof ModuleSourceOrderEntry) { final Module module = ((ModuleSourceOrderEntry)orderEntry).getRootModel().getModule(); return processor.process(module); } + else if (!myRecursively && orderEntry instanceof ModuleOrderEntry) { + final Module module = ((ModuleOrderEntry)orderEntry).getModule(); + if (module != null) { + return processor.process(module); + } + } return true; } });