| /* |
| * Copyright 2000-2009 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.runners; |
| |
| import com.intellij.execution.ExecutionException; |
| import com.intellij.execution.ExecutionResult; |
| import com.intellij.execution.Executor; |
| import com.intellij.execution.configurations.*; |
| import com.intellij.execution.ui.RunContentDescriptor; |
| import com.intellij.openapi.extensions.ExtensionPointName; |
| import com.intellij.openapi.options.SettingsEditor; |
| import org.jetbrains.annotations.NonNls; |
| import org.jetbrains.annotations.NotNull; |
| import org.jetbrains.annotations.Nullable; |
| |
| /** |
| * A ProgramRunner is responsible for the execution workflow of certain types of run configurations with a certain executor. For example, |
| * one ProgramRunner can be responsible for debugging all Java-based run configurations (applications, JUnit tests, etc.); the run |
| * configuration takes care of building a command line and the program runner takes care of how exactly it needs to be executed. |
| * |
| * A newly created program runner should be registered in a corresponding plugin.xml: |
| * |
| * <extensions defaultExtensionNs="com.intellij"> |
| * <programRunner implementation="RunnerClassFQN"/> |
| * </extensions> |
| * |
| * @param <Settings> |
| * @see GenericProgramRunner |
| */ |
| public interface ProgramRunner<Settings extends RunnerSettings> { |
| ExtensionPointName<ProgramRunner> PROGRAM_RUNNER_EP = ExtensionPointName.create("com.intellij.programRunner"); |
| |
| interface Callback { |
| void processStarted(RunContentDescriptor descriptor); |
| } |
| |
| /** |
| * Returns the unique ID of this runner. This ID is used to store settings and must not change between plugin versions. |
| * |
| * @return the program runner ID. |
| */ |
| @NotNull @NonNls |
| String getRunnerId(); |
| |
| /** |
| * Checks if the program runner is capable of running the specified configuration with the specified executor. |
| * |
| * @param executorId ID of the {@link Executor} with which the user is trying to run the configuration. |
| * @param profile the configuration being run. |
| * @return true if the runner can handle it, false otherwise. |
| */ |
| boolean canRun(@NotNull final String executorId, @NotNull final RunProfile profile); |
| |
| /** |
| * Creates a block of per-configuration settings used by this program runner. |
| * |
| * @param settingsProvider source of assorted information about the configuration being edited. |
| * @return the per-runner settings, or null if this runner doesn't use any per-runner settings. |
| */ |
| @Nullable |
| Settings createConfigurationData(ConfigurationInfoProvider settingsProvider); |
| |
| void checkConfiguration(RunnerSettings settings, @Nullable ConfigurationPerRunnerSettings configurationPerRunnerSettings) |
| throws RuntimeConfigurationException; |
| |
| void onProcessStarted(RunnerSettings settings, ExecutionResult executionResult); |
| |
| @Nullable |
| SettingsEditor<Settings> getSettingsEditor(Executor executor, RunConfiguration configuration); |
| |
| void execute(@NotNull ExecutionEnvironment environment) throws ExecutionException; |
| void execute(@NotNull ExecutionEnvironment environment, @Nullable Callback callback) throws ExecutionException; |
| } |