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());
@@ -17,10 +17,7 @@ import org.jdom.Element;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import java.util.*;
/**
* @author traff
@@ -37,7 +34,7 @@ public class RunConfigurationExtensionsManager<U extends RunConfigurationBase, T
public void readExternal(@NotNull final U configuration,
@NotNull final Element parentNode) throws InvalidDataException {
final List<Element> children = parentNode.getChildren(EXTENSION_ROOT_ATTR);
final List<Element> children = parentNode.getChildren(getExtensionRootAttr());
final Map<String, T> extensions = Maps.newHashMap();
for (T extension : getApplicableExtensions(configuration)) {
extensions.put(extension.getSerializationId(), extension);
@@ -48,7 +45,7 @@ public class RunConfigurationExtensionsManager<U extends RunConfigurationBase, T
boolean found = true;
for (Object o : children) {
final Element element = (Element)o;
final String extensionName = element.getAttributeValue(EXT_ID_ATTR);
final String extensionName = element.getAttributeValue(getIdAttrName());
final T extension = extensions.remove(extensionName);
if (extension != null) {
extension.readExternal(configuration, element);
@@ -62,20 +59,28 @@ public class RunConfigurationExtensionsManager<U extends RunConfigurationBase, T
}
}
protected String getIdAttrName() {
return EXT_ID_ATTR;
}
protected String getExtensionRootAttr() {
return EXTENSION_ROOT_ATTR;
}
public void writeExternal(@NotNull final U configuration,
@NotNull final Element parentNode) throws WriteExternalException {
final TreeMap<String, Element> map = Maps.newTreeMap();
final List<Element> elements = configuration.getCopyableUserData(RUN_EXTENSIONS);
if (elements != null) {
for (Element el : elements) {
final String name = el.getAttributeValue(EXT_ID_ATTR);
final String name = el.getAttributeValue(getIdAttrName());
map.put(name, (Element)el.clone());
}
}
for (T extension : getApplicableExtensions(configuration)) {
Element el = new Element(EXTENSION_ROOT_ATTR);
el.setAttribute(EXT_ID_ATTR, extension.getSerializationId());
Element el = new Element(getExtensionRootAttr());
el.setAttribute(getIdAttrName(), extension.getSerializationId());
extension.writeExternal(configuration, el);
map.put(extension.getSerializationId(), el);
}
@@ -159,7 +159,7 @@ public abstract class MvcRunConfiguration extends ModuleBasedConfiguration<RunCo
envs.clear();
JDOMExternalizer.readMap(element, envs, null, "env");
RunConfigurationExtension.readSettings(this, element);
JavaRunConfigurationExtensionManager.getInstance().readExternal(this, element);
depsClasspath = !"false".equals(JDOMExternalizer.readString(element, "depsClasspath"));
}
@@ -173,7 +173,7 @@ public abstract class MvcRunConfiguration extends ModuleBasedConfiguration<RunCo
JDOMExternalizer.writeMap(element, envs, null, "env");
JDOMExternalizer.write(element, "passParentEnv", passParentEnv);
RunConfigurationExtension.writeSettings(this, element);
JavaRunConfigurationExtensionManager.getInstance().writeExternal(this, element);
PathMacroManager.getInstance(getProject()).collapsePathsRecursively(element);
}
@@ -279,7 +279,7 @@ public class JUnitConfiguration extends ModuleBasedConfiguration<JavaRunConfigur
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);
readModule(element);
DefaultJDOMExternalizer.readExternal(this, element);
DefaultJDOMExternalizer.readExternal(getPersistentData(), element);
@@ -309,7 +309,7 @@ public class JUnitConfiguration extends ModuleBasedConfiguration<JavaRunConfigur
public void writeExternal(final Element element) throws WriteExternalException {
super.writeExternal(element);
RunConfigurationExtension.writeSettings(this, element);
JavaRunConfigurationExtensionManager.getInstance().writeExternal(this, element);
writeModule(element);
DefaultJDOMExternalizer.writeExternal(this, element);
final Data persistentData = getPersistentData();
@@ -314,7 +314,7 @@ public class TestNGConfiguration extends ModuleBasedConfiguration<JavaRunConfigu
public void readExternal(Element element) throws InvalidDataException {
PathMacroManager.getInstance(getProject()).expandPaths(element);
super.readExternal(element);
RunConfigurationExtension.readSettings(this, element);
JavaRunConfigurationExtensionManager.getInstance().readExternal(this, element);
readModule(element);
DefaultJDOMExternalizer.readExternal(this, element);
DefaultJDOMExternalizer.readExternal(getPersistantData(), element);
@@ -344,7 +344,7 @@ public class TestNGConfiguration extends ModuleBasedConfiguration<JavaRunConfigu
@Override
public void writeExternal(Element element) throws WriteExternalException {
super.writeExternal(element);
RunConfigurationExtension.writeSettings(this, element);
JavaRunConfigurationExtensionManager.getInstance().writeExternal(this, element);
writeModule(element);
DefaultJDOMExternalizer.writeExternal(this, element);
DefaultJDOMExternalizer.writeExternal(getPersistantData(), element);
@@ -106,7 +106,7 @@ public class SnapShooterConfigurationExtension extends RunConfigurationExtension
return configuration instanceof ApplicationConfiguration;
}
public void attachToProcess(final RunConfigurationBase configuration, final ProcessHandler handler, RunnerSettings runnerSettings) {
public void attachToProcess(@NotNull final RunConfigurationBase configuration, @NotNull final ProcessHandler handler, RunnerSettings runnerSettings) {
SnapShooterConfigurationSettings settings = configuration.getUserData(SnapShooterConfigurationSettings.SNAP_SHOOTER_KEY);
if (settings != null) {
final Runnable runnable = settings.getNotifyRunnable();
@@ -122,7 +122,7 @@ public class SnapShooterConfigurationExtension extends RunConfigurationExtension
}
@Override
public SettingsEditor createEditor(RunConfigurationBase configuration) {
public SettingsEditor createEditor(@NotNull RunConfigurationBase configuration) {
return null;
}
@@ -131,26 +131,27 @@ public class SnapShooterConfigurationExtension extends RunConfigurationExtension
return null;
}
@NotNull
@Override
public String getSerializationId() {
return "snapshooter";
}
@Override
public void readExternal(RunConfigurationBase runConfiguration, Element element) throws InvalidDataException {
public void readExternal(@NotNull RunConfigurationBase runConfiguration, @NotNull Element element) throws InvalidDataException {
}
@Override
public void writeExternal(RunConfigurationBase runConfiguration, Element element) throws WriteExternalException {
public void writeExternal(@NotNull RunConfigurationBase runConfiguration, @NotNull Element element) throws WriteExternalException {
throw new WriteExternalException();
}
@Override
public void extendCreatedConfiguration(RunConfigurationBase runJavaConfiguration, Location location) {
public void extendCreatedConfiguration(@NotNull RunConfigurationBase runJavaConfiguration, @NotNull Location location) {
}
@Override
public void validateConfiguration(RunConfigurationBase runJavaConfiguration, boolean isExecution)
public void validateConfiguration(@NotNull RunConfigurationBase runJavaConfiguration, boolean isExecution)
throws RuntimeConfigurationException {
}