mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-109465 make run configuration's unique name unique for module based run configurations
+ Run Configurations API: refactoring
This commit is contained in:
+10
-24
@@ -27,8 +27,9 @@ import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.module.ModuleComponent;
|
||||
import com.intellij.openapi.project.ModuleAdapter;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.*;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.openapi.util.Comparing;
|
||||
import com.intellij.openapi.util.InvalidDataException;
|
||||
import com.intellij.openapi.util.WriteExternalException;
|
||||
import com.intellij.util.containers.HashSet;
|
||||
import org.jdom.Element;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
@@ -36,7 +37,6 @@ import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
@@ -51,14 +51,8 @@ import java.util.Set;
|
||||
public final class ModuleRunConfigurationManager extends ModuleAdapter implements ModuleComponent, PersistentStateComponent<Element> {
|
||||
private static final Logger LOG = Logger.getInstance(ModuleRunConfigurationManager.class);
|
||||
@NonNls static final String COMPONENT_NAME = "ModuleRunConfigurationManager";
|
||||
@NotNull
|
||||
private final Condition<RunnerAndConfigurationSettings> myModuleConfigCondition = new Condition<RunnerAndConfigurationSettings>() {
|
||||
@Override
|
||||
public boolean value(@Nullable RunnerAndConfigurationSettings settings) {
|
||||
return settings != null && usesMyModule(settings.getConfiguration());
|
||||
}
|
||||
};
|
||||
|
||||
private final Object myRemoverKey;
|
||||
@NotNull
|
||||
private final Module myModule;
|
||||
@NotNull
|
||||
@@ -69,6 +63,7 @@ public final class ModuleRunConfigurationManager extends ModuleAdapter implement
|
||||
public ModuleRunConfigurationManager(@NotNull final Module module, @NotNull final RunManagerImpl runManager) {
|
||||
myModule = module;
|
||||
myManager = runManager;
|
||||
myRemoverKey = new Object();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -123,11 +118,6 @@ public final class ModuleRunConfigurationManager extends ModuleAdapter implement
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private Collection<? extends RunnerAndConfigurationSettings> getModuleRunConfigurationSettings() {
|
||||
return ContainerUtil.filter(myManager.getConfigurationSettings(), myModuleConfigCondition);
|
||||
}
|
||||
|
||||
private boolean usesMyModule(RunConfiguration config) {
|
||||
return config instanceof ModuleBasedConfiguration
|
||||
&& myModule.equals(((ModuleBasedConfiguration)config).getConfigurationModule().getModule());
|
||||
@@ -135,7 +125,7 @@ public final class ModuleRunConfigurationManager extends ModuleAdapter implement
|
||||
|
||||
public void writeExternal(@NotNull final Element element) throws WriteExternalException {
|
||||
LOG.debug("writeExternal(" + myModule + ")");
|
||||
for (final RunnerAndConfigurationSettings settings : getModuleRunConfigurationSettings()) {
|
||||
for (final RunnerAndConfigurationSettings settings : myManager.getExternalSettings(myRemoverKey)) {
|
||||
myManager.addConfigurationElement(element, settings);
|
||||
}
|
||||
if (myUnloadedElements != null) {
|
||||
@@ -152,7 +142,7 @@ public final class ModuleRunConfigurationManager extends ModuleAdapter implement
|
||||
|
||||
final List children = element.getChildren();
|
||||
for (final Object child : children) {
|
||||
final RunnerAndConfigurationSettings configuration = myManager.loadConfiguration((Element)child, true);
|
||||
final RunnerAndConfigurationSettings configuration = myManager.loadConfiguration(myRemoverKey, (Element)child, true);
|
||||
if (configuration == null && Comparing.strEqual(element.getName(), RunManagerImpl.CONFIGURATION)) {
|
||||
if (myUnloadedElements == null) myUnloadedElements = new ArrayList<Element>(2);
|
||||
myUnloadedElements.add(element);
|
||||
@@ -178,13 +168,9 @@ public final class ModuleRunConfigurationManager extends ModuleAdapter implement
|
||||
}
|
||||
|
||||
@Override
|
||||
public void beforeModuleRemoved(Project project, Module module) {
|
||||
if (!myModule.equals(module)) {
|
||||
return;
|
||||
}
|
||||
LOG.debug("time to remove something from project (" + project + ")");
|
||||
for (final RunnerAndConfigurationSettings settings : getModuleRunConfigurationSettings()) {
|
||||
myManager.removeConfiguration(settings);
|
||||
public void moduleRemoved(Project project, Module module) {
|
||||
if (myModule.equals(module)) {
|
||||
myManager.removeExternalSettings(myRemoverKey);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -49,6 +49,8 @@ public class RunManagerImpl extends RunManagerEx implements JDOMExternalizable,
|
||||
new HashMap<String, RunnerAndConfigurationSettings>();
|
||||
private final Map<String, RunnerAndConfigurationSettings> myConfigurations =
|
||||
new LinkedHashMap<String, RunnerAndConfigurationSettings>(); // template configurations are not included here
|
||||
private final Map<Object, List<RunnerAndConfigurationSettings>> myExternalSettings =
|
||||
new java.util.HashMap<Object, List<RunnerAndConfigurationSettings>>();
|
||||
private final Map<String, Boolean> mySharedConfigurations = new TreeMap<String, Boolean>();
|
||||
private final Map<RunConfiguration, List<BeforeRunTask>> myConfigurationToBeforeTasksMap = new WeakHashMap<RunConfiguration, List<BeforeRunTask>>();
|
||||
|
||||
@@ -221,6 +223,11 @@ public class RunManagerImpl extends RunManagerEx implements JDOMExternalizable,
|
||||
return list.toArray(new RunConfiguration[list.size()]);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public List<RunnerAndConfigurationSettings> getExternalSettings(@NotNull Object key) {
|
||||
return myExternalSettings.containsKey(key) ? myExternalSettings.get(key) : Collections.<RunnerAndConfigurationSettings>emptyList();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public List<RunnerAndConfigurationSettings> getAllSettings() {
|
||||
@@ -233,7 +240,6 @@ public class RunManagerImpl extends RunManagerEx implements JDOMExternalizable,
|
||||
for (RunnerAndConfigurationSettings settings : getSortedConfigurations()) {
|
||||
if (settings.getConfiguration() == configuration) return settings;
|
||||
}
|
||||
LOG.warn("Cannot find settings for RunConfiguration " + configuration.getName());
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -522,7 +528,7 @@ public class RunManagerImpl extends RunManagerEx implements JDOMExternalizable,
|
||||
|
||||
@Override
|
||||
public void writeExternal(@NotNull final Element parentNode) throws WriteExternalException {
|
||||
writeContext(parentNode);
|
||||
writeContext(parentNode);//writes temporary configurations here
|
||||
for (final RunnerAndConfigurationSettings runnerAndConfigurationSettings : myTemplateConfigurationsMap.values()) {
|
||||
if (runnerAndConfigurationSettings.getConfiguration() instanceof UnknownRunConfiguration) {
|
||||
if (((UnknownRunConfiguration)runnerAndConfigurationSettings.getConfiguration()).isDoNotStore()) {
|
||||
@@ -777,15 +783,35 @@ public class RunManagerImpl extends RunManagerEx implements JDOMExternalizable,
|
||||
fireRunConfigurationsRemoved(configurations);
|
||||
}
|
||||
|
||||
public void removeExternalSettings(@NotNull Object removerKey) {
|
||||
List<RunnerAndConfigurationSettings> settingsList = myExternalSettings.get(removerKey);
|
||||
for (RunnerAndConfigurationSettings each : settingsList) {
|
||||
removeConfiguration(each);
|
||||
}
|
||||
myExternalSettings.remove(removerKey);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public RunnerAndConfigurationSettings loadConfiguration(final Element element, boolean isShared) throws InvalidDataException {
|
||||
RunnerAndConfigurationSettingsImpl settings = new RunnerAndConfigurationSettingsImpl(this);
|
||||
return loadConfiguration(null, element, isShared);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public RunnerAndConfigurationSettings loadConfiguration(@Nullable final Object removerKey, final Element element, boolean isShared) throws InvalidDataException {
|
||||
final RunnerAndConfigurationSettingsImpl settings = new RunnerAndConfigurationSettingsImpl(this);
|
||||
settings.readExternal(element);
|
||||
ConfigurationFactory factory = settings.getFactory();
|
||||
if (factory == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (removerKey !=null) {
|
||||
if (!myExternalSettings.containsKey(removerKey)) {
|
||||
myExternalSettings.put(removerKey, new ArrayList<RunnerAndConfigurationSettings>());
|
||||
}
|
||||
myExternalSettings.get(removerKey).add(settings);
|
||||
}
|
||||
|
||||
final Element methodsElement = element.getChild(METHOD);
|
||||
final List<BeforeRunTask> tasks = readStepsBeforeRun(methodsElement, settings);
|
||||
if (settings.isTemplate()) {
|
||||
|
||||
Reference in New Issue
Block a user