mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
avoid collectDependsOn when target module is known (IDEA-175737)
This commit is contained in:
@@ -38,10 +38,7 @@ import com.intellij.openapi.module.ModuleManager;
|
||||
import com.intellij.openapi.options.Configurable;
|
||||
import com.intellij.openapi.options.ConfigurationException;
|
||||
import com.intellij.openapi.projectRoots.Sdk;
|
||||
import com.intellij.openapi.roots.CompilerModuleExtension;
|
||||
import com.intellij.openapi.roots.ContentEntry;
|
||||
import com.intellij.openapi.roots.ModuleRootManager;
|
||||
import com.intellij.openapi.roots.ModuleRootModificationUtil;
|
||||
import com.intellij.openapi.roots.*;
|
||||
import com.intellij.openapi.ui.LabeledComponent;
|
||||
import com.intellij.openapi.util.Disposer;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
@@ -416,6 +413,23 @@ public class ConfigurationsTest extends BaseConfigurationTestCase {
|
||||
}
|
||||
}
|
||||
|
||||
public void testOriginalModule() throws Exception {
|
||||
ModuleRootModificationUtil.addDependency(getModule1(), getModule2(), DependencyScope.TEST, true);
|
||||
ModuleRootModificationUtil.addDependency(getModule2(), getModule3(), DependencyScope.TEST, false);
|
||||
assertTrue(ModuleBasedConfiguration.canRestoreOriginalModule(getModule1(), new Module[] {getModule2()}));
|
||||
assertTrue(ModuleBasedConfiguration.canRestoreOriginalModule(getModule1(), new Module[] {getModule3()}));
|
||||
|
||||
//not exported but on the classpath
|
||||
addModule("module4");
|
||||
ModuleRootModificationUtil.addDependency(getModule3(), getModule4(), DependencyScope.TEST, false);
|
||||
assertTrue(ModuleBasedConfiguration.canRestoreOriginalModule(getModule1(), new Module[] {getModule4()}));
|
||||
|
||||
addModule("module5");
|
||||
assertFalse(ModuleBasedConfiguration.canRestoreOriginalModule(getModule1(), new Module[] {getModule(4)}));
|
||||
|
||||
assertFalse(ModuleBasedConfiguration.canRestoreOriginalModule(getModule2(), new Module[] {getModule1()}));
|
||||
}
|
||||
|
||||
private void assignJdk(Module module) {
|
||||
myJdk = ModuleRootManager.getInstance(myModule).getSdk();
|
||||
ModuleRootModificationUtil.setModuleSdk(module, myJdk);
|
||||
|
||||
+27
-13
@@ -20,9 +20,10 @@ import com.intellij.openapi.application.ReadAction;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.module.ModuleManager;
|
||||
import com.intellij.openapi.module.ModuleUtilCore;
|
||||
import com.intellij.openapi.roots.ModuleRootManager;
|
||||
import com.intellij.openapi.util.InvalidDataException;
|
||||
import com.intellij.openapi.util.WriteExternalException;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.util.xmlb.annotations.Property;
|
||||
import gnu.trove.THashSet;
|
||||
import org.jdom.Element;
|
||||
@@ -30,9 +31,7 @@ import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* Base class for a configuration that is associated with a specific module. For example, Java run configurations use the selected module
|
||||
@@ -121,19 +120,34 @@ public abstract class ModuleBasedConfiguration<ConfigurationModule extends RunCo
|
||||
}
|
||||
|
||||
public void restoreOriginalModule(final Module originalModule) {
|
||||
if (originalModule == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
Set<Module> modules = new THashSet<>();
|
||||
for (Module classModule : getModules()) {
|
||||
ModuleUtilCore.collectModulesDependsOn(classModule, modules);
|
||||
}
|
||||
if (modules.contains(originalModule)) {
|
||||
if (canRestoreOriginalModule(originalModule, getModules())) {
|
||||
setModule(originalModule);
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean canRestoreOriginalModule(Module originalModule, Module[] configModules) {
|
||||
if (originalModule == null || configModules.length == 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
Deque<Module> queue = new ArrayDeque<>();
|
||||
queue.addLast(originalModule);
|
||||
Set<Module> modules = new THashSet<>();
|
||||
while (!queue.isEmpty()) {
|
||||
Module module = queue.removeFirst();
|
||||
//configModules contains 1 element
|
||||
if (ArrayUtil.contains(module, configModules)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
for (Module next : ModuleRootManager.getInstance(module).getModuleDependencies(true)) {
|
||||
if (!modules.add(next)) continue;
|
||||
queue.addLast(next);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public void onNewConfigurationCreated() {
|
||||
final RunConfigurationModule configurationModule = getConfigurationModule();
|
||||
if (configurationModule.getModule() == null) {
|
||||
|
||||
Reference in New Issue
Block a user