diff --git a/java/execution/impl/src/com/intellij/execution/JavaRunConfigurationExtensionManager.java b/java/execution/impl/src/com/intellij/execution/JavaRunConfigurationExtensionManager.java new file mode 100644 index 000000000000..e9de18b08ec8 --- /dev/null +++ b/java/execution/impl/src/com/intellij/execution/JavaRunConfigurationExtensionManager.java @@ -0,0 +1,47 @@ +/* + * Copyright 2000-2011 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.execution; + +import com.intellij.execution.configuration.RunConfigurationExtensionsManager; +import com.intellij.execution.configurations.RunConfigurationBase; +import com.intellij.execution.configurations.RuntimeConfigurationException; +import com.intellij.openapi.components.ServiceManager; +import com.intellij.openapi.diagnostic.Logger; + +/** + * User: anna + * Date: 10/4/11 + */ +public class JavaRunConfigurationExtensionManager extends RunConfigurationExtensionsManager { + private static final Logger LOG = Logger.getInstance("#" + RunConfigurationExtension.class.getName()); + + public JavaRunConfigurationExtensionManager() { + super(RunConfigurationExtension.EP_NAME); + } + + public static JavaRunConfigurationExtensionManager getInstance() { + return ServiceManager.getService(JavaRunConfigurationExtensionManager.class); + } + + public static void checkConfigurationIsValid(RunConfigurationBase configuration) throws RuntimeConfigurationException { + try { + getInstance().validateConfiguration(configuration, false); + } + catch (Exception e) { + LOG.error(e); + } + } +} diff --git a/java/execution/impl/src/com/intellij/execution/RunConfigurationExtension.java b/java/execution/impl/src/com/intellij/execution/RunConfigurationExtension.java index f2c8a028a57c..7b962fef9473 100644 --- a/java/execution/impl/src/com/intellij/execution/RunConfigurationExtension.java +++ b/java/execution/impl/src/com/intellij/execution/RunConfigurationExtension.java @@ -22,44 +22,50 @@ */ package com.intellij.execution; -import com.intellij.execution.configurations.*; -import com.intellij.execution.process.OSProcessHandler; +import com.intellij.execution.configuration.AbstractRunConfiguration; +import com.intellij.execution.configuration.RunConfigurationExtensionBase; +import com.intellij.execution.configurations.GeneralCommandLine; +import com.intellij.execution.configurations.JavaParameters; +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.options.SettingsEditor; -import com.intellij.openapi.options.SettingsEditorGroup; 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 com.intellij.ui.LayeredIcon; import org.jdom.Element; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import javax.swing.*; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.TreeMap; -public abstract class RunConfigurationExtension { +public abstract class RunConfigurationExtension extends RunConfigurationExtensionBase{ public static final ExtensionPointName EP_NAME = new ExtensionPointName("com.intellij.runConfigurationExtension"); public static final Key RUN_EXTENSIONS = Key.create("run.extension.elemnts"); - public abstract void handleStartProcess(final RunConfigurationBase configuration, - final OSProcessHandler handler, - RunnerSettings runnerSettings); - @Nullable - public abstract SettingsEditor createEditor(RunConfigurationBase configuration); - public abstract String getEditorTitle(); - public abstract String getName(); + public abstract void updateJavaParameters(final T configuration, final JavaParameters params, RunnerSettings runnerSettings); - protected abstract void readExternal(RunConfigurationBase runConfiguration, Element element) throws InvalidDataException; - protected abstract void writeExternal(RunConfigurationBase runConfiguration, Element element) throws WriteExternalException; - public abstract void patchConfiguration(RunConfigurationBase runJavaConfiguration); - public abstract void checkConfiguration(RunConfigurationBase runJavaConfiguration) throws RuntimeConfigurationException; + + @Override + protected void patchCommandLine(@NotNull RunConfigurationBase configuration, + RunnerSettings runnerSettings, + @NotNull GeneralCommandLine cmdLine, + @NotNull AbstractRunConfiguration.RunnerType type) {} + + @Override + protected boolean isEnabledFor(@NotNull RunConfigurationBase applicableConfiguration, @Nullable RunnerSettings runnerSettings) { + return true; + } + + @Override + protected void extendTemplateConfiguration(@NotNull RunConfigurationBase configuration) { + } public void cleanUserData(RunConfigurationBase runConfigurationBase) {} @@ -84,22 +90,12 @@ public abstract class RunConfigurationExtension { return listener; } - public static void appendEditors(RunConfigurationBase configuration, SettingsEditorGroup group) { - for (RunConfigurationExtension extension : Extensions.getExtensions(EP_NAME)) { - final SettingsEditor editor = extension.createEditor(configuration); - if (editor != null) { - group.addEditor(extension.getEditorTitle(), editor); - } - } - } - - public static void readSettings(RunConfigurationBase runConfiguration, Element parentNode) throws InvalidDataException { final List children = parentNode.getChildren("extension"); final Map extensions = new HashMap(); for (RunConfigurationExtension extension : Extensions.getExtensions(EP_NAME)) { - extensions.put(extension.getName(), extension); + extensions.put(extension.getSerializationId(), extension); } for (Object o : children) { final Element element = (Element)o; @@ -128,15 +124,15 @@ public abstract class RunConfigurationExtension { for (RunConfigurationExtension extension : Extensions.getExtensions(EP_NAME)) { Element el = new Element("extension"); - el.setAttribute("name", extension.getName()); + el.setAttribute("name", extension.getSerializationId()); try { extension.writeExternal(runConfiguration, el); } catch (WriteExternalException e) { - map.remove(extension.getName()); + map.remove(extension.getSerializationId()); continue; } - map.put(extension.getName(), el); + map.put(extension.getSerializationId(), el); } for (Element val : map.values()) { @@ -145,18 +141,6 @@ public abstract class RunConfigurationExtension { } - public static void patchCreatedConfiguration(RunConfigurationBase configuration) { - for (RunConfigurationExtension extension : Extensions.getExtensions(EP_NAME)) { - extension.patchConfiguration(configuration); - } - } - - public static void checkConfigurationIsValid(RunConfigurationBase configuration) throws RuntimeConfigurationException { - for (RunConfigurationExtension extension : Extensions.getExtensions(EP_NAME)) { - extension.checkConfiguration(configuration); - } - } - public boolean isListenerDisabled(RunConfigurationBase configuration, Object listener) { return false; } diff --git a/java/execution/impl/src/com/intellij/execution/application/ApplicationConfiguration.java b/java/execution/impl/src/com/intellij/execution/application/ApplicationConfiguration.java index 0ae394b99ab1..61d6588e1d9d 100644 --- a/java/execution/impl/src/com/intellij/execution/application/ApplicationConfiguration.java +++ b/java/execution/impl/src/com/intellij/execution/application/ApplicationConfiguration.java @@ -84,7 +84,7 @@ public class ApplicationConfiguration extends ModuleBasedConfiguration getConfigurationEditor() { SettingsEditorGroup group = new SettingsEditorGroup(); group.addEditor(ExecutionBundle.message("run.configuration.configuration.tab.title"), new ApplicationConfigurable(getProject())); - RunConfigurationExtension.appendEditors(this, group); + JavaRunConfigurationExtensionManager.getInstance().appendEditors(this, group); group.addEditor(ExecutionBundle.message("logs.tab.title"), new LogConfigurationPanel()); return group; } @@ -147,7 +147,7 @@ public class ApplicationConfiguration extends ModuleBasedConfiguration { +public abstract class RunConfigurationExtensionBase { @NotNull protected abstract String getSerializationId(); diff --git a/platform/lang-api/src/com/intellij/execution/configuration/RunConfigurationExtensionsManager.java b/platform/lang-api/src/com/intellij/execution/configuration/RunConfigurationExtensionsManager.java index ea49468bdc91..c0f137ab2ad2 100644 --- a/platform/lang-api/src/com/intellij/execution/configuration/RunConfigurationExtensionsManager.java +++ b/platform/lang-api/src/com/intellij/execution/configuration/RunConfigurationExtensionsManager.java @@ -3,6 +3,7 @@ package com.intellij.execution.configuration; import com.google.common.collect.Maps; import com.intellij.execution.Location; import com.intellij.execution.configurations.GeneralCommandLine; +import com.intellij.execution.configurations.RunConfigurationBase; import com.intellij.execution.configurations.RunnerSettings; import com.intellij.execution.process.ProcessHandler; import com.intellij.openapi.extensions.ExtensionPointName; @@ -24,7 +25,7 @@ import java.util.TreeMap; /** * @author traff */ -public class RunConfigurationExtensionsManager> { +public class RunConfigurationExtensionsManager> { public static final Key> RUN_EXTENSIONS = Key.create("run.extension.elements"); private static final String EXT_ID_ATTR = "ID"; private static final String EXTENSION_ROOT_ATTR = "EXTENSION"; diff --git a/platform/platform-resources/src/META-INF/LangExtensions.xml b/platform/platform-resources/src/META-INF/LangExtensions.xml index 2383a6b3e20b..c1e39d7b4537 100644 --- a/platform/platform-resources/src/META-INF/LangExtensions.xml +++ b/platform/platform-resources/src/META-INF/LangExtensions.xml @@ -697,5 +697,5 @@ - + diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcRunConfiguration.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcRunConfiguration.java index 74817fd11574..841b896c7db0 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcRunConfiguration.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcRunConfiguration.java @@ -273,10 +273,7 @@ public abstract class MvcRunConfiguration extends ModuleBasedConfiguration getConfigurationEditor() { SettingsEditorGroup group = new SettingsEditorGroup(); group.addEditor(ExecutionBundle.message("run.configuration.configuration.tab.title"), new JUnitConfigurable(getProject())); - RunConfigurationExtension.appendEditors(this, group); + JavaRunConfigurationExtensionManager.getInstance().appendEditors(this, group); group.addEditor(ExecutionBundle.message("logs.tab.title"), new LogConfigurationPanel()); return group; } @@ -105,7 +105,7 @@ public class JUnitConfiguration extends ModuleBasedConfiguration getValidModules() { diff --git a/plugins/junit/src/com/intellij/execution/junit/PatternConfigurationProducer.java b/plugins/junit/src/com/intellij/execution/junit/PatternConfigurationProducer.java index c8b12081a8c1..a00cc22ec67c 100644 --- a/plugins/junit/src/com/intellij/execution/junit/PatternConfigurationProducer.java +++ b/plugins/junit/src/com/intellij/execution/junit/PatternConfigurationProducer.java @@ -16,8 +16,8 @@ package com.intellij.execution.junit; +import com.intellij.execution.JavaRunConfigurationExtensionManager; import com.intellij.execution.Location; -import com.intellij.execution.RunConfigurationExtension; import com.intellij.execution.RunnerAndConfigurationSettings; import com.intellij.execution.actions.ConfigurationContext; import com.intellij.openapi.actionSystem.DataContext; @@ -47,7 +47,7 @@ public class PatternConfigurationProducer extends JUnitConfigurationProducer { data.TEST_OBJECT = JUnitConfiguration.TEST_PATTERN; data.setScope(setupPackageConfiguration(context, project, configuration, data.getScope())); configuration.setGeneratedName(); - RunConfigurationExtension.patchCreatedConfiguration(configuration); + JavaRunConfigurationExtensionManager.getInstance().extendCreatedConfiguration(configuration, location); return settings; } diff --git a/plugins/junit/src/com/intellij/execution/junit/TestClassConfigurationProducer.java b/plugins/junit/src/com/intellij/execution/junit/TestClassConfigurationProducer.java index 94648b1652cb..906b8efd3479 100644 --- a/plugins/junit/src/com/intellij/execution/junit/TestClassConfigurationProducer.java +++ b/plugins/junit/src/com/intellij/execution/junit/TestClassConfigurationProducer.java @@ -16,10 +16,7 @@ package com.intellij.execution.junit; -import com.intellij.execution.JavaExecutionUtil; -import com.intellij.execution.Location; -import com.intellij.execution.RunConfigurationExtension; -import com.intellij.execution.RunnerAndConfigurationSettings; +import com.intellij.execution.*; import com.intellij.execution.actions.ConfigurationContext; import com.intellij.openapi.actionSystem.LangDataKeys; import com.intellij.openapi.module.Module; @@ -47,7 +44,7 @@ public class TestClassConfigurationProducer extends JUnitConfigurationProducer { final Module originalModule = configuration.getConfigurationModule().getModule(); configuration.beClassConfiguration(myTestClass); configuration.restoreOriginalModule(originalModule); - RunConfigurationExtension.patchCreatedConfiguration(configuration); + JavaRunConfigurationExtensionManager.getInstance().extendCreatedConfiguration(configuration, location); return settings; } diff --git a/plugins/junit/src/com/intellij/execution/junit/TestMethodConfigurationProducer.java b/plugins/junit/src/com/intellij/execution/junit/TestMethodConfigurationProducer.java index cd2e2802e4bf..dabf13b9c65a 100644 --- a/plugins/junit/src/com/intellij/execution/junit/TestMethodConfigurationProducer.java +++ b/plugins/junit/src/com/intellij/execution/junit/TestMethodConfigurationProducer.java @@ -16,8 +16,8 @@ package com.intellij.execution.junit; +import com.intellij.execution.JavaRunConfigurationExtensionManager; import com.intellij.execution.Location; -import com.intellij.execution.RunConfigurationExtension; import com.intellij.execution.RunnerAndConfigurationSettings; import com.intellij.execution.actions.ConfigurationContext; import com.intellij.openapi.module.Module; @@ -41,7 +41,7 @@ public class TestMethodConfigurationProducer extends JUnitConfigurationProducer final Module originalModule = configuration.getConfigurationModule().getModule(); configuration.beMethodConfiguration(myMethodLocation); configuration.restoreOriginalModule(originalModule); - RunConfigurationExtension.patchCreatedConfiguration(configuration); + JavaRunConfigurationExtensionManager.getInstance().extendCreatedConfiguration(configuration, location); return settings; } diff --git a/plugins/junit/src/com/intellij/execution/junit/TestObject.java b/plugins/junit/src/com/intellij/execution/junit/TestObject.java index e910568b288a..731c12791804 100644 --- a/plugins/junit/src/com/intellij/execution/junit/TestObject.java +++ b/plugins/junit/src/com/intellij/execution/junit/TestObject.java @@ -255,9 +255,7 @@ public abstract class TestObject implements JavaCommandLine { public ExecutionResult execute(final Executor executor, @NotNull final ProgramRunner runner) throws ExecutionException { final JUnitProcessHandler handler = createHandler(); final RunnerSettings runnerSettings = getRunnerSettings(); - for(final RunConfigurationExtension ext: Extensions.getExtensions(RunConfigurationExtension.EP_NAME)) { - ext.handleStartProcess(myConfiguration, handler, runnerSettings); - } + JavaRunConfigurationExtensionManager.getInstance().attachExtensionsToProcess(myConfiguration, handler, runnerSettings); final TestProxy unboundOutputRoot = new TestProxy(new RootTestInfo()); final JUnitConsoleProperties consoleProperties = new JUnitConsoleProperties(myConfiguration, executor); final JUnitTreeConsoleView consoleView = new JUnitTreeConsoleView(consoleProperties, runnerSettings, getConfigurationSettings(), unboundOutputRoot); diff --git a/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfiguration.java b/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfiguration.java index 6d4ae7f2c839..2386d78a3443 100644 --- a/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfiguration.java +++ b/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfiguration.java @@ -29,7 +29,6 @@ import com.intellij.execution.configurations.*; import com.intellij.execution.junit.RefactoringListeners; import com.intellij.execution.runners.ExecutionEnvironment; import com.intellij.execution.testframework.SourceScope; -import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.components.PathMacroManager; import com.intellij.openapi.module.Module; import com.intellij.openapi.options.SettingsEditor; @@ -265,7 +264,7 @@ public class TestNGConfiguration extends ModuleBasedConfiguration getConfigurationEditor() { SettingsEditorGroup group = new SettingsEditorGroup(); group.addEditor(ExecutionBundle.message("run.configuration.configuration.tab.title"), new TestNGConfigurationEditor(getProject())); - RunConfigurationExtension.appendEditors(this, group); + JavaRunConfigurationExtensionManager.getInstance().appendEditors(this, group); group.addEditor(ExecutionBundle.message("logs.tab.title"), new LogConfigurationPanel()); return group; } @@ -307,7 +306,7 @@ public class TestNGConfiguration extends ModuleBasedConfiguration