diff --git a/java/compiler/impl/src/com/intellij/packaging/impl/run/BuildArtifactsBeforeRunTaskProvider.java b/java/compiler/impl/src/com/intellij/packaging/impl/run/BuildArtifactsBeforeRunTaskProvider.java index bfd25ce8f0b0..622801b82dbe 100644 --- a/java/compiler/impl/src/com/intellij/packaging/impl/run/BuildArtifactsBeforeRunTaskProvider.java +++ b/java/compiler/impl/src/com/intellij/packaging/impl/run/BuildArtifactsBeforeRunTaskProvider.java @@ -20,6 +20,7 @@ import com.intellij.execution.BeforeRunTaskProvider; import com.intellij.execution.RunManagerEx; import com.intellij.execution.configurations.RunConfiguration; import com.intellij.execution.impl.ConfigurationSettingsEditorWrapper; +import com.intellij.execution.runners.ExecutionEnvironment; import com.intellij.ide.DataManager; import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.application.ApplicationManager; @@ -161,7 +162,10 @@ public class BuildArtifactsBeforeRunTaskProvider extends BeforeRunTaskProvider result = Ref.create(false); final Semaphore finished = new Semaphore(); diff --git a/java/execution/impl/src/com/intellij/compiler/options/CompileStepBeforeRun.java b/java/execution/impl/src/com/intellij/compiler/options/CompileStepBeforeRun.java index 784d69332a3c..37ff5461c0e2 100644 --- a/java/execution/impl/src/com/intellij/compiler/options/CompileStepBeforeRun.java +++ b/java/execution/impl/src/com/intellij/compiler/options/CompileStepBeforeRun.java @@ -22,6 +22,7 @@ import com.intellij.execution.configurations.RunConfiguration; import com.intellij.execution.configurations.RunConfigurationBase; import com.intellij.execution.configurations.RunProfileWithCompileBeforeLaunchOption; import com.intellij.execution.remote.RemoteConfiguration; +import com.intellij.execution.runners.ExecutionEnvironment; import com.intellij.icons.AllIcons; import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.compiler.CompileContext; @@ -98,7 +99,7 @@ public class CompileStepBeforeRun extends BeforeRunTaskProvider myModelProvider; protected TestConsoleProperties myConsoleProperties; - protected RunnerSettings myRunnerSettings; - protected ConfigurationPerRunnerSettings myConfigurationPerRunnerSettings; + protected ExecutionEnvironment myEnvironment; public void init(final TestConsoleProperties consoleProperties, - final RunnerSettings runnerSettings, - final ConfigurationPerRunnerSettings configurationSettings) { - myConfigurationPerRunnerSettings = configurationSettings; - myRunnerSettings = runnerSettings; + final ExecutionEnvironment environment) { + myEnvironment = environment; myConsoleProperties = consoleProperties; } @@ -99,8 +96,9 @@ public class AbstractRerunFailedTestsAction extends AnAction { final Executor executor = isDebug ? DefaultDebugExecutor.getDebugExecutorInstance() : DefaultRunExecutor.getRunExecutorInstance(); final ProgramRunner runner = RunnerRegistry.getInstance().getRunner(executor.getId(), profile); assert runner != null; - runner.execute(executor, new ExecutionEnvironment(profile, profile.getProject(), myRunnerSettings, myConfigurationPerRunnerSettings, - null)); + runner.execute(executor, new ExecutionEnvironment(runner, myEnvironment.getExecutionTarget(), + myEnvironment.getRunnerAndConfigurationSettings(), + myEnvironment.getProject())); } catch (ExecutionException e1) { LOG.error(e1); diff --git a/platform/lang-api/src/com/intellij/execution/BeforeRunTaskProvider.java b/platform/lang-api/src/com/intellij/execution/BeforeRunTaskProvider.java index eec2d04f2d39..42792ed3179b 100644 --- a/platform/lang-api/src/com/intellij/execution/BeforeRunTaskProvider.java +++ b/platform/lang-api/src/com/intellij/execution/BeforeRunTaskProvider.java @@ -23,6 +23,7 @@ package com.intellij.execution; import com.intellij.execution.configurations.RunConfiguration; +import com.intellij.execution.runners.ExecutionEnvironment; import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.extensions.ExtensionPointName; import com.intellij.openapi.extensions.Extensions; @@ -69,7 +70,7 @@ public abstract class BeforeRunTaskProvider { public abstract boolean canExecuteTask(RunConfiguration configuration, T task); - public abstract boolean executeTask(DataContext context, RunConfiguration configuration, T task); + public abstract boolean executeTask(DataContext context, RunConfiguration configuration, ExecutionEnvironment env, T task); /** * @@ -79,16 +80,6 @@ public abstract class BeforeRunTaskProvider { return false; } - /** - * Get runner id that current run is about to be made by - * @param context data context that is passed to {@link #executeTask(com.intellij.openapi.actionSystem.DataContext, com.intellij.execution.configurations.RunConfiguration, BeforeRunTask)} - * @return runner id - */ - @Nullable - public static String getRunnerId(DataContext context) { - return (String)context.getData(RUNNER_ID); - } - @Nullable public static BeforeRunTaskProvider getProvider(Project project, Key key) { BeforeRunTaskProvider[] providers = Extensions.getExtensions(BeforeRunTaskProvider.EXTENSION_POINT_NAME, project); diff --git a/platform/lang-api/src/com/intellij/execution/ExecutionManager.java b/platform/lang-api/src/com/intellij/execution/ExecutionManager.java index da8a453a1122..5566196ed654 100644 --- a/platform/lang-api/src/com/intellij/execution/ExecutionManager.java +++ b/platform/lang-api/src/com/intellij/execution/ExecutionManager.java @@ -15,7 +15,6 @@ */ package com.intellij.execution; -import com.intellij.execution.configurations.RunProfile; import com.intellij.execution.configurations.RunProfileState; import com.intellij.execution.process.ProcessHandler; import com.intellij.execution.runners.ExecutionEnvironment; @@ -23,10 +22,11 @@ import com.intellij.execution.ui.RunContentManager; import com.intellij.openapi.project.Project; import com.intellij.util.messages.Topic; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; public abstract class ExecutionManager { - public static final Topic EXECUTION_TOPIC = new Topic("configuration executed", ExecutionListener.class, - Topic.BroadcastDirection.TO_PARENT); + public static final Topic EXECUTION_TOPIC + = new Topic("configuration executed", ExecutionListener.class, Topic.BroadcastDirection.TO_PARENT); public static ExecutionManager getInstance(final Project project) { return project.getComponent(ExecutionManager.class); @@ -34,16 +34,21 @@ public abstract class ExecutionManager { public abstract RunContentManager getContentManager(); - public abstract void compileAndRun(Runnable startRunnable, RunProfile configuration, RunProfileState state, Runnable onCancelRunnable); + public abstract void compileAndRun(@NotNull Runnable startRunnable, + @NotNull ExecutionEnvironment env, + @Nullable RunProfileState state, + @Nullable Runnable onCancelRunnable); public abstract ProcessHandler[] getRunningProcesses(); - public abstract void startRunProfile(@NotNull RunProfileStarter starter, @NotNull RunProfileState state, - @NotNull Project project, @NotNull Executor executor, @NotNull ExecutionEnvironment env); + public abstract void startRunProfile(@NotNull RunProfileStarter starter, + @NotNull RunProfileState state, + @NotNull Project project, + @NotNull Executor executor, + @NotNull ExecutionEnvironment env); public abstract void restartRunProfile(@NotNull Project project, @NotNull Executor executor, @NotNull ExecutionTarget target, @NotNull RunnerAndConfigurationSettings configuration); - } diff --git a/platform/lang-api/src/com/intellij/execution/ExecutionTarget.java b/platform/lang-api/src/com/intellij/execution/ExecutionTarget.java index ad7c79e72cc1..a0697d2cdfb1 100644 --- a/platform/lang-api/src/com/intellij/execution/ExecutionTarget.java +++ b/platform/lang-api/src/com/intellij/execution/ExecutionTarget.java @@ -42,4 +42,9 @@ public abstract class ExecutionTarget { public int hashCode() { return getId().hashCode(); } + + @Override + public String toString() { + return getId(); + } } diff --git a/platform/lang-api/src/com/intellij/execution/ExecutionTargetListener.java b/platform/lang-api/src/com/intellij/execution/ExecutionTargetListener.java new file mode 100644 index 000000000000..1362fe89a78e --- /dev/null +++ b/platform/lang-api/src/com/intellij/execution/ExecutionTargetListener.java @@ -0,0 +1,22 @@ +/* + * Copyright 2000-2012 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; + +import org.jetbrains.annotations.NotNull; + +public interface ExecutionTargetListener { + void activeTargetChanged(@NotNull ExecutionTarget newTarget); +} diff --git a/platform/lang-api/src/com/intellij/execution/ExecutionTargetManager.java b/platform/lang-api/src/com/intellij/execution/ExecutionTargetManager.java index 0e92993e4f77..7c8f956c32ef 100644 --- a/platform/lang-api/src/com/intellij/execution/ExecutionTargetManager.java +++ b/platform/lang-api/src/com/intellij/execution/ExecutionTargetManager.java @@ -15,8 +15,8 @@ */ package com.intellij.execution; -import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.project.Project; +import com.intellij.util.messages.Topic; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -24,9 +24,12 @@ import java.util.Collections; import java.util.List; public abstract class ExecutionTargetManager { + public static final Topic TOPIC = Topic.create("ExecutionTarget topic", ExecutionTargetListener.class); + + @NotNull public static ExecutionTargetManager getInstance(@NotNull Project project) { - return ServiceManager.getService(project, ExecutionTargetManager.class); + return project.getComponent(ExecutionTargetManager.class); } @NotNull diff --git a/platform/lang-api/src/com/intellij/execution/RunnerAndConfigurationSettings.java b/platform/lang-api/src/com/intellij/execution/RunnerAndConfigurationSettings.java index cc164c5f0cb0..4966eaf09f2e 100644 --- a/platform/lang-api/src/com/intellij/execution/RunnerAndConfigurationSettings.java +++ b/platform/lang-api/src/com/intellij/execution/RunnerAndConfigurationSettings.java @@ -39,9 +39,11 @@ public interface RunnerAndConfigurationSettings { String getName(); - RunnerSettings getRunnerSettings(ProgramRunner runner); + @NotNull + RunnerSettings getRunnerSettings(@NotNull ProgramRunner runner); - ConfigurationPerRunnerSettings getConfigurationSettings(ProgramRunner runner); + @NotNull + ConfigurationPerRunnerSettings getConfigurationSettings(@NotNull ProgramRunner runner); @Nullable ConfigurationType getType(); diff --git a/platform/lang-api/src/com/intellij/execution/configurations/CommandLineState.java b/platform/lang-api/src/com/intellij/execution/configurations/CommandLineState.java index 7de2365cce5a..65f6722ce208 100644 --- a/platform/lang-api/src/com/intellij/execution/configurations/CommandLineState.java +++ b/platform/lang-api/src/com/intellij/execution/configurations/CommandLineState.java @@ -43,6 +43,10 @@ public abstract class CommandLineState implements RunnableState { myEnvironment = environment; } + public ExecutionEnvironment getEnvironment() { + return myEnvironment; + } + public RunnerSettings getRunnerSettings() { return myEnvironment.getRunnerSettings(); } @@ -51,6 +55,11 @@ public abstract class CommandLineState implements RunnableState { return myEnvironment.getConfigurationSettings(); } + @NotNull + public ExecutionTarget getExecutionTarget() { + return myEnvironment.getExecutionTarget(); + } + public ExecutionResult execute(@NotNull final Executor executor, @NotNull final ProgramRunner runner) throws ExecutionException { final ProcessHandler processHandler = startProcess(); final ConsoleView console = createConsole(executor); diff --git a/platform/lang-api/src/com/intellij/execution/runners/ExecutionEnvironment.java b/platform/lang-api/src/com/intellij/execution/runners/ExecutionEnvironment.java index c73fd042c82a..9daadbcb9e8d 100644 --- a/platform/lang-api/src/com/intellij/execution/runners/ExecutionEnvironment.java +++ b/platform/lang-api/src/com/intellij/execution/runners/ExecutionEnvironment.java @@ -30,17 +30,17 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.TestOnly; -/** - * @author spleaner - */ + public class ExecutionEnvironment { - private final Project myProject; - private final RunContentDescriptor myContentToReuse; + @Nullable private final Project myProject; + + @NotNull private RunProfile myRunProfile; @NotNull private ExecutionTarget myTarget; - private RunProfile myRunProfile; - private RunnerSettings myRunnerSettings; - private ConfigurationPerRunnerSettings myConfigurationSettings; + + @Nullable private RunnerSettings myRunnerSettings; + @Nullable private ConfigurationPerRunnerSettings myConfigurationSettings; @Nullable private RunnerAndConfigurationSettings myRunnerAndConfigurationSettings; + @Nullable private final RunContentDescriptor myContentToReuse; @TestOnly public ExecutionEnvironment() { @@ -50,7 +50,7 @@ public class ExecutionEnvironment { public ExecutionEnvironment(@NotNull final ProgramRunner runner, @NotNull final RunnerAndConfigurationSettings configuration, - Project project) { + @Nullable Project project) { this(runner, DefaultExecutionTarget.INSTANCE, configuration, project); } @@ -59,8 +59,8 @@ public class ExecutionEnvironment { @NotNull final RunnerAndConfigurationSettings configuration, Project project) { this(configuration.getConfiguration(), - project, target, + project, configuration.getRunnerSettings(runner), configuration.getConfigurationSettings(runner), null, @@ -68,27 +68,27 @@ public class ExecutionEnvironment { } public ExecutionEnvironment(@NotNull RunProfile runProfile, - Project project, - RunnerSettings runnerSettings, - ConfigurationPerRunnerSettings configurationSettings, + @Nullable Project project, + @Nullable RunnerSettings runnerSettings, + @Nullable ConfigurationPerRunnerSettings configurationSettings, @Nullable RunContentDescriptor contentToReuse) { this(runProfile, project, runnerSettings, configurationSettings, contentToReuse, null); } public ExecutionEnvironment(@NotNull RunProfile runProfile, - Project project, - RunnerSettings runnerSettings, - ConfigurationPerRunnerSettings configurationSettings, - @Nullable RunContentDescriptor contentToReuse, - @Nullable RunnerAndConfigurationSettings settings) { - this(runProfile, project, DefaultExecutionTarget.INSTANCE, runnerSettings, configurationSettings, contentToReuse, settings); + @Nullable Project project, + @Nullable RunnerSettings runnerSettings, + @Nullable ConfigurationPerRunnerSettings configurationSettings, + @Nullable RunContentDescriptor contentToReuse, + @Nullable RunnerAndConfigurationSettings settings) { + this(runProfile, DefaultExecutionTarget.INSTANCE, project, runnerSettings, configurationSettings, contentToReuse, settings); } public ExecutionEnvironment(@NotNull RunProfile runProfile, - Project project, @NotNull ExecutionTarget target, - RunnerSettings runnerSettings, - ConfigurationPerRunnerSettings configurationSettings, + @Nullable Project project, + @Nullable RunnerSettings runnerSettings, + @Nullable ConfigurationPerRunnerSettings configurationSettings, @Nullable RunContentDescriptor contentToReuse, @Nullable RunnerAndConfigurationSettings settings) { myTarget = target; @@ -104,15 +104,23 @@ public class ExecutionEnvironment { * @deprecated use {@link #ExecutionEnvironment(ProgramRunner, com.intellij.execution.RunnerAndConfigurationSettings, com.intellij.openapi.project.Project)} */ @Deprecated - public ExecutionEnvironment(@NotNull final ProgramRunner runner, @NotNull final RunnerAndConfigurationSettings configuration, final DataContext context) { - this(configuration.getConfiguration(), PlatformDataKeys.PROJECT.getData(context), configuration.getRunnerSettings(runner), configuration.getConfigurationSettings(runner), null, configuration); + public ExecutionEnvironment(@NotNull final ProgramRunner runner, + @NotNull final RunnerAndConfigurationSettings configuration, + @NotNull final DataContext context) { + this(configuration.getConfiguration(), + PlatformDataKeys.PROJECT.getData(context), + configuration.getRunnerSettings(runner), + configuration.getConfigurationSettings(runner), + null, + configuration); } /** * @deprecated use {@link #ExecutionEnvironment(com.intellij.execution.configurations.RunProfile, com.intellij.openapi.project.Project, com.intellij.execution.configurations.RunnerSettings, com.intellij.execution.configurations.ConfigurationPerRunnerSettings, com.intellij.execution.ui.RunContentDescriptor)} */ @Deprecated - public ExecutionEnvironment(@NotNull final RunProfile profile, final DataContext dataContext) { + public ExecutionEnvironment(@NotNull final RunProfile profile, + @NotNull final DataContext dataContext) { this(profile, PlatformDataKeys.PROJECT.getData(dataContext), null, null, null); } @@ -121,9 +129,9 @@ public class ExecutionEnvironment { */ @Deprecated public ExecutionEnvironment(@NotNull final RunProfile runProfile, - final RunnerSettings runnerSettings, - final ConfigurationPerRunnerSettings configurationSettings, - final DataContext dataContext) { + @Nullable final RunnerSettings runnerSettings, + @Nullable final ConfigurationPerRunnerSettings configurationSettings, + @NotNull final DataContext dataContext) { this(runProfile, PlatformDataKeys.PROJECT.getData(dataContext), runnerSettings, configurationSettings, null); } @@ -165,16 +173,23 @@ public class ExecutionEnvironment { return myContentToReuse; } + @Nullable + public String getRunnerId() { + return myConfigurationSettings == null ? null : myConfigurationSettings.getRunnerId(); + } + @Nullable public RunnerSettings getRunnerSettings() { return myRunnerSettings; } + @Nullable public ConfigurationPerRunnerSettings getConfigurationSettings() { return myConfigurationSettings; } - @Nullable public RunProfileState getState(final Executor executor) throws ExecutionException { + @Nullable + public RunProfileState getState(final Executor executor) throws ExecutionException { return myRunProfile.getState(executor, this); } } diff --git a/platform/lang-impl/src/com/intellij/execution/ExecutionTargetManagerImpl.java b/platform/lang-impl/src/com/intellij/execution/ExecutionTargetManagerImpl.java index 27d998dce49f..0a027ef7ddf3 100644 --- a/platform/lang-impl/src/com/intellij/execution/ExecutionTargetManagerImpl.java +++ b/platform/lang-impl/src/com/intellij/execution/ExecutionTargetManagerImpl.java @@ -17,10 +17,11 @@ package com.intellij.execution; import com.intellij.execution.impl.RunManagerImpl; import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.components.ProjectComponent; +import com.intellij.openapi.components.*; import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.project.Project; import com.intellij.util.containers.ContainerUtil; +import org.jdom.Element; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -28,11 +29,15 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -public class ExecutionTargetManagerImpl extends ExecutionTargetManager implements ProjectComponent { + +@State(name = "XcodeMetaData", storages = {@Storage(file = StoragePathMacros.WORKSPACE_FILE, scheme = StorageScheme.DEFAULT)}) +public class ExecutionTargetManagerImpl extends ExecutionTargetManager implements ProjectComponent, PersistentStateComponent { @NotNull private final Project myProject; @NotNull private final Object myActiveTargetLock = new Object(); @Nullable private ExecutionTarget myActiveTarget; + @Nullable private String mySavedActiveTargetId; + public ExecutionTargetManagerImpl(@NotNull Project project) { myProject = project; } @@ -45,12 +50,34 @@ public class ExecutionTargetManagerImpl extends ExecutionTargetManager implement public void projectClosed() { } + @Override + public Element getState() { + synchronized (myActiveTargetLock) { + Element state = new Element("state"); + + String id = myActiveTarget == null ? mySavedActiveTargetId : myActiveTarget.getId(); + if (id != null) state.setAttribute("SELECTED_TARGET", id); + return state; + } + } + + @Override + public void loadState(Element state) { + synchronized (myActiveTargetLock) { + if (myActiveTarget == null && mySavedActiveTargetId == null) { + mySavedActiveTargetId = state.getAttributeValue("SELECTED_TARGET"); + } + } + } + @Override public void initComponent() { RunManagerImpl.getInstanceImpl(myProject).addRunManagerListener(new RunManagerAdapter() { @Override public void runConfigurationChanged(@NotNull RunnerAndConfigurationSettings settings) { - updateActiveTarget(settings); + if (settings == RunManager.getInstance(myProject).getSelectedConfiguration()) { + updateActiveTarget(settings); + } } @Override @@ -86,7 +113,7 @@ public class ExecutionTargetManagerImpl extends ExecutionTargetManager implement public void setActiveTarget(@NotNull ExecutionTarget target) { ApplicationManager.getApplication().assertIsDispatchThread(); synchronized (myActiveTargetLock) { - myActiveTarget = target; + doSetActiveTarget(target); } } @@ -95,12 +122,32 @@ public class ExecutionTargetManagerImpl extends ExecutionTargetManager implement } private void updateActiveTarget(@Nullable RunnerAndConfigurationSettings settings) { - if (settings == null) return; - - List suitable = getTargetsFor(settings); + List suitable = settings == null ? Collections.singletonList(DefaultExecutionTarget.INSTANCE) + : getTargetsFor(settings); synchronized (myActiveTargetLock) { - int index = suitable.indexOf(myActiveTarget); - myActiveTarget = index >= 0 ? suitable.get(index) : ContainerUtil.getFirstItem(suitable, DefaultExecutionTarget.INSTANCE); + int index = -1; + if (myActiveTarget != null) { + index = suitable.indexOf(myActiveTarget); + } + else if (mySavedActiveTargetId != null) { + for (int i = 0, size = suitable.size(); i < size; i++) { + if (suitable.get(i).getId().equals(mySavedActiveTargetId)) { + index = i; + break; + } + } + } + doSetActiveTarget(index >= 0 ? suitable.get(index) : ContainerUtil.getFirstItem(suitable, DefaultExecutionTarget.INSTANCE)); + } + } + + private void doSetActiveTarget(@NotNull ExecutionTarget newTarget) { + mySavedActiveTargetId = null; + + ExecutionTarget prev = myActiveTarget; + myActiveTarget = newTarget; + if (prev != null && !prev.equals(myActiveTarget)) { + myProject.getMessageBus().syncPublisher(TOPIC).activeTargetChanged(myActiveTarget); } } diff --git a/platform/lang-impl/src/com/intellij/execution/actions/RunConfigurationsComboBoxAction.java b/platform/lang-impl/src/com/intellij/execution/actions/RunConfigurationsComboBoxAction.java index dcbe8ffe8b2e..9e4ebd11329e 100644 --- a/platform/lang-impl/src/com/intellij/execution/actions/RunConfigurationsComboBoxAction.java +++ b/platform/lang-impl/src/com/intellij/execution/actions/RunConfigurationsComboBoxAction.java @@ -269,13 +269,11 @@ public class RunConfigurationsComboBoxAction extends ComboBoxAction implements D @Override public void setSelected(AnActionEvent e, boolean state) { - if (state) { - ExecutionTargetManager.setActiveTarget(myProject, myTarget); - updateButton(ExecutionTargetManager.getActiveTarget(myProject), - RunManagerEx.getInstanceEx(myProject).getSelectedConfiguration(), - myProject, - e.getPresentation()); - } + ExecutionTargetManager.setActiveTarget(myProject, myTarget); + updateButton(ExecutionTargetManager.getActiveTarget(myProject), + RunManagerEx.getInstanceEx(myProject).getSelectedConfiguration(), + myProject, + e.getPresentation()); } } diff --git a/platform/lang-impl/src/com/intellij/execution/impl/ExecutionManagerImpl.java b/platform/lang-impl/src/com/intellij/execution/impl/ExecutionManagerImpl.java index f0efd2c10188..5d938c119a8d 100644 --- a/platform/lang-impl/src/com/intellij/execution/impl/ExecutionManagerImpl.java +++ b/platform/lang-impl/src/com/intellij/execution/impl/ExecutionManagerImpl.java @@ -18,7 +18,10 @@ package com.intellij.execution.impl; import com.intellij.CommonBundle; import com.intellij.execution.*; -import com.intellij.execution.configurations.*; +import com.intellij.execution.configurations.ConfigurationPerRunnerSettings; +import com.intellij.execution.configurations.RunConfiguration; +import com.intellij.execution.configurations.RunProfile; +import com.intellij.execution.configurations.RunProfileState; import com.intellij.execution.process.ProcessAdapter; import com.intellij.execution.process.ProcessEvent; import com.intellij.execution.process.ProcessHandler; @@ -101,9 +104,11 @@ public class ExecutionManagerImpl extends ExecutionManager implements ProjectCom return handlers.toArray(new ProcessHandler[handlers.size()]); } - public void compileAndRun(final Runnable startRunnable, final RunProfile configuration, final @Nullable RunProfileState state, @Nullable final Runnable onCancelRunnable) { - if (configuration instanceof RunConfiguration) { - final RunConfiguration runConfiguration = (RunConfiguration)configuration; + public void compileAndRun(@NotNull final Runnable startRunnable, @NotNull final ExecutionEnvironment env, final @Nullable RunProfileState state, @Nullable final Runnable onCancelRunnable) { + RunProfile profile = env.getRunProfile(); + + if (profile instanceof RunConfiguration) { + final RunConfiguration runConfiguration = (RunConfiguration)profile; final RunManagerImpl runManager = RunManagerImpl.getInstanceImpl(myProject); final List activeTasks = new ArrayList(); @@ -120,7 +125,7 @@ public class ExecutionManagerImpl extends ExecutionManager implements ProjectCom public void run() { for (BeforeRunTask task : activeTasks) { BeforeRunTaskProvider provider = BeforeRunTaskProvider.getProvider(myProject, task.getProviderId()); - if(provider != null && !provider.executeTask(dataContext, runConfiguration, task)) { + if(provider != null && !provider.executeTask(dataContext, runConfiguration, env, task)) { if (onCancelRunnable != null) { SwingUtilities.invokeLater(onCancelRunnable); } @@ -194,8 +199,7 @@ public class ExecutionManagerImpl extends ExecutionManager implements ProjectCom startRunnable.run(); } else { - final RunnerSettings runnerSettings = env.getRunnerSettings(); - compileAndRun(startRunnable, runnerSettings != null ? runnerSettings.getRunProfile() : profile, state, new Runnable() { + compileAndRun(startRunnable, env, state, new Runnable() { public void run() { if (!project.isDisposed()) { project.getMessageBus().syncPublisher(EXECUTION_TOPIC).processNotStarted(executor.getId(), env); diff --git a/platform/lang-impl/src/com/intellij/execution/impl/RunConfigurationBeforeRunProvider.java b/platform/lang-impl/src/com/intellij/execution/impl/RunConfigurationBeforeRunProvider.java index 783654894c1c..c903cfba1917 100644 --- a/platform/lang-impl/src/com/intellij/execution/impl/RunConfigurationBeforeRunProvider.java +++ b/platform/lang-impl/src/com/intellij/execution/impl/RunConfigurationBeforeRunProvider.java @@ -152,7 +152,10 @@ extends BeforeRunTaskProvider getTargetsFor(@Nullable RunnerAndConfigurationSettings settings) { + return Collections.singletonList(DefaultExecutionTarget.INSTANCE); + } +} diff --git a/platform/util/src/com/intellij/icons/AllIcons.java b/platform/util/src/com/intellij/icons/AllIcons.java index 8989ea826894..d3c0f7824617 100644 --- a/platform/util/src/com/intellij/icons/AllIcons.java +++ b/platform/util/src/com/intellij/icons/AllIcons.java @@ -920,7 +920,7 @@ public class AllIcons { public static final Icon HidePassed = IconLoader.getIcon("/runConfigurations/hidePassed.png"); // 16x16 public static final Icon IgnoredTest = IconLoader.getIcon("/runConfigurations/ignoredTest.png"); // 16x16 public static final Icon InvalidConfigurationLayer = IconLoader.getIcon("/runConfigurations/invalidConfigurationLayer.png"); // 16x16 - public static final Icon Junit = IconLoader.getIcon("/runConfigurations/junit.png"); // 16x16 + public static final Icon UnitTest = IconLoader.getIcon("/runConfigurations/junit.png"); // 16x16 public static final Icon LoadingTree = IconLoader.getIcon("/runConfigurations/loadingTree.png"); // 16x16 public static final Icon Ql_console = IconLoader.getIcon("/runConfigurations/ql_console.png"); // 16x16 public static final Icon Remote = IconLoader.getIcon("/runConfigurations/remote.png"); // 16x16 diff --git a/plugins/IdeaTestAssistant/src/com/intellij/testAssistant/TestDataHighlightingPass.java b/plugins/IdeaTestAssistant/src/com/intellij/testAssistant/TestDataHighlightingPass.java index e3d1fc96ddb3..947564ba9fd5 100644 --- a/plugins/IdeaTestAssistant/src/com/intellij/testAssistant/TestDataHighlightingPass.java +++ b/plugins/IdeaTestAssistant/src/com/intellij/testAssistant/TestDataHighlightingPass.java @@ -36,7 +36,7 @@ public class TestDataHighlightingPass extends TextEditorHighlightingPass { private static final Key KEY = Key.create("TestDataHighlighterKey"); private static final Object VALUE = new Object(); - private static final Icon ICON = AllIcons.RunConfigurations.Junit; + private static final Icon ICON = AllIcons.RunConfigurations.UnitTest; private static final GutterIconRenderer ICON_RENDERER = new MyGutterIconRenderer(); private static final TextAttributes CARET_ATTRIBUTES = new TextAttributes(Color.BLUE, null, null, null, Font.BOLD); diff --git a/plugins/ant/src/com/intellij/lang/ant/config/impl/AntBeforeRunTaskProvider.java b/plugins/ant/src/com/intellij/lang/ant/config/impl/AntBeforeRunTaskProvider.java index d1b589dba850..030dd292eeeb 100644 --- a/plugins/ant/src/com/intellij/lang/ant/config/impl/AntBeforeRunTaskProvider.java +++ b/plugins/ant/src/com/intellij/lang/ant/config/impl/AntBeforeRunTaskProvider.java @@ -18,6 +18,7 @@ package com.intellij.lang.ant.config.impl; import com.intellij.execution.BeforeRunTaskProvider; import com.intellij.execution.RunManagerEx; import com.intellij.execution.configurations.RunConfiguration; +import com.intellij.execution.runners.ExecutionEnvironment; import com.intellij.lang.ant.AntBundle; import com.intellij.lang.ant.AntIcons; import com.intellij.lang.ant.config.AntBuildFile; @@ -105,7 +106,7 @@ public class AntBeforeRunTaskProvider extends BeforeRunTaskProvider failedTests) { - super(project, configuration, runnerSettings, configurationSettings); + super(project, configuration, environment); myFailedTests = failedTests; } diff --git a/plugins/junit/src/com/intellij/execution/junit/TestObject.java b/plugins/junit/src/com/intellij/execution/junit/TestObject.java index a6bded6fe36b..ef103a8695b0 100644 --- a/plugins/junit/src/com/intellij/execution/junit/TestObject.java +++ b/plugins/junit/src/com/intellij/execution/junit/TestObject.java @@ -32,6 +32,7 @@ import com.intellij.execution.junit2.ui.model.RootTestInfo; import com.intellij.execution.junit2.ui.properties.JUnitConsoleProperties; import com.intellij.execution.process.ProcessAdapter; import com.intellij.execution.process.ProcessEvent; +import com.intellij.execution.runners.ExecutionEnvironment; import com.intellij.execution.runners.ProgramRunner; import com.intellij.execution.testframework.*; import com.intellij.execution.ui.ConsoleViewContentType; @@ -81,26 +82,25 @@ public abstract class TestObject implements JavaCommandLine { protected JavaParameters myJavaParameters; private final Project myProject; protected final JUnitConfiguration myConfiguration; - private final RunnerSettings myRunnerSettings; - private final ConfigurationPerRunnerSettings myConfigurationSettings; + private final ExecutionEnvironment myEnvironment; protected File myTempFile = null; public File myListenersFile; public static TestObject fromString(final String id, final Project project, final JUnitConfiguration configuration, - RunnerSettings runnerSettings, ConfigurationPerRunnerSettings configurationSettings) { + ExecutionEnvironment environment) { if (JUnitConfiguration.TEST_METHOD.equals(id)) - return new TestMethod(project, configuration, runnerSettings, configurationSettings); + return new TestMethod(project, configuration, environment); if (JUnitConfiguration.TEST_CLASS.equals(id)) - return new TestClass(project, configuration, runnerSettings, configurationSettings); + return new TestClass(project, configuration, environment); if (JUnitConfiguration.TEST_PACKAGE.equals(id)) - return new TestPackage(project, configuration, runnerSettings, configurationSettings); + return new TestPackage(project, configuration, environment); else if (JUnitConfiguration.TEST_DIRECTORY.equals(id)) { - return new TestDirectory(project, configuration, runnerSettings, configurationSettings); + return new TestDirectory(project, configuration, environment); } if (JUnitConfiguration.TEST_PATTERN.equals(id)) { - return new TestsPattern(project, configuration, runnerSettings, configurationSettings); + return new TestsPattern(project, configuration, environment); } return NOT_CONFIGURED; } @@ -112,24 +112,22 @@ public abstract class TestObject implements JavaCommandLine { protected TestObject(final Project project, final JUnitConfiguration configuration, - RunnerSettings runnerSettings, - ConfigurationPerRunnerSettings configurationSettings) { + ExecutionEnvironment environment) { myProject = project; myConfiguration = configuration; - myRunnerSettings = runnerSettings; - myConfigurationSettings = configurationSettings; + myEnvironment = environment; } public abstract String suggestActionName(); @Override public RunnerSettings getRunnerSettings() { - return myRunnerSettings; + return myEnvironment.getRunnerSettings(); } @Override public ConfigurationPerRunnerSettings getConfigurationSettings() { - return myConfigurationSettings; + return myEnvironment.getConfigurationSettings(); } public abstract RefactoringElementListener getListener(PsiElement element, JUnitConfiguration configuration); @@ -146,7 +144,7 @@ public abstract class TestObject implements JavaCommandLine { myConfiguration.isAlternativeJrePathEnabled() ? myConfiguration.getAlternativeJrePath() : null); } - private static final TestObject NOT_CONFIGURED = new TestObject(null, null, null, null) { + private static final TestObject NOT_CONFIGURED = new TestObject(null, null, null) { @Override public RefactoringElementListener getListener(final PsiElement element, final JUnitConfiguration configuration) { return null; @@ -204,7 +202,7 @@ public abstract class TestObject implements JavaCommandLine { myJavaParameters.getClassPath().add(PathUtil.getJarPathForClass(JUnitStarter.class)); myJavaParameters.getProgramParametersList().add(JUnitStarter.IDE_VERSION + JUnitStarter.VERSION); for (RunConfigurationExtension ext : Extensions.getExtensions(RunConfigurationExtension.EP_NAME)) { - ext.updateJavaParameters(myConfiguration, myJavaParameters, myRunnerSettings); + ext.updateJavaParameters(myConfiguration, myJavaParameters, getRunnerSettings()); } final Object[] listeners = Extensions.getExtensions(IDEAJUnitListener.EP_NAME); @@ -212,7 +210,7 @@ public abstract class TestObject implements JavaCommandLine { for (final Object listener : listeners) { boolean enabled = true; for (RunConfigurationExtension ext : Extensions.getExtensions(RunConfigurationExtension.EP_NAME)) { - if (ext.isListenerDisabled(myConfiguration, listener, myRunnerSettings)) { + if (ext.isListenerDisabled(myConfiguration, listener, getRunnerSettings())) { enabled = false; break; } @@ -344,7 +342,7 @@ public abstract class TestObject implements JavaCommandLine { } final RerunFailedTestsAction rerunFailedTestsAction = new RerunFailedTestsAction(consoleView.getComponent()); - rerunFailedTestsAction.init(consoleProperties, myRunnerSettings, myConfigurationSettings); + rerunFailedTestsAction.init(consoleProperties, myEnvironment); rerunFailedTestsAction.setModelProvider(new Getter() { @Override public TestFrameworkRunningModel get() { @@ -372,7 +370,7 @@ public abstract class TestObject implements JavaCommandLine { return; } - if (myRunnerSettings.getData() != null) { + if (getRunnerSettings().getData() != null) { final String actionName = executor.getActionName(); throw new CantRunException(actionName + " is disabled in fork mode.
Please change fork mode to <none> to " + actionName.toLowerCase() + "."); } diff --git a/plugins/junit/src/com/intellij/execution/junit/TestPackage.java b/plugins/junit/src/com/intellij/execution/junit/TestPackage.java index 2bb70b12c018..9bc96662a5a0 100644 --- a/plugins/junit/src/com/intellij/execution/junit/TestPackage.java +++ b/plugins/junit/src/com/intellij/execution/junit/TestPackage.java @@ -17,8 +17,6 @@ package com.intellij.execution.junit; import com.intellij.execution.*; -import com.intellij.execution.configurations.ConfigurationPerRunnerSettings; -import com.intellij.execution.configurations.RunnerSettings; import com.intellij.execution.configurations.RuntimeConfigurationException; import com.intellij.execution.configurations.RuntimeConfigurationWarning; import com.intellij.execution.executors.DefaultDebugExecutor; @@ -75,9 +73,8 @@ public class TestPackage extends TestObject { public TestPackage(final Project project, final JUnitConfiguration configuration, - RunnerSettings runnerSettings, - ConfigurationPerRunnerSettings configurationSettings) { - super(project, configuration, runnerSettings, configurationSettings); + ExecutionEnvironment environment) { + super(project, configuration, environment); } diff --git a/plugins/junit/src/com/intellij/execution/junit/TestsPattern.java b/plugins/junit/src/com/intellij/execution/junit/TestsPattern.java index cadc66d213c3..fe6f255cde35 100644 --- a/plugins/junit/src/com/intellij/execution/junit/TestsPattern.java +++ b/plugins/junit/src/com/intellij/execution/junit/TestsPattern.java @@ -22,7 +22,10 @@ package com.intellij.execution.junit; import com.intellij.execution.CantRunException; import com.intellij.execution.JavaExecutionUtil; -import com.intellij.execution.configurations.*; +import com.intellij.execution.configurations.JavaParameters; +import com.intellij.execution.configurations.RuntimeConfigurationException; +import com.intellij.execution.configurations.RuntimeConfigurationWarning; +import com.intellij.execution.runners.ExecutionEnvironment; import com.intellij.execution.util.JavaParametersUtil; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleUtil; @@ -50,9 +53,8 @@ import java.util.Set; public class TestsPattern extends TestPackage { public TestsPattern(final Project project, final JUnitConfiguration configuration, - RunnerSettings runnerSettings, - ConfigurationPerRunnerSettings configurationSettings) { - super(project, configuration, runnerSettings, configurationSettings); + ExecutionEnvironment environment) { + super(project, configuration, environment); } @Override diff --git a/plugins/junit/src/com/intellij/execution/junit2/ui/actions/RerunFailedTestsAction.java b/plugins/junit/src/com/intellij/execution/junit2/ui/actions/RerunFailedTestsAction.java index 55bb8c164336..66670a754efc 100644 --- a/plugins/junit/src/com/intellij/execution/junit2/ui/actions/RerunFailedTestsAction.java +++ b/plugins/junit/src/com/intellij/execution/junit2/ui/actions/RerunFailedTestsAction.java @@ -42,7 +42,7 @@ public class RerunFailedTestsAction extends AbstractRerunFailedTestsAction { @Override public MyRunProfile getRunProfile() { final JUnitConfiguration configuration = (JUnitConfiguration)getModel().getProperties().getConfiguration(); - final TestMethods testMethods = new TestMethods(configuration.getProject(), configuration, myRunnerSettings, myConfigurationPerRunnerSettings, getFailedTests(configuration.getProject())); + final TestMethods testMethods = new TestMethods(configuration.getProject(), configuration, myEnvironment, getFailedTests(configuration.getProject())); return new MyRunProfile(configuration) { @NotNull public Module[] getModules() { diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/tasks/MavenBeforeRunTasksProvider.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/tasks/MavenBeforeRunTasksProvider.java index 3cb197d11d9d..18b6fac58e23 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/tasks/MavenBeforeRunTasksProvider.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/tasks/MavenBeforeRunTasksProvider.java @@ -17,6 +17,7 @@ package org.jetbrains.idea.maven.tasks; import com.intellij.execution.BeforeRunTaskProvider; import com.intellij.execution.configurations.RunConfiguration; +import com.intellij.execution.runners.ExecutionEnvironment; import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.actionSystem.PlatformDataKeys; import com.intellij.openapi.application.ApplicationManager; @@ -117,7 +118,10 @@ public class MavenBeforeRunTasksProvider extends BeforeRunTaskProvider() { public TestFrameworkRunningModel get() { return console.getResultsView();