mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
setup module with respect to dependencies ( IDEA-54581 )
This commit is contained in:
+6
-1
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+6
-1
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user