circular dependencies warnings: don't show cycles which were reduced to single element after excluding dummy nodes

This commit is contained in:
nik
2015-05-19 15:16:34 +03:00
parent 99898e48bf
commit c54f23ad74
@@ -21,6 +21,7 @@ import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.project.ProjectBundle;
import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.openapi.roots.ContentEntry;
import com.intellij.openapi.roots.ModuleRootModel;
import com.intellij.openapi.roots.ui.configuration.projectRoot.ProjectSdksModel;
import com.intellij.openapi.roots.ui.configuration.projectRoot.StructureConfigurableContext;
@@ -72,9 +73,9 @@ public class GeneralProjectSettingsElement extends ProjectStructureElement {
Graph<ModuleSourceSet> graph = ModuleCompilerUtil.createModuleSourceDependenciesGraph(myContext.getModulesConfigurator());
Collection<Chunk<ModuleSourceSet>> allSourceSetCycles = extractCycles(
GraphAlgorithms.getInstance().computeStronglyConnectedComponents(graph));
List<Chunk<ModuleSourceSet>> sourceSetCycles = removeDummyNodes(filterDuplicates(allSourceSetCycles));
Collection<Chunk<ModuleSourceSet>> chunks = GraphAlgorithms.getInstance().computeStronglyConnectedComponents(graph);
List<Chunk<ModuleSourceSet>> sourceSetCycles =
removeSingleElementChunks(removeDummyNodes(filterDuplicates(removeSingleElementChunks(chunks))));
List<String> cycles = new ArrayList<String>();
@@ -128,7 +129,13 @@ public class GeneralProjectSettingsElement extends ProjectStructureElement {
private boolean isDummy(ModuleSourceSet set) {
JavaSourceRootType type = set.getType() == ModuleSourceSet.Type.PRODUCTION ? JavaSourceRootType.SOURCE : JavaSourceRootType.TEST_SOURCE;
return myContext.getModulesConfigurator().getRootModel(set.getModule()).getSourceRoots(type).isEmpty();
ModuleRootModel rootModel = myContext.getModulesConfigurator().getRootModel(set.getModule());
for (ContentEntry entry : rootModel.getContentEntries()) {
if (!entry.getSourceFolders(type).isEmpty()) {
return false;
}
}
return true;
}
private boolean containsModuleWithInheritedSdk() {
@@ -141,7 +148,7 @@ public class GeneralProjectSettingsElement extends ProjectStructureElement {
return false;
}
private static Collection<Chunk<ModuleSourceSet>> extractCycles(Collection<Chunk<ModuleSourceSet>> chunks) {
private static List<Chunk<ModuleSourceSet>> removeSingleElementChunks(Collection<Chunk<ModuleSourceSet>> chunks) {
return ContainerUtil.filter(chunks, new Condition<Chunk<ModuleSourceSet>>() {
@Override
public boolean value(Chunk<ModuleSourceSet> chunk) {