simplify BaseProgramRunner - part 3

GitOrigin-RevId: 25b4d2bb8cfbabf5b32d0184ad538dfdc7cb450b
This commit is contained in:
Vladimir Krivosheev
2019-12-17 16:40:26 +00:00
committed by intellij-monorepo-bot
parent 30a3d2dcae
commit e6c76011b3
6 changed files with 54 additions and 37 deletions
@@ -147,9 +147,9 @@ public class GenericDebuggerRunner extends JavaPatchableProgramRunner<GenericDeb
}
@Override
public void patch(JavaParameters javaParameters, RunnerSettings settings, RunProfile runProfile, final boolean beforeExecution) throws ExecutionException {
public void patch(JavaParameters javaParameters, RunnerSettings settings, RunProfile runProfile, boolean beforeExecution) throws ExecutionException {
doPatch(javaParameters, settings, beforeExecution);
runCustomPatchers(javaParameters, Executor.EXECUTOR_EXTENSION_NAME.findExtension(DefaultDebugExecutor.class), runProfile);
runCustomPatchers(javaParameters, Executor.EXECUTOR_EXTENSION_NAME.findExtensionOrFail(DefaultDebugExecutor.class), runProfile);
}
private static RemoteConnection doPatch(final JavaParameters javaParameters, final RunnerSettings settings, boolean beforeExecution)
@@ -9,6 +9,7 @@
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="module" module-name="intellij.java" />
<orderEntry type="module" module-name="intellij.java.resources" />
<orderEntry type="library" name="kotlin-stdlib-jdk8" level="project" />
</component>
<component name="copyright">
<Base>
@@ -1,35 +1,34 @@
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.intellij.execution.runners;
package com.intellij.execution.runners
import com.intellij.execution.ExecutionException;
import com.intellij.execution.Executor;
import com.intellij.execution.configurations.JavaParameters;
import com.intellij.execution.configurations.RunProfile;
import com.intellij.execution.configurations.RunProfileState;
import com.intellij.execution.configurations.RunnerSettings;
import com.intellij.execution.ui.RunContentDescriptor;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.concurrency.Promise;
import org.jetbrains.concurrency.Promises;
import com.intellij.execution.ExecutionException
import com.intellij.execution.Executor
import com.intellij.execution.configurations.JavaParameters
import com.intellij.execution.configurations.RunProfile
import com.intellij.execution.configurations.RunProfileState
import com.intellij.execution.configurations.RunnerSettings
import com.intellij.execution.ui.RunContentDescriptor
import org.jetbrains.concurrency.resolvedPromise
public abstract class JavaPatchableProgramRunner<Settings extends RunnerSettings> extends AsyncProgramRunner<Settings> {
public abstract void patch(JavaParameters javaParameters, RunnerSettings settings, RunProfile runProfile, final boolean beforeExecution)
throws ExecutionException;
protected static void runCustomPatchers(JavaParameters javaParameters, Executor executor, RunProfile runProfile) {
if (runProfile != null) {
JavaProgramPatcher.EP_NAME.forEachExtensionSafe(patcher -> {
patcher.patchJavaParameters(executor, runProfile, javaParameters);
});
// due to backward compatibility, we cannot get rid of GenericProgramRunner inheritance
abstract class JavaPatchableProgramRunner<Settings : RunnerSettings> : GenericProgramRunner<Settings>() {
companion object {
@JvmStatic
protected fun runCustomPatchers(javaParameters: JavaParameters, executor: Executor, runProfile: RunProfile) {
JavaProgramPatcher.EP_NAME.forEachExtensionSafe {
it.patchJavaParameters(executor, runProfile, javaParameters)
}
}
}
@NotNull
@Override
protected final Promise<RunContentDescriptor> execute(@NotNull ExecutionEnvironment environment, @NotNull RunProfileState state)
throws ExecutionException {
return Promises.resolvedPromise(doExecute(state, environment));
@Throws(ExecutionException::class)
abstract fun patch(javaParameters: JavaParameters?, settings: RunnerSettings?, runProfile: RunProfile?, beforeExecution: Boolean)
@Throws(ExecutionException::class)
final override fun execute(environment: ExecutionEnvironment, callback: ProgramRunner.Callback?, state: RunProfileState) {
startRunProfile(environment, state, callback, { resolvedPromise(doExecute(state, environment)) })
}
protected abstract RunContentDescriptor doExecute(@NotNull RunProfileState state, @NotNull ExecutionEnvironment environment) throws ExecutionException;
}
@Throws(ExecutionException::class)
abstract override fun doExecute(state: RunProfileState, environment: ExecutionEnvironment): RunContentDescriptor?
}
@@ -2,7 +2,7 @@
package com.intellij.execution.runners
import com.intellij.execution.ExecutionException
import com.intellij.execution.RunManager.Companion.getInstance
import com.intellij.execution.RunManager
import com.intellij.execution.configurations.RunProfileState
import com.intellij.execution.configurations.RunnerSettings
@@ -10,10 +10,15 @@ abstract class BaseProgramRunner<Settings : RunnerSettings?> : ProgramRunner<Set
@Throws(ExecutionException::class)
override fun execute(environment: ExecutionEnvironment, callback: ProgramRunner.Callback?) {
val state = environment.state ?: return
getInstance(environment.project).refreshUsagesList(environment.runProfile)
RunManager.getInstance(environment.project).refreshUsagesList(environment.runProfile)
execute(environment, callback, state)
}
@Throws(ExecutionException::class)
protected abstract fun execute(environment: ExecutionEnvironment, callback: ProgramRunner.Callback?, state: RunProfileState)
// prevent overriding
final override fun execute(environment: ExecutionEnvironment) {
execute(environment, null)
}
}
@@ -3,11 +3,13 @@ package com.intellij.execution.runners
import com.intellij.execution.ExecutionException
import com.intellij.execution.ExecutionManager
import com.intellij.execution.RunManager
import com.intellij.execution.RunProfileStarter
import com.intellij.execution.configurations.RunProfileState
import com.intellij.execution.configurations.RunnerSettings
import com.intellij.execution.ui.RunContentDescriptor
import com.intellij.openapi.project.Project
import org.jetbrains.annotations.ApiStatus
import org.jetbrains.concurrency.Promise
import org.jetbrains.concurrency.resolvedPromise
@@ -35,8 +37,11 @@ abstract class GenericProgramRunner<Settings : RunnerSettings> : BaseProgramRunn
}
}
abstract class AsyncProgramRunner<Settings : RunnerSettings> : BaseProgramRunner<Settings>() {
final override fun execute(environment: ExecutionEnvironment, callback: ProgramRunner.Callback?, state: RunProfileState) {
abstract class AsyncProgramRunner<Settings : RunnerSettings> : ProgramRunner<Settings> {
@Throws(ExecutionException::class)
final override fun execute(environment: ExecutionEnvironment, callback: ProgramRunner.Callback?) {
val state = environment.state ?: return
RunManager.getInstance(environment.project).refreshUsagesList(environment.runProfile)
startRunProfile(environment, state, callback) {
execute(environment, state)
}
@@ -44,9 +49,18 @@ abstract class AsyncProgramRunner<Settings : RunnerSettings> : BaseProgramRunner
@Throws(ExecutionException::class)
protected abstract fun execute(environment: ExecutionEnvironment, state: RunProfileState): Promise<RunContentDescriptor?>
// prevent overriding
final override fun execute(environment: ExecutionEnvironment) {
execute(environment, null)
}
}
internal fun startRunProfile(environment: ExecutionEnvironment, state: RunProfileState, callback: ProgramRunner.Callback?, starter: () -> Promise<RunContentDescriptor?>) {
/**
* Internal usage only. Maybe removed or changed in any moment. No backward compatibility.
*/
@ApiStatus.Internal
fun startRunProfile(environment: ExecutionEnvironment, state: RunProfileState, callback: ProgramRunner.Callback?, starter: () -> Promise<RunContentDescriptor?>) {
ExecutionManager.getInstance(environment.project).startRunProfile(object : RunProfileStarter() {
override fun executeAsync(state: RunProfileState, environment: ExecutionEnvironment): Promise<RunContentDescriptor> {
// errors are handled by com.intellij.execution.ExecutionManager.startRunProfile
@@ -89,9 +89,7 @@ public interface ProgramRunner<Settings extends RunnerSettings> {
return null;
}
default void execute(@NotNull ExecutionEnvironment environment) throws ExecutionException {
execute(environment, null);
}
void execute(@NotNull ExecutionEnvironment environment) throws ExecutionException;
void execute(@NotNull ExecutionEnvironment environment, @Nullable Callback callback) throws ExecutionException;
}