mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
run configuration extensions: remove duplicates (II)
This commit is contained in:
+10
@@ -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;
|
||||
}
|
||||
|
||||
+2
-2
@@ -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());
|
||||
|
||||
Reference in New Issue
Block a user