run configuration extensions: remove duplicates (II)

This commit is contained in:
anna
2011-10-04 14:31:07 +02:00
parent 7d821337c4
commit 9da0bf6e02
8 changed files with 39 additions and 85 deletions
@@ -44,4 +44,14 @@ public class JavaRunConfigurationExtensionManager extends RunConfigurationExtens
LOG.error(e);
}
}
@Override
protected String getIdAttrName() {
return "name";
}
@Override
protected String getExtensionRootAttr() {
return "extension";
}
}
@@ -30,24 +30,13 @@ import com.intellij.execution.configurations.RunConfigurationBase;
import com.intellij.execution.configurations.RunnerSettings;
import com.intellij.openapi.extensions.ExtensionPointName;
import com.intellij.openapi.extensions.Extensions;
import com.intellij.openapi.util.InvalidDataException;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.WriteExternalException;
import com.intellij.psi.PsiElement;
import com.intellij.refactoring.listeners.RefactoringElementListener;
import org.jdom.Element;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
public abstract class RunConfigurationExtension extends RunConfigurationExtensionBase<RunConfigurationBase>{
public static final ExtensionPointName<RunConfigurationExtension> EP_NAME = new ExtensionPointName<RunConfigurationExtension>("com.intellij.runConfigurationExtension");
public static final Key<List> RUN_EXTENSIONS = Key.create("run.extension.elemnts");
public abstract <T extends RunConfigurationBase > void updateJavaParameters(final T configuration, final JavaParameters params, RunnerSettings runnerSettings);
@@ -90,57 +79,6 @@ public abstract class RunConfigurationExtension extends RunConfigurationExtensio
return listener;
}
public static void readSettings(RunConfigurationBase runConfiguration, Element parentNode) throws InvalidDataException {
final List children = parentNode.getChildren("extension");
final Map<String, RunConfigurationExtension> extensions = new HashMap<String, RunConfigurationExtension>();
for (RunConfigurationExtension extension : Extensions.getExtensions(EP_NAME)) {
extensions.put(extension.getSerializationId(), extension);
}
for (Object o : children) {
final Element element = (Element)o;
final String extensionName = element.getAttributeValue("name");
final RunConfigurationExtension extension = extensions.remove(extensionName);
if (extension != null) {
extension.readExternal(runConfiguration, element);
}
}
//try to read from old format if possible
for (RunConfigurationExtension extension : extensions.values()) {
extension.readExternal(runConfiguration, parentNode);
}
runConfiguration.putCopyableUserData(RUN_EXTENSIONS, children);
}
public static void writeSettings(RunConfigurationBase runConfiguration, Element element) throws WriteExternalException {
final TreeMap<String, Element> map = new TreeMap<String, Element>();
final List<Element> elements = runConfiguration.getCopyableUserData(RUN_EXTENSIONS);
if (elements != null) {
for (Element el : elements) {
final String name = el.getAttributeValue("name");
map.put(name, (Element)el.clone());
}
}
for (RunConfigurationExtension extension : Extensions.getExtensions(EP_NAME)) {
Element el = new Element("extension");
el.setAttribute("name", extension.getSerializationId());
try {
extension.writeExternal(runConfiguration, el);
}
catch (WriteExternalException e) {
map.remove(extension.getSerializationId());
continue;
}
map.put(extension.getSerializationId(), el);
}
for (Element val : map.values()) {
element.addContent(val);
}
}
public boolean isListenerDisabled(RunConfigurationBase configuration, Object listener) {
return false;
}
@@ -228,7 +228,7 @@ public class ApplicationConfiguration extends ModuleBasedConfiguration<JavaRunCo
public void readExternal(final Element element) throws InvalidDataException {
PathMacroManager.getInstance(getProject()).expandPaths(element);
super.readExternal(element);
RunConfigurationExtension.readSettings(this, element);
JavaRunConfigurationExtensionManager.getInstance().readExternal(this, element);
DefaultJDOMExternalizer.readExternal(this, element);
readModule(element);
EnvironmentVariablesComponent.readExternal(element, getEnvs());
@@ -236,7 +236,7 @@ public class ApplicationConfiguration extends ModuleBasedConfiguration<JavaRunCo
public void writeExternal(final Element element) throws WriteExternalException {
super.writeExternal(element);
RunConfigurationExtension.writeSettings(this, element);
JavaRunConfigurationExtensionManager.getInstance().writeExternal(this, element);
DefaultJDOMExternalizer.writeExternal(this, element);
writeModule(element);
EnvironmentVariablesComponent.writeExternal(element, getEnvs());