mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
a separate executor for hot swapping is a bit too much, introduce a JavaProgramPatcher extension for just adding a parameter to command line
This commit is contained in:
@@ -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<GenericDeb
|
||||
ExecutionEnvironment env) throws ExecutionException {
|
||||
if (state instanceof JavaCommandLine) {
|
||||
final JavaParameters parameters = ((JavaCommandLine)state).getJavaParameters();
|
||||
runCustomPatchers(parameters, state.getRunnerSettings(), executor);
|
||||
RemoteConnection connection = DebuggerManagerImpl.createDebugParameters(parameters, true, DebuggerSettings.getInstance().DEBUGGER_TRANSPORT, "", false);
|
||||
return attachVirtualMachine(project, executor, state, contentToReuse, env, connection, true);
|
||||
}
|
||||
@@ -114,6 +116,13 @@ public class GenericDebuggerRunner extends JavaPatchableProgramRunner<GenericDeb
|
||||
return DebuggerManagerImpl.createDebugParameters(javaParameters, debuggerSettings, false);
|
||||
}
|
||||
|
||||
private static void runCustomPatchers(JavaParameters javaParameters, RunnerSettings settings, Executor executor) {
|
||||
final RunProfile profile = settings.getRunProfile();
|
||||
for (JavaProgramPatcher patcher : JavaProgramPatcher.EP_NAME.getExtensions()) {
|
||||
patcher.patchJavaParameters(executor, profile, javaParameters);
|
||||
}
|
||||
}
|
||||
|
||||
public SettingsEditor<GenericDebuggerRunnerSettings> getSettingsEditor(final Executor executor, RunConfiguration configuration) {
|
||||
if (configuration instanceof RunConfigurationWithRunnerSettings) {
|
||||
if (((RunConfigurationWithRunnerSettings)configuration).isSettingsNeeded()) {
|
||||
|
||||
@@ -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<JavaProgramPatcher> EP_NAME = ExtensionPointName.create("com.intellij.java.programPatcher");
|
||||
|
||||
void patchJavaParameters(Executor executor, RunProfile configuration, JavaParameters javaParameters);
|
||||
}
|
||||
@@ -2,13 +2,13 @@
|
||||
<id>org.intellij.groovy.hotswap</id>
|
||||
<name>Groovy HotSwap</name>
|
||||
<description>Enables HotSwap functionality in Groovy classes</description>
|
||||
<version>0.4</version>
|
||||
<idea-version since-build="93.90" until-build="96.1"/>
|
||||
<version>0.5</version>
|
||||
<idea-version since-build="94.632" until-build="96.1"/>
|
||||
<vendor logo="/org/jetbrains/plugins/groovy/images/groovy_16x16.png" url="http://www.jetbrains.com">JetBrains Inc.</vendor>
|
||||
<depends>org.intellij.groovy</depends>
|
||||
|
||||
<extensions defaultExtensionNs="com.intellij">
|
||||
<programRunner implementation="org.jetbrains.plugins.groovy.debugger.GroovyHotSwapper"/>
|
||||
<java.programPatcher implementation="org.jetbrains.plugins.groovy.debugger.GroovyHotSwapper"/>
|
||||
</extensions>
|
||||
|
||||
</idea-plugin>
|
||||
|
||||
+12
-35
@@ -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<String> 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() {
|
||||
|
||||
@@ -82,6 +82,9 @@
|
||||
<extensionPoint name="debugger.jvmDebugProvider"
|
||||
interface="com.intellij.debugger.engine.JVMDebugProvider"/>
|
||||
|
||||
<extensionPoint name="java.programPatcher"
|
||||
beanClass="com.intellij.execution.runners.JavaProgramPatcher"/>
|
||||
|
||||
<extensionPoint name="OrderRootTypeUI"
|
||||
beanClass="com.intellij.openapi.extensions.KeyedFactoryEPBean"/>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user