setup module with respect to dependencies ( IDEA-54581 )

This commit is contained in:
anna
2010-05-31 13:07:33 +04:00
parent 8c610c0455
commit 559a74ac8f
3 changed files with 38 additions and 11 deletions
@@ -31,6 +31,7 @@ import org.jetbrains.annotations.Nullable;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
/**
@@ -77,7 +78,11 @@ public class JavaRunConfigurationModule extends RunConfigurationModule {
return Arrays.asList(ModuleManager.getInstance(project).getModules());
}
else {
return ModuleUtil.collectModulesDependsOn(modules);
final Set<Module> result = new HashSet<Module>();
for (Module module : modules) {
ModuleUtil.collectModulesDependsOn(module, result);
}
return result;
}
}
@@ -30,6 +30,8 @@ import org.jetbrains.annotations.NotNull;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
public abstract class ModuleBasedConfiguration<ConfigurationModule extends RunConfigurationModule> extends RuntimeConfiguration {
private static final Logger LOG = Logger.getInstance("#com.intellij.execution.configurations.ModuleBasedConfiguration");
@@ -106,7 +108,10 @@ public abstract class ModuleBasedConfiguration<ConfigurationModule extends RunCo
public void restoreOriginalModule(final Module originalModule) {
if (originalModule == null) return;
final Module[] classModules = getModules();
final Collection<Module> modules = ModuleUtil.collectModulesDependsOn(Arrays.asList(classModules));
final Set<Module> modules = new HashSet<Module>();
for (Module classModule : classModules) {
ModuleUtil.collectModulesDependsOn(classModule, modules);
}
if (modules.contains(originalModule)) setModule(originalModule);
}
}
@@ -169,6 +169,7 @@ public class ModuleUtil {
return element.getUserData(KEY_MODULE);
}
//ignores export flag
public static void getDependencies(@NotNull Module module, Set<Module> modules) {
if (modules.contains(module)) return;
modules.add(module);
@@ -178,16 +179,32 @@ public class ModuleUtil {
}
}
public static Collection<Module> collectModulesDependsOn(@NotNull final Collection<Module> modules) {
if (modules.isEmpty()) return Collections.emptyList();
final HashSet<Module> result = new HashSet<Module>();
final Project project = modules.iterator().next().getProject();
final ModuleManager moduleManager = ModuleManager.getInstance(project);
for (final Module module : modules) {
result.add(module);
result.addAll(moduleManager.getModuleDependentModules(module));
/**
* collect transitive module dependants
* @param module to find dependencies on
* @param result resulted set
*/
public static void collectModulesDependsOn(@NotNull final Module module, final Set<Module> result) {
if (result.contains(module)) return;
result.add(module);
final ModuleManager moduleManager = ModuleManager.getInstance(module.getProject());
final List<Module> dependentModules = moduleManager.getModuleDependentModules(module);
for (final Module dependentModule : dependentModules) {
final OrderEntry[] orderEntries = ModuleRootManager.getInstance(dependentModule).getOrderEntries();
for (OrderEntry o : orderEntries) {
if (o instanceof ModuleOrderEntry) {
final ModuleOrderEntry orderEntry = (ModuleOrderEntry)o;
if (orderEntry.getModule() == module) {
if (orderEntry.isExported()) {
collectModulesDependsOn(dependentModule, result);
} else {
result.add(dependentModule);
}
break;
}
}
}
}
return result;
}
@NotNull