From 7fda7420cb2bb152275ce35c05d864792b0064fa Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Thu, 23 Mar 2017 13:59:43 +0100 Subject: [PATCH] convert GenericProgramRunner to kotlin --- .../runners/GenericProgramRunner.java | 84 +++++++++++-------- 1 file changed, 49 insertions(+), 35 deletions(-) diff --git a/platform/lang-api/src/com/intellij/execution/runners/GenericProgramRunner.java b/platform/lang-api/src/com/intellij/execution/runners/GenericProgramRunner.java index 6119f76ee6b7..c05b1efd1daf 100644 --- a/platform/lang-api/src/com/intellij/execution/runners/GenericProgramRunner.java +++ b/platform/lang-api/src/com/intellij/execution/runners/GenericProgramRunner.java @@ -13,46 +13,60 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.intellij.execution.runners; +package com.intellij.execution.runners -import com.intellij.execution.ExecutionException; -import com.intellij.execution.ExecutionManager; -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.NotNull; -import org.jetbrains.annotations.Nullable; +import com.intellij.execution.ExecutionException +import com.intellij.execution.ExecutionManager +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.concurrency.Promise -public abstract class GenericProgramRunner extends BaseProgramRunner { - @Override - protected void execute(@NotNull ExecutionEnvironment environment, @Nullable final Callback callback, @NotNull RunProfileState state) - throws ExecutionException { - ExecutionManager.getInstance(environment.getProject()).startRunProfile(new RunProfileStarter() { - @Override - public RunContentDescriptor execute(@NotNull RunProfileState state, @NotNull ExecutionEnvironment environment) throws ExecutionException { - return postProcess(environment, doExecute(state, environment), callback); - } - }, state, environment); +abstract class GenericProgramRunner : BaseProgramRunner() { + @Throws(ExecutionException::class) + override fun execute(environment: ExecutionEnvironment, callback: ProgramRunner.Callback?, state: RunProfileState) { + ExecutionManager.getInstance(environment.project).startRunProfile(runProfileStarter { state, environment -> + BaseProgramRunner.postProcess(environment, doExecute(state, environment), callback) + }, state, environment) } - @Nullable - protected RunContentDescriptor doExecute(@NotNull RunProfileState state, @NotNull ExecutionEnvironment environment) throws ExecutionException { - //noinspection deprecation - return doExecute(environment.getProject(), state, environment.getContentToReuse(), environment); + @Throws(ExecutionException::class) + protected open fun doExecute(state: RunProfileState, environment: ExecutionEnvironment): RunContentDescriptor? { + @Suppress("DEPRECATION") + return doExecute(environment.project, state, environment.contentToReuse, environment) } - /** - * @deprecated - */ - @SuppressWarnings({"unused", "DeprecatedIsStillUsed"}) - @Deprecated - @Nullable - protected RunContentDescriptor doExecute(@NotNull Project project, - @NotNull RunProfileState state, - @Nullable RunContentDescriptor contentToReuse, - @NotNull ExecutionEnvironment environment) throws ExecutionException { - throw new AbstractMethodError(); + + @Deprecated("") + @Throws(ExecutionException::class) + protected open fun doExecute(project: Project, + state: RunProfileState, + contentToReuse: RunContentDescriptor?, + environment: ExecutionEnvironment): RunContentDescriptor? { + throw AbstractMethodError() } } + +inline fun runProfileStarter(crossinline starter: (state: RunProfileState, environment: ExecutionEnvironment) -> RunContentDescriptor?) = object : RunProfileStarter() { + override fun execute(state: RunProfileState, env: ExecutionEnvironment) = starter(state, env) +} + +fun startRunProfile(environment: ExecutionEnvironment, state: RunProfileState, callback: ProgramRunner.Callback?, starter: RunProfileStarter?) { + ExecutionManager.getInstance(environment.project).startRunProfile(object : RunProfileStarter() { + override fun executeAsync(state: RunProfileState, environment: ExecutionEnvironment): Promise { + if (starter == null) { + return Promise.resolve(BaseProgramRunner.postProcess(environment, null, callback)) + } + return starter.executeAsync(state, environment).then { descriptor -> + BaseProgramRunner.postProcess(environment, descriptor, callback) + } + } + + @Throws(ExecutionException::class) + override fun execute(state: RunProfileState, environment: ExecutionEnvironment): RunContentDescriptor? { + return BaseProgramRunner.postProcess(environment, starter?.execute(state, environment), callback) + } + }, state, environment) +} \ No newline at end of file