diff --git a/java/debugger/impl/src/com/intellij/debugger/impl/GenericDebuggerRunner.java b/java/debugger/impl/src/com/intellij/debugger/impl/GenericDebuggerRunner.java index 67b0c34b469a..b1f60cdad77b 100644 --- a/java/debugger/impl/src/com/intellij/debugger/impl/GenericDebuggerRunner.java +++ b/java/debugger/impl/src/com/intellij/debugger/impl/GenericDebuggerRunner.java @@ -24,6 +24,7 @@ import com.intellij.execution.configurations.*; import com.intellij.execution.executors.DefaultDebugExecutor; import com.intellij.execution.runners.ExecutionEnvironment; import com.intellij.execution.runners.JavaPatchableProgramRunner; +import com.intellij.execution.runners.JavaProgramPatcher; import com.intellij.execution.ui.RunContentDescriptor; import com.intellij.history.LocalHistory; import com.intellij.history.LocalHistoryConfiguration; @@ -64,6 +65,7 @@ public class GenericDebuggerRunner extends JavaPatchableProgramRunner getSettingsEditor(final Executor executor, RunConfiguration configuration) { if (configuration instanceof RunConfigurationWithRunnerSettings) { if (((RunConfigurationWithRunnerSettings)configuration).isSettingsNeeded()) { diff --git a/java/debugger/impl/src/com/intellij/execution/runners/JavaProgramPatcher.java b/java/debugger/impl/src/com/intellij/execution/runners/JavaProgramPatcher.java new file mode 100644 index 000000000000..6e15a2edf7fe --- /dev/null +++ b/java/debugger/impl/src/com/intellij/execution/runners/JavaProgramPatcher.java @@ -0,0 +1,17 @@ +package com.intellij.execution.runners; + +import com.intellij.execution.Executor; +import com.intellij.execution.configurations.JavaParameters; +import com.intellij.execution.configurations.RunProfile; +import com.intellij.openapi.extensions.ExtensionPointName; + +/** + * For now, used only to patch the debugged run configuration. May be extended to other executors when needed. + * + * @author peter + */ +public interface JavaProgramPatcher { + ExtensionPointName EP_NAME = ExtensionPointName.create("com.intellij.java.programPatcher"); + + void patchJavaParameters(Executor executor, RunProfile configuration, JavaParameters javaParameters); +} diff --git a/plugins/groovy/hotswap/pluginSrc/META-INF/plugin.xml b/plugins/groovy/hotswap/pluginSrc/META-INF/plugin.xml index 4c16777d60a1..c9ae3335026f 100644 --- a/plugins/groovy/hotswap/pluginSrc/META-INF/plugin.xml +++ b/plugins/groovy/hotswap/pluginSrc/META-INF/plugin.xml @@ -2,13 +2,13 @@ org.intellij.groovy.hotswap Groovy HotSwap Enables HotSwap functionality in Groovy classes - 0.4 - + 0.5 + JetBrains Inc. org.intellij.groovy - + diff --git a/plugins/groovy/hotswap/pluginSrc/org/jetbrains/plugins/groovy/debugger/GroovyHotSwapper.java b/plugins/groovy/hotswap/pluginSrc/org/jetbrains/plugins/groovy/debugger/GroovyHotSwapper.java index 5dcf5743021a..3019350e768d 100644 --- a/plugins/groovy/hotswap/pluginSrc/org/jetbrains/plugins/groovy/debugger/GroovyHotSwapper.java +++ b/plugins/groovy/hotswap/pluginSrc/org/jetbrains/plugins/groovy/debugger/GroovyHotSwapper.java @@ -1,23 +1,16 @@ package org.jetbrains.plugins.groovy.debugger; -import com.intellij.debugger.impl.GenericDebuggerRunner; -import com.intellij.execution.ExecutionException; import com.intellij.execution.Executor; -import com.intellij.execution.application.ApplicationConfiguration; -import com.intellij.execution.configurations.JavaCommandLine; import com.intellij.execution.configurations.JavaParameters; +import com.intellij.execution.configurations.RunConfiguration; import com.intellij.execution.configurations.RunProfile; -import com.intellij.execution.configurations.RunProfileState; import com.intellij.execution.executors.DefaultDebugExecutor; -import com.intellij.execution.runners.ExecutionEnvironment; -import com.intellij.execution.ui.RunContentDescriptor; +import com.intellij.execution.runners.JavaProgramPatcher; import com.intellij.openapi.application.PluginPathManager; import com.intellij.openapi.project.Project; import com.intellij.psi.search.FilenameIndex; import com.intellij.util.PathUtil; -import org.jetbrains.annotations.NotNull; import org.jetbrains.plugins.groovy.GroovyFileTypeLoader; -import org.jetbrains.plugins.groovy.runner.GroovyScriptRunConfiguration; import java.io.File; import java.util.ArrayList; @@ -27,17 +20,7 @@ import java.util.List; /** * @author peter */ -public class GroovyHotSwapper extends GenericDebuggerRunner { - public boolean canRun(@NotNull final String executorId, @NotNull final RunProfile profile) { - if (!executorId.equals(DefaultDebugExecutor.EXECUTOR_ID)) { - return false; - } - if ("false".equals(System.getProperty("enable.groovy.hotswap", "true"))) { - return false; - } - - return profile instanceof GroovyScriptRunConfiguration || profile instanceof ApplicationConfiguration; - } +public class GroovyHotSwapper implements JavaProgramPatcher { private static boolean endsWithAny(String s, List endings) { for (String extension : endings) { @@ -61,23 +44,17 @@ public class GroovyHotSwapper extends GenericDebuggerRunner { return false; } - @NotNull - public String getRunnerId() { - return "GroovyHotSwapper"; - } - - @Override - protected RunContentDescriptor createContentDescriptor(Project project, - Executor executor, - RunProfileState state, - RunContentDescriptor contentToReuse, - ExecutionEnvironment env) throws ExecutionException { - if (state instanceof JavaCommandLine && containsGroovyClasses(project)) { - final JavaParameters params = ((JavaCommandLine)state).getJavaParameters(); - params.getVMParametersList().add("-javaagent:" + getAgentJarPath()); + public void patchJavaParameters(Executor executor, RunProfile configuration, JavaParameters javaParameters) { + if (!executor.getId().equals(DefaultDebugExecutor.EXECUTOR_ID)) { + return; + } + if ("false".equals(System.getProperty("enable.groovy.hotswap", "true"))) { + return; } - return super.createContentDescriptor(project, executor, state, contentToReuse, env); + if (configuration instanceof RunConfiguration && containsGroovyClasses(((RunConfiguration)configuration).getProject())) { + javaParameters.getVMParametersList().add("-javaagent:" + getAgentJarPath()); + } } private static String getAgentJarPath() { diff --git a/resources/src/META-INF/IdeaPlugin.xml b/resources/src/META-INF/IdeaPlugin.xml index a0a2e8aa0275..d83008961657 100644 --- a/resources/src/META-INF/IdeaPlugin.xml +++ b/resources/src/META-INF/IdeaPlugin.xml @@ -82,6 +82,9 @@ + +