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 e7e3ce8fdf76..491413be72e6 100644 --- a/platform/lang-api/src/com/intellij/execution/runners/ExecutionEnvironment.java +++ b/platform/lang-api/src/com/intellij/execution/runners/ExecutionEnvironment.java @@ -16,16 +16,20 @@ package com.intellij.execution.runners; -import com.intellij.execution.RunnerAndConfigurationSettings; -import com.intellij.execution.Executor; import com.intellij.execution.ExecutionException; -import com.intellij.execution.configurations.RunProfile; -import com.intellij.execution.configurations.RunnerSettings; +import com.intellij.execution.Executor; +import com.intellij.execution.RunnerAndConfigurationSettings; import com.intellij.execution.configurations.ConfigurationPerRunnerSettings; +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 com.intellij.openapi.actionSystem.DataContext; +import com.intellij.openapi.actionSystem.PlatformDataKeys; +import com.intellij.openapi.project.Project; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.TestOnly; /** * @author spleaner @@ -36,6 +40,7 @@ public class ExecutionEnvironment { private RunnerSettings myRunnerSettings; private ConfigurationPerRunnerSettings myConfigurationSettings; + @TestOnly public ExecutionEnvironment() { } @@ -62,10 +67,21 @@ public class ExecutionEnvironment { return myRunProfile; } + @Nullable + public Project getProject() { + return PlatformDataKeys.PROJECT.getData(myDataContext); + } + + @Deprecated public DataContext getDataContext() { return myDataContext; } + @Nullable + public RunContentDescriptor getContentToReuse() { + return GenericProgramRunner.CONTENT_TO_REUSE_DATA_KEY.getData(myDataContext); + } + @Nullable public RunnerSettings getRunnerSettings() { return myRunnerSettings; 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 82eb66b03cc0..30dcbc46cc8a 100644 --- a/platform/lang-api/src/com/intellij/execution/runners/GenericProgramRunner.java +++ b/platform/lang-api/src/com/intellij/execution/runners/GenericProgramRunner.java @@ -26,9 +26,7 @@ import com.intellij.execution.ui.RunContentDescriptor; import com.intellij.history.LocalHistory; import com.intellij.history.LocalHistoryConfiguration; import com.intellij.openapi.actionSystem.AnAction; -import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.actionSystem.DataKey; -import com.intellij.openapi.actionSystem.PlatformDataKeys; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.options.SettingsEditor; import com.intellij.openapi.project.Project; @@ -75,15 +73,14 @@ public abstract class GenericProgramRunner public void execute(@NotNull final Executor executor, @NotNull final ExecutionEnvironment env, @Nullable final Callback callback) throws ExecutionException { - final DataContext dataContext = env.getDataContext(); final RunProfile profile = env.getRunProfile(); - final Project project = PlatformDataKeys.PROJECT.getData(dataContext); + final Project project = env.getProject(); if (project == null) { return; } final RunContentDescriptor reuseContent = - ExecutionManager.getInstance(project).getContentManager().getReuseContent(executor, dataContext); + ExecutionManager.getInstance(project).getContentManager().getReuseContent(executor, env.getContentToReuse()); final RunProfileState state = env.getState(executor); if (state == null) { diff --git a/platform/lang-api/src/com/intellij/execution/ui/RunContentManager.java b/platform/lang-api/src/com/intellij/execution/ui/RunContentManager.java index 52d4ba13be4f..6439cdc0cf74 100644 --- a/platform/lang-api/src/com/intellij/execution/ui/RunContentManager.java +++ b/platform/lang-api/src/com/intellij/execution/ui/RunContentManager.java @@ -34,12 +34,16 @@ public interface RunContentManager { /** * to reduce number of open contents RunContentManager reuses * some of them during showRunContent (for ex. if a process was stopped) - * - * getReuseContent returns content that will be reused by showRunContent - * @param dataContext - * @return + * @return content that will be reused by showRunContent */ @Nullable + RunContentDescriptor getReuseContent(Executor requestor, @Nullable RunContentDescriptor contentToReuse); + + /** + * @deprecated use {@link #getReuseContent(com.intellij.execution.Executor, RunContentDescriptor)} + */ + @Deprecated + @Nullable RunContentDescriptor getReuseContent(Executor requestor, DataContext dataContext); @Nullable diff --git a/platform/lang-impl/src/com/intellij/execution/ExecutionUtil.java b/platform/lang-impl/src/com/intellij/execution/ExecutionUtil.java index 03ad4119469a..edcb446c5a37 100644 --- a/platform/lang-impl/src/com/intellij/execution/ExecutionUtil.java +++ b/platform/lang-impl/src/com/intellij/execution/ExecutionUtil.java @@ -18,25 +18,21 @@ package com.intellij.execution; import com.intellij.execution.configurations.RunConfiguration; import com.intellij.execution.configurations.RuntimeConfigurationException; -import com.intellij.execution.impl.RunnerAndConfigurationSettingsImpl; -import com.intellij.execution.impl.RunManagerImpl; import com.intellij.execution.impl.RunDialog; +import com.intellij.execution.impl.RunManagerImpl; +import com.intellij.execution.impl.RunnerAndConfigurationSettingsImpl; import com.intellij.execution.runners.ExecutionEnvironment; import com.intellij.execution.runners.ProgramRunner; import com.intellij.openapi.actionSystem.DataContext; -import com.intellij.openapi.actionSystem.PlatformDataKeys; -import com.intellij.openapi.actionSystem.impl.SimpleDataContext; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.Messages; import com.intellij.openapi.util.IconLoader; import com.intellij.ui.LayeredIcon; -import com.intellij.ide.DataManager; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; -import java.awt.*; /** * @author spleaner @@ -58,8 +54,6 @@ public class ExecutionUtil { ProgramRunner runner = getRunner(executor.getId(), configuration); LOG.assertTrue(runner != null, "Runner MUST not be null!"); - final Component component = PlatformDataKeys.CONTEXT_COMPONENT.getData(dataContext); - LOG.assertTrue(component != null, "component MUST not be null!"); if (!RunManagerImpl.canRunConfiguration(configuration, executor)) { final boolean result = RunDialog.editConfiguration(project, configuration, "Edit configuration", executor.getActionName(), executor.getIcon()); if (!result) { @@ -91,11 +85,6 @@ public class ExecutionUtil { } } - private static DataContext recreateDataContext(final Project project, final Component component) { - if (component != null && component.isDisplayable()) return DataManager.getInstance().getDataContext(component); - return SimpleDataContext.getProjectContext(project); - } - public static Icon getConfigurationIcon(final Project project, final RunnerAndConfigurationSettings settings, final boolean invalid) { final RunManager runManager = RunManager.getInstance(project); RunConfiguration configuration = settings.getConfiguration(); diff --git a/platform/lang-impl/src/com/intellij/execution/ui/RunContentManagerImpl.java b/platform/lang-impl/src/com/intellij/execution/ui/RunContentManagerImpl.java index eafb3e3485d5..cab83d8903a1 100644 --- a/platform/lang-impl/src/com/intellij/execution/ui/RunContentManagerImpl.java +++ b/platform/lang-impl/src/com/intellij/execution/ui/RunContentManagerImpl.java @@ -312,13 +312,15 @@ public class RunContentManagerImpl implements RunContentManager, Disposable { @Nullable public RunContentDescriptor getReuseContent(final Executor requestor, DataContext dataContext) { if(ApplicationManager.getApplication().isUnitTestMode()) return null; - RunContentDescriptor runContentDescriptor = GenericProgramRunner.CONTENT_TO_REUSE_DATA_KEY.getData(dataContext); + return getReuseContent(requestor, GenericProgramRunner.CONTENT_TO_REUSE_DATA_KEY.getData(dataContext)); + } - if(runContentDescriptor != null) return runContentDescriptor; + public RunContentDescriptor getReuseContent(Executor requestor, @Nullable RunContentDescriptor contentToReuse) { + if(ApplicationManager.getApplication().isUnitTestMode()) return null; + if (contentToReuse != null) return contentToReuse; final ContentManager contentManager = getContentManagerForRunner(requestor); - - return chooseReuseContentForDescriptor(contentManager, runContentDescriptor); + return chooseReuseContentForDescriptor(contentManager, contentToReuse); } public RunContentDescriptor findContentDescriptor(final Executor requestor, final ProcessHandler handler) { diff --git a/platform/lang-impl/src/com/intellij/tools/ToolRunProfile.java b/platform/lang-impl/src/com/intellij/tools/ToolRunProfile.java index f4e1b2366baa..5a22d507c024 100644 --- a/platform/lang-impl/src/com/intellij/tools/ToolRunProfile.java +++ b/platform/lang-impl/src/com/intellij/tools/ToolRunProfile.java @@ -25,12 +25,11 @@ import com.intellij.execution.filters.TextConsoleBuilderFactory; import com.intellij.execution.process.OSProcessHandler; import com.intellij.execution.process.ProcessHandler; import com.intellij.execution.process.ProcessTerminatedListener; -import com.intellij.execution.runners.ProgramRunner; import com.intellij.execution.runners.ExecutionEnvironment; +import com.intellij.execution.runners.ProgramRunner; import com.intellij.ide.IdeEventQueue; import com.intellij.ide.impl.DataManagerImpl; import com.intellij.openapi.actionSystem.DataContext; -import com.intellij.openapi.actionSystem.PlatformDataKeys; import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; import org.jetbrains.annotations.NotNull; @@ -72,7 +71,7 @@ public class ToolRunProfile implements ModuleRunProfile{ } public RunProfileState getState(@NotNull final Executor executor, @NotNull final ExecutionEnvironment env) { - final Project project = PlatformDataKeys.PROJECT.getData(env.getDataContext()); + final Project project = env.getProject(); if (project == null || myCommandLine == null) { // can return null if creation of cmd line has been cancelled return null;