summaryrefslogtreecommitdiff
path: root/platform/lang-impl/src/com/intellij/execution
diff options
context:
space:
mode:
Diffstat (limited to 'platform/lang-impl/src/com/intellij/execution')
-rw-r--r--platform/lang-impl/src/com/intellij/execution/ExecutionHelper.java54
-rw-r--r--platform/lang-impl/src/com/intellij/execution/ExecutionTargetManagerImpl.java62
-rw-r--r--platform/lang-impl/src/com/intellij/execution/ExecutorRegistryImpl.java65
-rw-r--r--platform/lang-impl/src/com/intellij/execution/ProgramRunnerUtil.java138
-rw-r--r--platform/lang-impl/src/com/intellij/execution/actions/ChooseRunConfigurationPopup.java57
-rw-r--r--platform/lang-impl/src/com/intellij/execution/actions/RunContextAction.java20
-rw-r--r--platform/lang-impl/src/com/intellij/execution/actions/StopAction.java72
-rw-r--r--platform/lang-impl/src/com/intellij/execution/console/LanguageConsoleImpl.java2
-rw-r--r--platform/lang-impl/src/com/intellij/execution/impl/ConfigurationSettingsEditor.java12
-rw-r--r--platform/lang-impl/src/com/intellij/execution/impl/ExecutionManagerImpl.java410
-rw-r--r--platform/lang-impl/src/com/intellij/execution/impl/ProjectRunConfigurationManager.java4
-rw-r--r--platform/lang-impl/src/com/intellij/execution/impl/RunConfigurationBeforeRunProvider.java22
-rw-r--r--platform/lang-impl/src/com/intellij/execution/impl/RunDialog.java5
-rw-r--r--platform/lang-impl/src/com/intellij/execution/impl/RunManagerImpl.java23
-rw-r--r--platform/lang-impl/src/com/intellij/execution/impl/RunnerRegistryImpl.java10
-rw-r--r--platform/lang-impl/src/com/intellij/execution/impl/SingleConfigurationConfigurable.java10
-rw-r--r--platform/lang-impl/src/com/intellij/execution/runners/AbstractConsoleRunnerWithHistory.java2
-rw-r--r--platform/lang-impl/src/com/intellij/execution/runners/DefaultProgramRunner.java8
-rw-r--r--platform/lang-impl/src/com/intellij/execution/runners/FakeRerunAction.java116
-rw-r--r--platform/lang-impl/src/com/intellij/execution/runners/RerunTestsAction.java71
-rw-r--r--platform/lang-impl/src/com/intellij/execution/runners/RestartAction.java124
-rw-r--r--platform/lang-impl/src/com/intellij/execution/runners/RunContentBuilder.java186
-rw-r--r--platform/lang-impl/src/com/intellij/execution/runners/RunTab.java94
-rw-r--r--platform/lang-impl/src/com/intellij/execution/ui/RunContentManagerImpl.java307
-rw-r--r--platform/lang-impl/src/com/intellij/execution/ui/RunContentWithExecutorListener.java27
-rw-r--r--platform/lang-impl/src/com/intellij/execution/ui/layout/impl/GridCellImpl.java11
-rw-r--r--platform/lang-impl/src/com/intellij/execution/ui/layout/impl/JBRunnerTabs.java4
-rw-r--r--platform/lang-impl/src/com/intellij/execution/ui/layout/impl/RunnerContentUi.java73
-rw-r--r--platform/lang-impl/src/com/intellij/execution/ui/layout/impl/RunnerLayoutUiImpl.java41
29 files changed, 952 insertions, 1078 deletions
diff --git a/platform/lang-impl/src/com/intellij/execution/ExecutionHelper.java b/platform/lang-impl/src/com/intellij/execution/ExecutionHelper.java
index c4b5eaf71daf..cce4fc571abb 100644
--- a/platform/lang-impl/src/com/intellij/execution/ExecutionHelper.java
+++ b/platform/lang-impl/src/com/intellij/execution/ExecutionHelper.java
@@ -21,6 +21,7 @@ import com.intellij.execution.executors.DefaultRunExecutor;
import com.intellij.execution.process.ProcessHandler;
import com.intellij.execution.process.ProcessOutput;
import com.intellij.execution.ui.RunContentDescriptor;
+import com.intellij.execution.ui.RunContentManager;
import com.intellij.ide.errorTreeView.NewErrorTreeViewPanel;
import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.application.ApplicationManager;
@@ -44,12 +45,8 @@ import com.intellij.ui.ListCellRendererWrapper;
import com.intellij.ui.components.JBList;
import com.intellij.ui.content.Content;
import com.intellij.ui.content.ContentFactory;
-import com.intellij.ui.content.ContentManager;
import com.intellij.ui.content.MessageView;
-import com.intellij.util.ArrayUtil;
-import com.intellij.util.Consumer;
-import com.intellij.util.Function;
-import com.intellij.util.NotNullFunction;
+import com.intellij.util.*;
import com.intellij.util.concurrency.Semaphore;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.ui.ErrorTreeView;
@@ -170,10 +167,8 @@ public class ExecutionHelper {
openMessagesView(errorTreeView, myProject, tabDisplayName);
}
catch (NullPointerException e) {
- final StringBuilder builder = new StringBuilder();
- builder.append(stdOutTitle).append("\n").append(stdout != null ? stdout : "<empty>").append("\n");
- builder.append(stderrTitle).append("\n").append(stderr != null ? stderr : "<empty>");
- Messages.showErrorDialog(builder.toString(), "Process Output");
+ Messages.showErrorDialog(stdOutTitle + "\n" + (stdout != null ? stdout : "<empty>") + "\n" + stderrTitle + "\n"
+ + (stderr != null ? stderr : "<empty>"), "Process Output");
return;
}
@@ -267,13 +262,12 @@ public class ExecutionHelper {
});
}
- public static Collection<RunContentDescriptor> findRunningConsole(final Project project,
- @NotNull final NotNullFunction<RunContentDescriptor, Boolean> descriptorMatcher) {
- final ExecutionManager executionManager = ExecutionManager.getInstance(project);
-
- final RunContentDescriptor selectedContent = executionManager.getContentManager().getSelectedContent();
+ public static Collection<RunContentDescriptor> findRunningConsole(@NotNull Project project,
+ @NotNull NotNullFunction<RunContentDescriptor, Boolean> descriptorMatcher) {
+ RunContentManager contentManager = ExecutionManager.getInstance(project).getContentManager();
+ final RunContentDescriptor selectedContent = contentManager.getSelectedContent();
if (selectedContent != null) {
- final ToolWindow toolWindow = ExecutionManager.getInstance(project).getContentManager().getToolWindowByDescriptor(selectedContent);
+ final ToolWindow toolWindow = contentManager.getToolWindowByDescriptor(selectedContent);
if (toolWindow != null && toolWindow.isVisible()) {
if (descriptorMatcher.fun(selectedContent)) {
return Collections.singletonList(selectedContent);
@@ -282,7 +276,7 @@ public class ExecutionHelper {
}
final ArrayList<RunContentDescriptor> result = ContainerUtil.newArrayList();
- for (RunContentDescriptor runContentDescriptor : executionManager.getContentManager().getAllDescriptors()) {
+ for (RunContentDescriptor runContentDescriptor : contentManager.getAllDescriptors()) {
if (descriptorMatcher.fun(runContentDescriptor)) {
result.add(runContentDescriptor);
}
@@ -290,11 +284,10 @@ public class ExecutionHelper {
return result;
}
- public static List<RunContentDescriptor> collectConsolesByDisplayName(final Project project,
+ public static List<RunContentDescriptor> collectConsolesByDisplayName(@NotNull Project project,
@NotNull NotNullFunction<String, Boolean> titleMatcher) {
- List<RunContentDescriptor> result = ContainerUtil.newArrayList();
- final ExecutionManager executionManager = ExecutionManager.getInstance(project);
- for (RunContentDescriptor runContentDescriptor : executionManager.getContentManager().getAllDescriptors()) {
+ List<RunContentDescriptor> result = new SmartList<RunContentDescriptor>();
+ for (RunContentDescriptor runContentDescriptor : ExecutionManager.getInstance(project).getContentManager().getAllDescriptors()) {
if (titleMatcher.fun(runContentDescriptor.getDisplayName())) {
result.add(runContentDescriptor);
}
@@ -343,21 +336,18 @@ public class ExecutionHelper {
}
}
- private static void descriptorToFront(final Project project, final RunContentDescriptor descriptor) {
+ private static void descriptorToFront(@NotNull final Project project, @NotNull final RunContentDescriptor descriptor) {
ApplicationManager.getApplication().invokeLater(new Runnable() {
@Override
public void run() {
- final ToolWindow toolWindow = ExecutionManager.getInstance(project).getContentManager().getToolWindowByDescriptor(descriptor);
-
+ ToolWindow toolWindow = ExecutionManager.getInstance(project).getContentManager().getToolWindowByDescriptor(descriptor);
if (toolWindow != null) {
toolWindow.show(null);
-
- final ContentManager contentManager = toolWindow.getContentManager();
-
- contentManager.setSelectedContent(descriptor.getAttachedContent());
+ //noinspection ConstantConditions
+ toolWindow.getContentManager().setSelectedContent(descriptor.getAttachedContent());
}
}
- });
+ }, project.getDisposed());
}
public static class ErrorViewPanel extends NewErrorTreeViewPanel {
@@ -384,8 +374,6 @@ public class ExecutionHelper {
@NotNull final ExecutionMode mode,
@NotNull final String presentableCmdline) {
final String title = mode.getTitle() != null ? mode.getTitle() : "Please wait...";
- assert title != null;
-
final Runnable process;
if (mode.cancelable()) {
process = createCancelableExecutionProcess(processHandler, mode.shouldCancelFun());
@@ -400,7 +388,7 @@ public class ExecutionHelper {
};
}
else {
- process = createTimelimitedExecutionProcess(processHandler, mode.getTimeout(), presentableCmdline);
+ process = createTimeLimitedExecutionProcess(processHandler, mode.getTimeout(), presentableCmdline);
}
}
if (mode.withModalProgress()) {
@@ -447,7 +435,7 @@ public class ExecutionHelper {
private final Runnable myCancelListener = new Runnable() {
@Override
public void run() {
- for (; ; ) {
+ while (true) {
if ((myProgressIndicator != null && (myProgressIndicator.isCanceled()
|| !myProgressIndicator.isRunning()))
|| (cancelableFun != null && cancelableFun.fun(null).booleanValue())
@@ -493,7 +481,7 @@ public class ExecutionHelper {
};
}
- private static Runnable createTimelimitedExecutionProcess(final ProcessHandler processHandler,
+ private static Runnable createTimeLimitedExecutionProcess(final ProcessHandler processHandler,
final int timeout,
@NotNull final String presentableCmdline) {
return new Runnable() {
diff --git a/platform/lang-impl/src/com/intellij/execution/ExecutionTargetManagerImpl.java b/platform/lang-impl/src/com/intellij/execution/ExecutionTargetManagerImpl.java
index d0170430613e..e4d7b9cff49e 100644
--- a/platform/lang-impl/src/com/intellij/execution/ExecutionTargetManagerImpl.java
+++ b/platform/lang-impl/src/com/intellij/execution/ExecutionTargetManagerImpl.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2012 JetBrains s.r.o.
+ * Copyright 2000-2014 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.
@@ -15,9 +15,11 @@
*/
package com.intellij.execution;
-import com.intellij.execution.impl.RunManagerImpl;
import com.intellij.openapi.application.ApplicationManager;
-import com.intellij.openapi.components.*;
+import com.intellij.openapi.components.PersistentStateComponent;
+import com.intellij.openapi.components.State;
+import com.intellij.openapi.components.Storage;
+import com.intellij.openapi.components.StoragePathMacros;
import com.intellij.openapi.extensions.Extensions;
import com.intellij.openapi.project.Project;
import com.intellij.util.containers.ContainerUtil;
@@ -29,25 +31,30 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
-
-@State(name = "ExecutionTargetManager", storages = {@Storage(file = StoragePathMacros.WORKSPACE_FILE, scheme = StorageScheme.DEFAULT)})
-public class ExecutionTargetManagerImpl extends ExecutionTargetManager implements ProjectComponent, PersistentStateComponent<Element> {
+@State(name = "ExecutionTargetManager", storages = {@Storage(file = StoragePathMacros.WORKSPACE_FILE)})
+public class ExecutionTargetManagerImpl extends ExecutionTargetManager implements PersistentStateComponent<Element> {
@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) {
+ public ExecutionTargetManagerImpl(@NotNull Project project, @NotNull RunManager runManager) {
myProject = project;
- }
- @Override
- public void projectOpened() {
- }
+ ((RunManagerEx)runManager).addRunManagerListener(new RunManagerAdapter() {
+ @Override
+ public void runConfigurationChanged(@NotNull RunnerAndConfigurationSettings settings) {
+ if (settings == RunManager.getInstance(myProject).getSelectedConfiguration()) {
+ updateActiveTarget(settings);
+ }
+ }
- @Override
- public void projectClosed() {
+ @Override
+ public void runConfigurationSelected() {
+ updateActiveTarget();
+ }
+ });
}
@Override
@@ -70,33 +77,6 @@ public class ExecutionTargetManagerImpl extends ExecutionTargetManager implement
}
}
- @Override
- public void initComponent() {
- RunManagerImpl.getInstanceImpl(myProject).addRunManagerListener(new RunManagerAdapter() {
- @Override
- public void runConfigurationChanged(@NotNull RunnerAndConfigurationSettings settings) {
- if (settings == RunManager.getInstance(myProject).getSelectedConfiguration()) {
- updateActiveTarget(settings);
- }
- }
-
- @Override
- public void runConfigurationSelected() {
- updateActiveTarget();
- }
- });
- }
-
- @Override
- public void disposeComponent() {
- }
-
- @NotNull
- @Override
- public String getComponentName() {
- return ExecutionTargetManager.class.getName();
- }
-
@NotNull
@Override
public ExecutionTarget getActiveTarget() {
@@ -128,7 +108,7 @@ public class ExecutionTargetManagerImpl extends ExecutionTargetManager implement
private void updateActiveTarget(@Nullable RunnerAndConfigurationSettings settings, @Nullable ExecutionTarget toSelect) {
List<ExecutionTarget> suitable = settings == null ? Collections.singletonList(DefaultExecutionTarget.INSTANCE)
: getTargetsFor(settings);
- ExecutionTarget toNotify = null;
+ ExecutionTarget toNotify;
synchronized (myActiveTargetLock) {
if (toSelect == null) toSelect = myActiveTarget;
diff --git a/platform/lang-impl/src/com/intellij/execution/ExecutorRegistryImpl.java b/platform/lang-impl/src/com/intellij/execution/ExecutorRegistryImpl.java
index bd9f5014fabb..44af49d36cdd 100644
--- a/platform/lang-impl/src/com/intellij/execution/ExecutorRegistryImpl.java
+++ b/platform/lang-impl/src/com/intellij/execution/ExecutorRegistryImpl.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2014 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.
@@ -13,7 +13,6 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
package com.intellij.execution;
import com.intellij.execution.actions.RunContextAction;
@@ -35,12 +34,8 @@ import org.jetbrains.annotations.Nullable;
import java.util.*;
-/**
- * @author spleaner
- */
public class ExecutorRegistryImpl extends ExecutorRegistry {
- private static final Logger LOG = Logger.getInstance("#com.intellij.execution.ExecutorRegistryImpl");
-
+ private static final Logger LOG = Logger.getInstance(ExecutorRegistryImpl.class);
@NonNls public static final String RUNNERS_GROUP = "RunnerActions";
@NonNls public static final String RUN_CONTEXT_GROUP = "RunContextGroup";
@@ -84,8 +79,7 @@ public class ExecutorRegistryImpl extends ExecutorRegistry {
action = anAction;
}
- final DefaultActionGroup group = (DefaultActionGroup) myActionManager.getAction(groupId);
- group.add(action);
+ ((DefaultActionGroup)myActionManager.getAction(groupId)).add(action);
}
synchronized void deinitExecutor(@NotNull final Executor executor) {
@@ -135,18 +129,18 @@ public class ExecutorRegistryImpl extends ExecutorRegistry {
final MessageBusConnection connect = project.getMessageBus().connect(project);
connect.subscribe(ExecutionManager.EXECUTION_TOPIC, new ExecutionAdapter(){
@Override
- public void processStartScheduled(String executorId, ExecutionEnvironment env) {
- myInProgress.add(createExecutionId(executorId, env, project));
+ public void processStartScheduled(String executorId, ExecutionEnvironment environment) {
+ myInProgress.add(createExecutionId(executorId, environment));
}
@Override
- public void processNotStarted(String executorId, @NotNull ExecutionEnvironment env) {
- myInProgress.remove(createExecutionId(executorId, env, project));
+ public void processNotStarted(String executorId, @NotNull ExecutionEnvironment environment) {
+ myInProgress.remove(createExecutionId(executorId, environment));
}
@Override
- public void processStarted(String executorId, @NotNull ExecutionEnvironment env, @NotNull ProcessHandler handler) {
- myInProgress.remove(createExecutionId(executorId, env, project));
+ public void processStarted(String executorId, @NotNull ExecutionEnvironment environment, @NotNull ProcessHandler handler) {
+ myInProgress.remove(createExecutionId(executorId, environment));
}
});
}
@@ -172,26 +166,29 @@ public class ExecutorRegistryImpl extends ExecutorRegistry {
}
}
- private static Trinity<Project, String, String> createExecutionId(String executorId, ExecutionEnvironment env, Project project) {
- return new Trinity<Project, String, String>(project, executorId, env.getRunnerId());
+ @NotNull
+ private static Trinity<Project, String, String> createExecutionId(String executorId, @NotNull ExecutionEnvironment environment) {
+ return Trinity.create(environment.getProject(), executorId, environment.getRunner().getRunnerId());
}
@Override
public boolean isStarting(Project project, final String executorId, final String runnerId) {
- return myInProgress.contains(new Trinity<Project, String, String>(project, executorId, runnerId));
+ return myInProgress.contains(Trinity.create(project, executorId, runnerId));
+ }
+
+ @Override
+ public boolean isStarting(@NotNull ExecutionEnvironment environment) {
+ return isStarting(environment.getProject(), environment.getExecutor().getId(), environment.getRunner().getRunnerId());
}
@Override
public synchronized void disposeComponent() {
- if (myExecutors.size() > 0) {
- List<Executor> executors = new ArrayList<Executor>(myExecutors);
- for (Executor executor : executors) {
+ if (!myExecutors.isEmpty()) {
+ for (Executor executor : new ArrayList<Executor>(myExecutors)) {
deinitExecutor(executor);
}
-
- myExecutors = null;
}
-
+ myExecutors = null;
myActionManager = null;
}
@@ -206,7 +203,7 @@ public class ExecutorRegistryImpl extends ExecutorRegistry {
@Override
public void update(final AnActionEvent e) {
final Presentation presentation = e.getPresentation();
- final Project project = CommonDataKeys.PROJECT.getData(e.getDataContext());
+ final Project project = e.getProject();
if (project == null || !project.isInitialized() || project.isDisposed() || DumbService.getInstance(project).isDumb()) {
presentation.setEnabled(false);
@@ -222,7 +219,7 @@ public class ExecutorRegistryImpl extends ExecutorRegistry {
ExecutionTarget target = ExecutionTargetManager.getActiveTarget(project);
enabled = ExecutionTargetManager.canRun(selectedConfiguration, target)
- && runner != null && !isStarting(project, myExecutor.getId(), runner.getRunnerId());
+ && runner != null && !isStarting(project, myExecutor.getId(), runner.getRunnerId());
if (enabled) {
presentation.setDescription(myExecutor.getDescription());
@@ -244,25 +241,17 @@ public class ExecutorRegistryImpl extends ExecutorRegistry {
@Override
public void actionPerformed(final AnActionEvent e) {
- final DataContext dataContext = e.getDataContext();
final Project project = e.getProject();
if (project == null || project.isDisposed()) {
return;
}
- final RunnerAndConfigurationSettings configuration = getConfiguration(project);
- if (configuration == null) {
- return;
- }
- ExecutionTarget target = ExecutionTargetManager.getActiveTarget(project);
- ExecutionEnvironmentBuilder builder = new ExecutionEnvironmentBuilder(project, myExecutor);
- ProgramRunner runner = ProgramRunnerUtil.getRunner(myExecutor.getId(), configuration);
- if (runner == null) {
+ RunnerAndConfigurationSettings configuration = getConfiguration(project);
+ ExecutionEnvironmentBuilder builder = configuration == null ? null : ExecutionEnvironmentBuilder.createOrNull(myExecutor, configuration);
+ if (builder == null) {
return;
}
-
- builder.setDataContext(dataContext).setTarget(target).setRunnerAndSettings(runner, configuration);
- ExecutionManager.getInstance(project).restartRunProfile(runner, builder.build(), null);
+ ExecutionManager.getInstance(project).restartRunProfile(builder.activeTarget().dataContext(e.getDataContext()).build());
}
}
}
diff --git a/platform/lang-impl/src/com/intellij/execution/ProgramRunnerUtil.java b/platform/lang-impl/src/com/intellij/execution/ProgramRunnerUtil.java
index b27a939dd57c..5ad5f73b954a 100644
--- a/platform/lang-impl/src/com/intellij/execution/ProgramRunnerUtil.java
+++ b/platform/lang-impl/src/com/intellij/execution/ProgramRunnerUtil.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2013 JetBrains s.r.o.
+ * Copyright 2000-2014 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.
@@ -13,23 +13,20 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
package com.intellij.execution;
import com.intellij.execution.configurations.ConfigurationFactory;
import com.intellij.execution.configurations.ConfigurationType;
import com.intellij.execution.configurations.RunConfiguration;
-import com.intellij.execution.configurations.RunProfile;
import com.intellij.execution.impl.RunDialog;
import com.intellij.execution.impl.RunManagerImpl;
+import com.intellij.execution.runners.ExecutionEnvironment;
import com.intellij.execution.runners.ExecutionEnvironmentBuilder;
import com.intellij.execution.runners.ExecutionUtil;
import com.intellij.execution.runners.ProgramRunner;
-import com.intellij.execution.ui.RunContentDescriptor;
import com.intellij.icons.AllIcons;
import com.intellij.internal.statistic.UsageTrigger;
import com.intellij.internal.statistic.beans.ConvertUsagesUtil;
-import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.Messages;
@@ -41,11 +38,8 @@ import org.jetbrains.annotations.Nullable;
import javax.swing.*;
-/**
- * @author spleaner
- */
public class ProgramRunnerUtil {
- private static final Logger LOG = Logger.getInstance("#com.intellij.execution.ProgramRunnerUtil");
+ private static final Logger LOG = Logger.getInstance(ProgramRunnerUtil.class);
private ProgramRunnerUtil() {
}
@@ -55,102 +49,82 @@ public class ProgramRunnerUtil {
return configuration == null ? null : RunnerRegistry.getInstance().getRunner(executorId, configuration.getConfiguration());
}
- public static void executeConfiguration(@NotNull final Project project,
- @Nullable final DataContext context,
- @NotNull final RunnerAndConfigurationSettings configuration,
- @NotNull final Executor executor,
- @NotNull final ExecutionTarget target,
- @Nullable RunContentDescriptor contentToReuse,
- final boolean showSettings) {
- ProgramRunner runner = getRunner(executor.getId(), configuration);
- if (runner == null) {
- LOG.error("Runner MUST not be null! Cannot find runner for " +
- executor.getId() +
- " and " +
- configuration.getConfiguration().getFactory().getName());
- return;
- }
- executeConfiguration(project, context, configuration, executor, target, contentToReuse, showSettings, runner, null, true);
- }
-
- public static void executeConfiguration(Project project,
- @Nullable DataContext context,
- @Nullable RunnerAndConfigurationSettings configuration,
- Executor executor,
- ExecutionTarget target,
- RunContentDescriptor contentToReuse,
- boolean showSettings,
- @NotNull ProgramRunner runner,
- @Nullable RunProfile runProfile,
- boolean assignNewId) {
- if (ExecutorRegistry.getInstance().isStarting(project, executor.getId(), runner.getRunnerId())) {
- return;
- }
-
- if (configuration != null && !ExecutionTargetManager.canRun(configuration, target)) {
- ExecutionUtil.handleExecutionError(
- project, executor.getToolWindowId(), configuration.getConfiguration(),
- new ExecutionException(StringUtil.escapeXml("Cannot run '" + configuration.getName() + "' on '" + target.getDisplayName() + "'")));
+ public static void executeConfiguration(@NotNull ExecutionEnvironment environment, boolean showSettings, boolean assignNewId) {
+ if (ExecutorRegistry.getInstance().isStarting(environment)) {
return;
}
- if (configuration != null &&
- (!RunManagerImpl.canRunConfiguration(configuration, executor) || (showSettings && configuration.isEditBeforeRun()))) {
- if (!RunDialog.editConfiguration(project, configuration, "Edit configuration", executor)) {
+ RunnerAndConfigurationSettings runnerAndConfigurationSettings = environment.getRunnerAndConfigurationSettings();
+ if (runnerAndConfigurationSettings != null) {
+ if (!ExecutionTargetManager.canRun(environment)) {
+ ExecutionUtil.handleExecutionError(environment, new ExecutionException(
+ StringUtil.escapeXml("Cannot run '" + environment.getRunProfile().getName() + "' on '" + environment.getExecutionTarget().getDisplayName() + "'")));
return;
}
- while (!RunManagerImpl.canRunConfiguration(configuration, executor)) {
- if (Messages.YES == Messages
- .showYesNoDialog(project, "Configuration is still incorrect. Do you want to edit it again?", "Change Configuration Settings",
- "Edit", "Continue Anyway", Messages.getErrorIcon())) {
- if (!RunDialog.editConfiguration(project, configuration, "Edit configuration", executor)) {
- return;
- }
+ if (!RunManagerImpl.canRunConfiguration(environment) || (showSettings && runnerAndConfigurationSettings.isEditBeforeRun())) {
+ if (!RunDialog.editConfiguration(environment, "Edit configuration")) {
+ return;
}
- else {
- break;
+
+ while (!RunManagerImpl.canRunConfiguration(environment)) {
+ if (Messages.YES == Messages
+ .showYesNoDialog(environment.getProject(), "Configuration is still incorrect. Do you want to edit it again?", "Change Configuration Settings",
+ "Edit", "Continue Anyway", Messages.getErrorIcon())) {
+ if (!RunDialog.editConfiguration(environment, "Edit configuration")) {
+ return;
+ }
+ }
+ else {
+ break;
+ }
}
}
- }
- final ConfigurationType configurationType = configuration != null ? configuration.getType() : null;
- if (configurationType != null) {
- UsageTrigger.trigger("execute." + ConvertUsagesUtil.ensureProperKey(configurationType.getId()) + "." + executor.getId());
+ ConfigurationType configurationType = runnerAndConfigurationSettings.getType();
+ if (configurationType != null) {
+ UsageTrigger.trigger("execute." + ConvertUsagesUtil.ensureProperKey(configurationType.getId()) + "." + environment.getExecutor().getId());
+ }
}
try {
- ExecutionEnvironmentBuilder builder =
- new ExecutionEnvironmentBuilder(project, executor);
- if (configuration != null) {
- builder.setRunnerAndSettings(runner, configuration);
- }
- else {
- builder.setRunnerId(runner.getRunnerId());
- }
- builder.setTarget(target).setContentToReuse(contentToReuse).setDataContext(context);
if (assignNewId) {
- builder.assignNewId();
- }
- if (runProfile != null) {
- builder.setRunProfile(runProfile);
+ environment.assignNewExecutionId();
}
- runner.execute(builder.build());
+ environment.getRunner().execute(environment);
}
catch (ExecutionException e) {
- String name = configuration != null ? configuration.getName() : null;
- if (name == null && runProfile != null) name = runProfile.getName();
- if (name == null && contentToReuse != null) name = contentToReuse.getDisplayName();
- if (name == null) name = "<Unknown>";
- ExecutionUtil.handleExecutionError(project, executor.getToolWindowId(), name, e);
+ String name = runnerAndConfigurationSettings != null ? runnerAndConfigurationSettings.getName() : null;
+ if (name == null) {
+ name = environment.getRunProfile().getName();
+ }
+ if (name == null && environment.getContentToReuse() != null) {
+ name = environment.getContentToReuse().getDisplayName();
+ }
+ if (name == null) {
+ name = "<Unknown>";
+ }
+ ExecutionUtil.handleExecutionError(environment.getProject(), environment.getExecutor().getToolWindowId(), name, e);
}
}
-
public static void executeConfiguration(@NotNull Project project,
@NotNull RunnerAndConfigurationSettings configuration,
@NotNull Executor executor) {
- executeConfiguration(project, null, configuration, executor, ExecutionTargetManager.getActiveTarget(project), null, true);
+ ExecutionEnvironmentBuilder builder;
+ try {
+ builder = ExecutionEnvironmentBuilder.create(executor, configuration);
+ }
+ catch (ExecutionException e) {
+ LOG.error(e);
+ return;
+ }
+
+ executeConfiguration(builder
+ .contentToReuse(null)
+ .dataContext(null)
+ .activeTarget()
+ .build(), true, true);
}
public static Icon getConfigurationIcon(final RunnerAndConfigurationSettings settings,
diff --git a/platform/lang-impl/src/com/intellij/execution/actions/ChooseRunConfigurationPopup.java b/platform/lang-impl/src/com/intellij/execution/actions/ChooseRunConfigurationPopup.java
index 1a0235ac9d46..a4764dae0036 100644
--- a/platform/lang-impl/src/com/intellij/execution/actions/ChooseRunConfigurationPopup.java
+++ b/platform/lang-impl/src/com/intellij/execution/actions/ChooseRunConfigurationPopup.java
@@ -22,8 +22,8 @@ import com.intellij.execution.configurations.UnknownConfigurationType;
import com.intellij.execution.impl.EditConfigurationsDialog;
import com.intellij.execution.impl.RunDialog;
import com.intellij.execution.impl.RunnerAndConfigurationSettingsImpl;
+import com.intellij.execution.runners.ExecutionUtil;
import com.intellij.execution.runners.ProgramRunner;
-import com.intellij.execution.ui.RunContentDescriptor;
import com.intellij.icons.AllIcons;
import com.intellij.ide.DataManager;
import com.intellij.ide.util.PropertiesComponent;
@@ -193,10 +193,7 @@ public class ChooseRunConfigurationPopup implements ExecutorProvider {
}
private void updatePresentation() {
- final Executor executor = getExecutor();
- if (executor != null) {
- myPopup.setCaption(executor.getActionName());
- }
+ myPopup.setCaption(getExecutor().getActionName());
}
static void execute(final ItemWrapper itemWrapper, final Executor executor) {
@@ -218,12 +215,10 @@ public class ChooseRunConfigurationPopup implements ExecutorProvider {
void editConfiguration(@NotNull final Project project, @NotNull final RunnerAndConfigurationSettings configuration) {
final Executor executor = getExecutor();
- assert executor != null;
-
PropertiesComponent.getInstance().setValue("run.configuration.edit.ad", Boolean.toString(true));
if (RunDialog.editConfiguration(project, configuration, "Edit configuration settings", executor)) {
RunManagerEx.getInstanceEx(project).setSelectedConfiguration(configuration);
- doRunConfiguration(configuration, executor, project);
+ ExecutionUtil.runConfiguration(configuration, executor);
}
}
@@ -379,7 +374,7 @@ public class ChooseRunConfigurationPopup implements ExecutorProvider {
public void perform(@NotNull Project project, @NotNull Executor executor, @NotNull DataContext context) {
RunnerAndConfigurationSettings config = getValue();
RunManagerEx.getInstanceEx(project).setSelectedConfiguration(config);
- doRunConfiguration(config, executor, project);
+ ExecutionUtil.runConfiguration(config, executor);
}
@Override
@@ -404,7 +399,7 @@ public class ChooseRunConfigurationPopup implements ExecutorProvider {
@Override
public boolean available(Executor executor) {
- return null != ProgramRunnerUtil.getRunner(executor.getId(), getValue());
+ return ProgramRunnerUtil.getRunner(executor.getId(), getValue()) != null;
}
@Override
@@ -462,7 +457,7 @@ public class ChooseRunConfigurationPopup implements ExecutorProvider {
final List<ItemWrapper> configurations = getValues();
final int index = configurations.indexOf(value);
if (index > 0 && index <= configurations.size() - 1) {
- final ItemWrapper aboveConfiguration = index == 0 ? null : configurations.get(index - 1);
+ final ItemWrapper aboveConfiguration = configurations.get(index - 1);
if (aboveConfiguration != null && aboveConfiguration.isDynamic() != value.isDynamic()) {
return new ListSeparator();
@@ -508,18 +503,15 @@ public class ChooseRunConfigurationPopup implements ExecutorProvider {
}
}
- final Executor executor = myAction.getExecutor();
- assert executor != null;
-
- if (finalChoice && wrapper.available(executor)) {
+ if (finalChoice && wrapper.available(myAction.getExecutor())) {
return doFinalStep(new Runnable() {
@Override
public void run() {
- if (executor == myAction.myAlternativeExecutor) {
+ if (myAction.getExecutor() == myAction.myAlternativeExecutor) {
PropertiesComponent.getInstance().setValue(myAction.myAddKey, Boolean.toString(true));
}
- wrapper.perform(myProject, executor, DataManager.getInstance().getDataContext());
+ wrapper.perform(myProject, myAction.getExecutor(), DataManager.getInstance().getDataContext());
}
});
}
@@ -545,14 +537,6 @@ public class ChooseRunConfigurationPopup implements ExecutorProvider {
}
}
- private static void doRunConfiguration(RunnerAndConfigurationSettings configuration, Executor executor, Project project) {
- ExecutionManager.getInstance(project).restartRunProfile(project,
- executor,
- ExecutionTargetManager.getActiveTarget(project),
- configuration,
- (RunContentDescriptor)null);
- }
-
private static final class ConfigurationActionsStep extends BaseListPopupStep<ActionWrapper> {
@NotNull private final RunnerAndConfigurationSettings mySettings;
@@ -600,11 +584,13 @@ public class ChooseRunConfigurationPopup implements ExecutorProvider {
@Override
public void perform() {
final RunManagerEx manager = RunManagerEx.getInstanceEx(project);
- if (dynamic) manager.setTemporaryConfiguration(settings);
+ if (dynamic) {
+ manager.setTemporaryConfiguration(settings);
+ }
manager.setSelectedConfiguration(settings);
ExecutionTargetManager.setActiveTarget(project, eachTarget);
- doRunConfiguration(settings, action.getExecutor(), project);
+ ExecutionUtil.runConfiguration(settings, action.getExecutor());
}
});
}
@@ -617,9 +603,11 @@ public class ChooseRunConfigurationPopup implements ExecutorProvider {
@Override
public void perform() {
final RunManagerEx manager = RunManagerEx.getInstanceEx(project);
- if (dynamic) manager.setTemporaryConfiguration(settings);
+ if (dynamic) {
+ manager.setTemporaryConfiguration(settings);
+ }
manager.setSelectedConfiguration(settings);
- doRunConfiguration(settings, executor, project);
+ ExecutionUtil.runConfiguration(settings, executor);
}
});
isFirst = false;
@@ -857,7 +845,7 @@ public class ChooseRunConfigurationPopup implements ExecutorProvider {
RunnerAndConfigurationSettings selectedConfiguration = RunManagerEx.getInstanceEx(project).getSelectedConfiguration();
if (myConfigurations.contains(selectedConfiguration)) {
RunManagerEx.getInstanceEx(project).setSelectedConfiguration(selectedConfiguration);
- doRunConfiguration(selectedConfiguration, myExecutorProvider.getExecutor(), project);
+ ExecutionUtil.runConfiguration(selectedConfiguration, myExecutorProvider.getExecutor());
}
}
@@ -906,8 +894,7 @@ public class ChooseRunConfigurationPopup implements ExecutorProvider {
public void run() {
RunnerAndConfigurationSettings settings = selectedValue.getSettings();
RunManagerEx.getInstanceEx(myProject).setSelectedConfiguration(settings);
- doRunConfiguration(settings, myExecutorProvider.getExecutor(), myProject);
-
+ ExecutionUtil.runConfiguration(settings, myExecutorProvider.getExecutor());
}
});
} else {
@@ -961,7 +948,7 @@ public class ChooseRunConfigurationPopup implements ExecutorProvider {
@Override
public void perform(@NotNull final Project project, @NotNull final Executor executor, @NotNull DataContext context) {
ExecutionTargetManager.setActiveTarget(project, eachTarget);
- doRunConfiguration(selectedConfiguration, executor, project);
+ ExecutionUtil.runConfiguration(selectedConfiguration, executor);
}
@Override
@@ -1035,7 +1022,7 @@ public class ChooseRunConfigurationPopup implements ExecutorProvider {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
- doRunConfiguration(RunManager.getInstance(project).getSelectedConfiguration(), executor, project);
+ ExecutionUtil.runConfiguration(RunManager.getInstance(project).getSelectedConfiguration(), executor);
}
});
}
@@ -1116,7 +1103,7 @@ public class ChooseRunConfigurationPopup implements ExecutorProvider {
public void perform(@NotNull Project project, @NotNull Executor executor, @NotNull DataContext context) {
manager.setTemporaryConfiguration(configuration);
RunManagerEx.getInstanceEx(project).setSelectedConfiguration(configuration);
- doRunConfiguration(configuration, executor, project);
+ ExecutionUtil.runConfiguration(configuration, executor);
}
@Override
diff --git a/platform/lang-impl/src/com/intellij/execution/actions/RunContextAction.java b/platform/lang-impl/src/com/intellij/execution/actions/RunContextAction.java
index f5741242089d..0a467c7cec23 100644
--- a/platform/lang-impl/src/com/intellij/execution/actions/RunContextAction.java
+++ b/platform/lang-impl/src/com/intellij/execution/actions/RunContextAction.java
@@ -18,10 +18,9 @@ package com.intellij.execution.actions;
import com.intellij.execution.*;
import com.intellij.execution.configurations.RunConfiguration;
+import com.intellij.execution.runners.ExecutionUtil;
import com.intellij.execution.runners.ProgramRunner;
-import com.intellij.execution.ui.RunContentDescriptor;
import com.intellij.openapi.actionSystem.Presentation;
-import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Pair;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -47,12 +46,8 @@ public class RunContextAction extends BaseRunConfigurationAction {
runManager.setTemporaryConfiguration(configuration);
}
runManager.setSelectedConfiguration(configuration);
- Project project = context.getProject();
- ExecutionManager.getInstance(project).restartRunProfile(project,
- myExecutor,
- ExecutionTargetManager.getActiveTarget(project),
- configuration,
- (RunContentDescriptor)null);
+
+ ExecutionUtil.runConfiguration(configuration, myExecutor);
}
@Override
@@ -81,11 +76,10 @@ public class RunContextAction extends BaseRunConfigurationAction {
configuration = context.getConfiguration();
}
- if (configuration == null) return Pair.create(false, false);
-
- final ProgramRunner runner = getRunner(configuration.getConfiguration());
- if (runner == null) return Pair.create(false, false);
-
+ ProgramRunner runner = configuration == null ? null : getRunner(configuration.getConfiguration());
+ if (runner == null) {
+ return Pair.create(false, false);
+ }
return Pair.create(!ExecutorRegistry.getInstance().isStarting(context.getProject(), myExecutor.getId(), runner.getRunnerId()), true);
}
}
diff --git a/platform/lang-impl/src/com/intellij/execution/actions/StopAction.java b/platform/lang-impl/src/com/intellij/execution/actions/StopAction.java
index 618a4b1c65c5..75466528ae2f 100644
--- a/platform/lang-impl/src/com/intellij/execution/actions/StopAction.java
+++ b/platform/lang-impl/src/com/intellij/execution/actions/StopAction.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2014 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.
@@ -13,14 +13,14 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
package com.intellij.execution.actions;
+import com.intellij.execution.ExecutionBundle;
import com.intellij.execution.ExecutionManager;
import com.intellij.execution.KillableProcess;
+import com.intellij.execution.configurations.RunProfile;
import com.intellij.execution.process.ProcessHandler;
import com.intellij.execution.ui.RunContentDescriptor;
-import com.intellij.execution.ui.RunContentManager;
import com.intellij.icons.AllIcons;
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.progress.ProgressIndicator;
@@ -29,7 +29,7 @@ import com.intellij.openapi.project.DumbAwareAction;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.popup.JBPopup;
import com.intellij.openapi.ui.popup.JBPopupFactory;
-import com.intellij.openapi.ui.popup.ListItemDescriptor;
+import com.intellij.openapi.ui.popup.ListItemDescriptorAdapter;
import com.intellij.openapi.ui.popup.PopupChooserBuilder;
import com.intellij.openapi.util.Condition;
import com.intellij.openapi.util.Pair;
@@ -49,19 +49,20 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
-public class StopAction extends DumbAwareAction implements AnAction.TransparentUpdate {
+class StopAction extends DumbAwareAction implements AnAction.TransparentUpdate {
@Override
public void update(final AnActionEvent e) {
boolean enable = false;
Icon icon = getTemplatePresentation().getIcon();
String description = getTemplatePresentation().getDescription();
- final Presentation presentation = e.getPresentation();
-
+ Presentation presentation = e.getPresentation();
if (ActionPlaces.MAIN_MENU.equals(e.getPlace())) {
enable = !getCancellableProcesses(e.getProject()).isEmpty() || !getActiveDescriptors(e.getDataContext()).isEmpty();
+ presentation.setText(getTemplatePresentation().getText());
}
else {
- final ProcessHandler processHandler = getHandler(e.getDataContext());
+ RunContentDescriptor contentDescriptor = e.getData(LangDataKeys.RUN_CONTENT_DESCRIPTOR);
+ ProcessHandler processHandler = contentDescriptor == null ? null : contentDescriptor.getProcessHandler();
if (processHandler != null && !processHandler.isProcessTerminated()) {
if (!processHandler.isProcessTerminating()) {
enable = true;
@@ -72,6 +73,14 @@ public class StopAction extends DumbAwareAction implements AnAction.TransparentU
description = "Kill process";
}
}
+
+ RunProfile runProfile = e.getData(LangDataKeys.RUN_PROFILE);
+ if (runProfile == null && contentDescriptor == null) {
+ presentation.setText(getTemplatePresentation().getText());
+ }
+ else {
+ presentation.setText(ExecutionBundle.message("stop.configuration.action.name", runProfile == null ? contentDescriptor.getDisplayName() : runProfile.getName()));
+ }
}
presentation.setEnabled(enable);
@@ -84,7 +93,8 @@ public class StopAction extends DumbAwareAction implements AnAction.TransparentU
final DataContext dataContext = e.getDataContext();
ProcessHandler activeProcessHandler = getHandler(dataContext);
- List<Pair<TaskInfo, ProgressIndicator>> backgroundTasks = getCancellableProcesses(e.getProject());
+ Project project = e.getProject();
+ List<Pair<TaskInfo, ProgressIndicator>> backgroundTasks = getCancellableProcesses(project);
if (ActionPlaces.MAIN_MENU.equals(e.getPlace())) {
if (activeProcessHandler != null && !activeProcessHandler.isProcessTerminating() && !activeProcessHandler.isProcessTerminated()
&& backgroundTasks.isEmpty()) {
@@ -94,12 +104,14 @@ public class StopAction extends DumbAwareAction implements AnAction.TransparentU
Pair<List<HandlerItem>, HandlerItem>
handlerItems = getItemsList(backgroundTasks, getActiveDescriptors(dataContext), activeProcessHandler);
- if (handlerItems.first.isEmpty()) return;
+ if (handlerItems == null || handlerItems.first.isEmpty()) {
+ return;
+ }
final JBList list = new JBList(handlerItems.first);
if (handlerItems.second != null) list.setSelectedValue(handlerItems.second, true);
- list.setCellRenderer(new GroupedItemsListRenderer(new ListItemDescriptor() {
+ list.setCellRenderer(new GroupedItemsListRenderer(new ListItemDescriptorAdapter() {
@Nullable
@Override
public String getTextFor(Object value) {
@@ -108,12 +120,6 @@ public class StopAction extends DumbAwareAction implements AnAction.TransparentU
@Nullable
@Override
- public String getTooltipFor(Object value) {
- return null;
- }
-
- @Nullable
- @Override
public Icon getIconFor(Object value) {
return value instanceof HandlerItem ? ((HandlerItem)value).icon : null;
}
@@ -122,12 +128,6 @@ public class StopAction extends DumbAwareAction implements AnAction.TransparentU
public boolean hasSeparatorAboveOf(Object value) {
return value instanceof HandlerItem && ((HandlerItem)value).hasSeparator;
}
-
- @Nullable
- @Override
- public String getCaptionAboveOf(Object value) {
- return null;
- }
}));
final PopupChooserBuilder builder = JBPopupFactory.getInstance().createListPopupBuilder(list);
@@ -148,7 +148,8 @@ public class StopAction extends DumbAwareAction implements AnAction.TransparentU
}
}).setRequestFocus(true).createPopup();
- popup.showCenteredInCurrentWindow(e.getProject());
+ assert project != null;
+ popup.showCenteredInCurrentWindow(project);
}
else {
if (activeProcessHandler != null) {
@@ -171,12 +172,15 @@ public class StopAction extends DumbAwareAction implements AnAction.TransparentU
});
}
+ @Nullable
private static Pair<List<HandlerItem>, HandlerItem> getItemsList(List<Pair<TaskInfo, ProgressIndicator>> tasks,
List<RunContentDescriptor> descriptors,
ProcessHandler activeProcessHandler) {
- if (tasks.isEmpty() && descriptors.isEmpty()) return Pair.create(Collections.<HandlerItem>emptyList(), null);
+ if (tasks.isEmpty() && descriptors.isEmpty()) {
+ return null;
+ }
- ArrayList<HandlerItem> items = new ArrayList<HandlerItem>(tasks.size() + descriptors.size());
+ List<HandlerItem> items = new ArrayList<HandlerItem>(tasks.size() + descriptors.size());
HandlerItem selected = null;
for (RunContentDescriptor descriptor : descriptors) {
final ProcessHandler handler = descriptor.getProcessHandler();
@@ -188,7 +192,9 @@ public class StopAction extends DumbAwareAction implements AnAction.TransparentU
}
};
items.add(item);
- if (handler == activeProcessHandler) selected = item;
+ if (handler == activeProcessHandler) {
+ selected = item;
+ }
}
}
@@ -202,7 +208,7 @@ public class StopAction extends DumbAwareAction implements AnAction.TransparentU
});
hasSeparator = false;
}
- return Pair.<List<HandlerItem>, HandlerItem>create(items, selected);
+ return Pair.create(items, selected);
}
private static void stopProcess(ProcessHandler processHandler) {
@@ -220,21 +226,19 @@ public class StopAction extends DumbAwareAction implements AnAction.TransparentU
}
@Nullable
- static ProcessHandler getHandler(final DataContext dataContext) {
- final RunContentDescriptor contentDescriptor = RunContentManager.RUN_CONTENT_DESCRIPTOR.getData(dataContext);
- final ProcessHandler processHandler;
+ static ProcessHandler getHandler(@NotNull DataContext dataContext) {
+ final RunContentDescriptor contentDescriptor = LangDataKeys.RUN_CONTENT_DESCRIPTOR.getData(dataContext);
if (contentDescriptor != null) {
// toolwindow case
- processHandler = contentDescriptor.getProcessHandler();
+ return contentDescriptor.getProcessHandler();
}
else {
// main menu toolbar
final Project project = CommonDataKeys.PROJECT.getData(dataContext);
final RunContentDescriptor selectedContent =
project == null ? null : ExecutionManager.getInstance(project).getContentManager().getSelectedContent();
- processHandler = selectedContent == null ? null : selectedContent.getProcessHandler();
+ return selectedContent == null ? null : selectedContent.getProcessHandler();
}
- return processHandler;
}
@NotNull
diff --git a/platform/lang-impl/src/com/intellij/execution/console/LanguageConsoleImpl.java b/platform/lang-impl/src/com/intellij/execution/console/LanguageConsoleImpl.java
index 1a9afd1e25e5..d7f40f35a219 100644
--- a/platform/lang-impl/src/com/intellij/execution/console/LanguageConsoleImpl.java
+++ b/platform/lang-impl/src/com/intellij/execution/console/LanguageConsoleImpl.java
@@ -616,7 +616,7 @@ public class LanguageConsoleImpl implements Disposable, TypeSafeDataProvider {
sink.put(OpenFileDescriptor.NAVIGATE_IN_EDITOR, myConsoleEditor);
}
else if (getProject().isInitialized()) {
- sink.put(key, FileEditorManagerEx.getInstanceEx(getProject()).getData(key.getName(), myConsoleEditor, myVirtualFile));
+ sink.put(key, FileEditorManagerEx.getInstanceEx(getProject()).getData(key.getName(), myConsoleEditor, myConsoleEditor.getCaretModel().getCurrentCaret()));
}
}
diff --git a/platform/lang-impl/src/com/intellij/execution/impl/ConfigurationSettingsEditor.java b/platform/lang-impl/src/com/intellij/execution/impl/ConfigurationSettingsEditor.java
index bdae21f781ea..7bae2105014a 100644
--- a/platform/lang-impl/src/com/intellij/execution/impl/ConfigurationSettingsEditor.java
+++ b/platform/lang-impl/src/com/intellij/execution/impl/ConfigurationSettingsEditor.java
@@ -75,16 +75,14 @@ class ConfigurationSettingsEditor extends CompositeSettingsEditor<RunnerAndConfi
myRunnersComponent = new RunnersEditorComponent();
- ProgramRunner[] runners = RunnerRegistry.getInstance().getRegisteredRunners();
final Executor[] executors = ExecutorRegistry.getInstance().getRegisteredExecutors();
for (final Executor executor : executors) {
- for (ProgramRunner runner : runners) {
- if (runner.canRun(executor.getId(), myConfiguration)) {
- JComponent perRunnerSettings = createCompositePerRunnerSettings(executor, runner);
- if (perRunnerSettings != null) {
- myRunnersComponent.addExecutorComponent(executor, perRunnerSettings);
- }
+ ProgramRunner runner = RunnerRegistry.getInstance().getRunner(executor.getId(), myConfiguration);
+ if (runner != null) {
+ JComponent perRunnerSettings = createCompositePerRunnerSettings(executor, runner);
+ if (perRunnerSettings != null) {
+ myRunnersComponent.addExecutorComponent(executor, perRunnerSettings);
}
}
}
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 c017284f8e11..29808af0845d 100644
--- a/platform/lang-impl/src/com/intellij/execution/impl/ExecutionManagerImpl.java
+++ b/platform/lang-impl/src/com/intellij/execution/impl/ExecutionManagerImpl.java
@@ -13,13 +13,14 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
package com.intellij.execution.impl;
import com.intellij.CommonBundle;
import com.intellij.execution.*;
import com.intellij.execution.configuration.CompatibilityAwareRunProfile;
-import com.intellij.execution.configurations.*;
+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;
@@ -34,12 +35,12 @@ import com.intellij.openapi.Disposable;
import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.actionSystem.impl.SimpleDataContext;
import com.intellij.openapi.application.ApplicationManager;
-import com.intellij.openapi.components.ProjectComponent;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.DumbService;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.DialogWrapper;
import com.intellij.openapi.ui.Messages;
+import com.intellij.openapi.util.Condition;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.Trinity;
@@ -47,21 +48,20 @@ import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.VirtualFileManager;
import com.intellij.ui.docking.DockManager;
import com.intellij.util.Alarm;
+import com.intellij.util.SmartList;
import com.intellij.util.containers.ContainerUtil;
-import com.intellij.util.containers.Predicate;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
-import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
-/**
- * @author dyoma
- */
-public class ExecutionManagerImpl extends ExecutionManager implements ProjectComponent {
+public class ExecutionManagerImpl extends ExecutionManager implements Disposable {
public static final Key<Object> EXECUTION_SESSION_ID_KEY = Key.create("EXECUTION_SESSION_ID_KEY");
- private static final Logger LOG = Logger.getInstance("com.intellij.execution.impl.ExecutionManagerImpl");
+
+ private static final Logger LOG = Logger.getInstance(ExecutionManagerImpl.class);
+ private static final ProcessHandler[] EMPTY_PROCESS_HANDLERS = new ProcessHandler[0];
private final Project myProject;
@@ -70,28 +70,12 @@ public class ExecutionManagerImpl extends ExecutionManager implements ProjectCom
private final List<Trinity<RunContentDescriptor, RunnerAndConfigurationSettings, Executor>> myRunningConfigurations =
ContainerUtil.createLockFreeCopyOnWriteList();
- /**
- * reflection
- */
- ExecutionManagerImpl(final Project project) {
+ ExecutionManagerImpl(@NotNull Project project) {
myProject = project;
}
@Override
- public void projectOpened() {
- ((RunContentManagerImpl)getContentManager()).init();
- }
-
- @Override
- public void projectClosed() {
- }
-
- @Override
- public void initComponent() {
- }
-
- @Override
- public void disposeComponent() {
+ public void dispose() {
for (Trinity<RunContentDescriptor, RunnerAndConfigurationSettings, Executor> trinity : myRunningConfigurations) {
Disposer.dispose(trinity.first);
}
@@ -108,112 +92,118 @@ public class ExecutionManagerImpl extends ExecutionManager implements ProjectCom
return myContentManager;
}
+ @NotNull
@Override
public ProcessHandler[] getRunningProcesses() {
- final List<ProcessHandler> handlers = new ArrayList<ProcessHandler>();
+ if (myContentManager == null) return EMPTY_PROCESS_HANDLERS;
+ List<ProcessHandler> handlers = null;
for (RunContentDescriptor descriptor : getContentManager().getAllDescriptors()) {
- final ProcessHandler processHandler = descriptor.getProcessHandler();
+ ProcessHandler processHandler = descriptor.getProcessHandler();
if (processHandler != null) {
+ if (handlers == null) {
+ handlers = new SmartList<ProcessHandler>();
+ }
handlers.add(processHandler);
}
}
- return handlers.toArray(new ProcessHandler[handlers.size()]);
+ return handlers == null ? EMPTY_PROCESS_HANDLERS : handlers.toArray(new ProcessHandler[handlers.size()]);
}
@Override
public void compileAndRun(@NotNull final Runnable startRunnable,
- @NotNull final ExecutionEnvironment env,
+ @NotNull final ExecutionEnvironment environment,
@Nullable final RunProfileState state,
@Nullable final Runnable onCancelRunnable) {
- long id = env.getExecutionId();
+ long id = environment.getExecutionId();
if (id == 0) {
- id = env.assignNewExecutionId();
+ id = environment.assignNewExecutionId();
}
- RunProfile profile = env.getRunProfile();
-
- if (profile instanceof RunConfiguration) {
- final RunConfiguration runConfiguration = (RunConfiguration)profile;
- final RunManagerImpl runManager = RunManagerImpl.getInstanceImpl(myProject);
- final List<BeforeRunTask> activeTasks = new ArrayList<BeforeRunTask>();
- activeTasks.addAll(runManager.getBeforeRunTasks(runConfiguration));
+ RunProfile profile = environment.getRunProfile();
+ if (!(profile instanceof RunConfiguration)) {
+ startRunnable.run();
+ return;
+ }
- DataContext context = env.getDataContext();
+ final RunConfiguration runConfiguration = (RunConfiguration)profile;
+ final List<BeforeRunTask> beforeRunTasks = RunManagerEx.getInstanceEx(myProject).getBeforeRunTasks(runConfiguration);
+ if (beforeRunTasks.isEmpty()) {
+ startRunnable.run();
+ }
+ else {
+ DataContext context = environment.getDataContext();
final DataContext projectContext = context != null ? context : SimpleDataContext.getProjectContext(myProject);
-
- if (!activeTasks.isEmpty()) {
- final long finalId = id;
- final Long executionSessionId = new Long(id);
- ApplicationManager.getApplication().executeOnPooledThread(new Runnable() {
- /** @noinspection SSBasedInspection*/
- @Override
- public void run() {
- for (BeforeRunTask task : activeTasks) {
- if (myProject.isDisposed()) {
- return;
- }
- BeforeRunTaskProvider<BeforeRunTask> provider = BeforeRunTaskProvider.getProvider(myProject, task.getProviderId());
- if (provider == null) {
- LOG.warn("Cannot find BeforeRunTaskProvider for id='" + task.getProviderId() + "'");
- continue;
- }
- ExecutionEnvironment taskEnvironment = new ExecutionEnvironmentBuilder(env).setContentToReuse(null).build();
- taskEnvironment.setExecutionId(finalId);
- EXECUTION_SESSION_ID_KEY.set(taskEnvironment, executionSessionId);
- if (!provider.executeTask(projectContext, runConfiguration, taskEnvironment, task)) {
- if (onCancelRunnable != null) {
- SwingUtilities.invokeLater(onCancelRunnable);
- }
- return;
- }
+ final long finalId = id;
+ final Long executionSessionId = new Long(id);
+ ApplicationManager.getApplication().executeOnPooledThread(new Runnable() {
+ /** @noinspection SSBasedInspection*/
+ @Override
+ public void run() {
+ for (BeforeRunTask task : beforeRunTasks) {
+ if (myProject.isDisposed()) {
+ return;
}
- // important! Do not use DumbService.smartInvokelater here because it depends on modality state
- // and execution of startRunnable could be skipped if modality state check fails
- SwingUtilities.invokeLater(new Runnable() {
- @Override
- public void run() {
- if (!myProject.isDisposed()) {
- DumbService.getInstance(myProject).runWhenSmart(startRunnable);
- }
+ @SuppressWarnings("unchecked")
+ BeforeRunTaskProvider<BeforeRunTask> provider = BeforeRunTaskProvider.getProvider(myProject, task.getProviderId());
+ if (provider == null) {
+ LOG.warn("Cannot find BeforeRunTaskProvider for id='" + task.getProviderId() + "'");
+ continue;
+ }
+ ExecutionEnvironment taskEnvironment = new ExecutionEnvironmentBuilder(environment).contentToReuse(null).build();
+ taskEnvironment.setExecutionId(finalId);
+ EXECUTION_SESSION_ID_KEY.set(taskEnvironment, executionSessionId);
+ if (!provider.executeTask(projectContext, runConfiguration, taskEnvironment, task)) {
+ if (onCancelRunnable != null) {
+ SwingUtilities.invokeLater(onCancelRunnable);
}
- });
+ return;
+ }
}
- });
- }
- else {
- startRunnable.run();
- }
- }
- else {
- startRunnable.run();
+ // important! Do not use DumbService.smartInvokeLater here because it depends on modality state
+ // and execution of startRunnable could be skipped if modality state check fails
+ SwingUtilities.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ if (!myProject.isDisposed()) {
+ DumbService.getInstance(myProject).runWhenSmart(startRunnable);
+ }
+ }
+ });
+ }
+ });
}
}
@Override
- public void startRunProfile(@NotNull final RunProfileStarter starter, @NotNull final RunProfileState state,
- @NotNull final Project project, @NotNull final Executor executor, @NotNull final ExecutionEnvironment env) {
- final RunContentDescriptor reuseContent =
- ExecutionManager.getInstance(project).getContentManager().getReuseContent(env);
+ public void startRunProfile(@NotNull final RunProfileStarter starter,
+ @NotNull final RunProfileState state,
+ @NotNull final ExecutionEnvironment environment) {
+ final Project project = environment.getProject();
+ final RunContentDescriptor reuseContent = getContentManager().getReuseContent(environment);
if (reuseContent != null) {
- reuseContent.setExecutionId(env.getExecutionId());
+ reuseContent.setExecutionId(environment.getExecutionId());
}
- final RunProfile profile = env.getRunProfile();
- project.getMessageBus().syncPublisher(EXECUTION_TOPIC).processStartScheduled(executor.getId(), env);
+ final Executor executor = environment.getExecutor();
+ project.getMessageBus().syncPublisher(EXECUTION_TOPIC).processStartScheduled(executor.getId(), environment);
Runnable startRunnable = new Runnable() {
@Override
public void run() {
- if (project.isDisposed()) return;
+ if (project.isDisposed()) {
+ return;
+ }
+
+ RunProfile profile = environment.getRunProfile();
boolean started = false;
try {
- project.getMessageBus().syncPublisher(EXECUTION_TOPIC).processStarting(executor.getId(), env);
-
- final RunContentDescriptor descriptor = starter.execute(project, executor, state, reuseContent, env);
+ project.getMessageBus().syncPublisher(EXECUTION_TOPIC).processStarting(executor.getId(), environment);
+ final RunContentDescriptor descriptor = starter.execute(project, executor, state, reuseContent, environment);
if (descriptor != null) {
+ environment.setContentToReuse(descriptor);
final Trinity<RunContentDescriptor, RunnerAndConfigurationSettings, Executor> trinity =
- Trinity.create(descriptor, env.getRunnerAndConfigurationSettings(), executor);
+ Trinity.create(descriptor, environment.getRunnerAndConfigurationSettings(), executor);
myRunningConfigurations.add(trinity);
Disposer.register(descriptor, new Disposable() {
@Override
@@ -221,13 +211,13 @@ public class ExecutionManagerImpl extends ExecutionManager implements ProjectCom
myRunningConfigurations.remove(trinity);
}
});
- ExecutionManager.getInstance(project).getContentManager().showRunContent(executor, descriptor, reuseContent);
+ getContentManager().showRunContent(executor, descriptor, reuseContent);
final ProcessHandler processHandler = descriptor.getProcessHandler();
if (processHandler != null) {
if (!processHandler.isStartNotified()) {
processHandler.startNotify();
}
- project.getMessageBus().syncPublisher(EXECUTION_TOPIC).processStarted(executor.getId(), env, processHandler);
+ project.getMessageBus().syncPublisher(EXECUTION_TOPIC).processStarted(executor.getId(), environment, processHandler);
started = true;
processHandler.addProcessListener(new ProcessExecutionListener(project, profile, processHandler));
}
@@ -239,7 +229,7 @@ public class ExecutionManagerImpl extends ExecutionManager implements ProjectCom
}
finally {
if (!started) {
- project.getMessageBus().syncPublisher(EXECUTION_TOPIC).processNotStarted(executor.getId(), env);
+ project.getMessageBus().syncPublisher(EXECUTION_TOPIC).processNotStarted(executor.getId(), environment);
}
}
}
@@ -249,11 +239,11 @@ public class ExecutionManagerImpl extends ExecutionManager implements ProjectCom
startRunnable.run();
}
else {
- compileAndRun(startRunnable, env, state, new Runnable() {
+ compileAndRun(startRunnable, environment, state, new Runnable() {
@Override
public void run() {
if (!project.isDisposed()) {
- project.getMessageBus().syncPublisher(EXECUTION_TOPIC).processNotStarted(executor.getId(), env);
+ project.getMessageBus().syncPublisher(EXECUTION_TOPIC).processNotStarted(executor.getId(), environment);
}
}
});
@@ -261,26 +251,36 @@ public class ExecutionManagerImpl extends ExecutionManager implements ProjectCom
}
@Override
- public void startRunProfile(@NotNull RunProfileStarter starter, @NotNull RunProfileState state, @NotNull ExecutionEnvironment env) {
- startRunProfile(starter, state, env.getProject(), env.getExecutor(), env);
- }
-
- @Override
- public void restartRunProfile(@NotNull final Project project,
- @NotNull final Executor executor,
- @NotNull final ExecutionTarget target,
- @Nullable final RunnerAndConfigurationSettings configuration,
- @Nullable final ProcessHandler processHandler) {
+ public void restartRunProfile(@NotNull Project project,
+ @NotNull Executor executor,
+ @NotNull ExecutionTarget target,
+ @Nullable RunnerAndConfigurationSettings configuration,
+ @Nullable ProcessHandler processHandler) {
+ ExecutionEnvironmentBuilder builder = createEnvironmentBuilder(project, executor, configuration);
if (processHandler != null) {
for (RunContentDescriptor descriptor : getContentManager().getAllDescriptors()) {
- final ProcessHandler handler = descriptor.getProcessHandler();
- if (handler == processHandler) {
- restartRunProfile(project, null, null, null, null, null, executor, target, configuration, descriptor);
- return;
+ if (descriptor.getProcessHandler() == processHandler) {
+ builder.contentToReuse(descriptor);
+ break;
}
}
}
- restartRunProfile(project, null, null, null, null, null, executor, target, configuration, null);
+ restartRunProfile(builder.target(target).build());
+ }
+
+ @NotNull
+ private static ExecutionEnvironmentBuilder createEnvironmentBuilder(@NotNull Project project, @NotNull Executor executor, @Nullable RunnerAndConfigurationSettings configuration) {
+ ExecutionEnvironmentBuilder builder = new ExecutionEnvironmentBuilder(project, executor);
+
+ ProgramRunner runner = RunnerRegistry.getInstance().getRunner(executor.getId(), configuration != null ? configuration.getConfiguration() : null);
+ if (runner == null && configuration != null) {
+ LOG.error("Cannot find runner for " + configuration.getName());
+ }
+ else if (runner != null) {
+ assert configuration != null;
+ builder.runnerAndSettings(runner, configuration);
+ }
+ return builder;
}
@Override
@@ -289,123 +289,89 @@ public class ExecutionManagerImpl extends ExecutionManager implements ProjectCom
@NotNull ExecutionTarget target,
@Nullable RunnerAndConfigurationSettings configuration,
@Nullable RunContentDescriptor currentDescriptor) {
- restartRunProfile(project, null, null, null, null, null, executor, target, configuration, currentDescriptor);
+ ExecutionEnvironmentBuilder builder = createEnvironmentBuilder(project, executor, configuration);
+ restartRunProfile(builder.target(target).contentToReuse(currentDescriptor).build());
}
@Override
public void restartRunProfile(@Nullable ProgramRunner runner,
@NotNull ExecutionEnvironment environment,
@Nullable RunContentDescriptor currentDescriptor) {
- restartRunProfile(environment.getProject(),
- environment.getDataContext(),
- runner,
- environment.getRunProfile(),
- environment.getRunnerSettings(),
- environment.getConfigurationSettings(),
- environment.getExecutor(),
- environment.getExecutionTarget(),
- environment.getRunnerAndConfigurationSettings(), currentDescriptor);
+ ExecutionEnvironmentBuilder builder = new ExecutionEnvironmentBuilder(environment).contentToReuse(currentDescriptor);
+ if (runner != null) {
+ builder.runner(runner);
+ }
+ restartRunProfile(builder.build());
}
+ public static boolean isProcessRunning(@Nullable RunContentDescriptor descriptor) {
+ ProcessHandler processHandler = descriptor == null ? null : descriptor.getProcessHandler();
+ return processHandler != null && !processHandler.isProcessTerminated();
+ }
- private void restartRunProfile(@NotNull final Project project,
- @Nullable final DataContext context,
- @Nullable ProgramRunner r,
- @Nullable final RunProfile runProfile,
- @Nullable final RunnerSettings runnerSettings,
- @Nullable final ConfigurationPerRunnerSettings configurationPerRunnerSettings,
- @NotNull final Executor executor,
- @NotNull final ExecutionTarget target,
- @Nullable final RunnerAndConfigurationSettings configuration,
- @Nullable final RunContentDescriptor currentDescriptor) {
- final ProgramRunner runner = r != null ?
- r :
- RunnerRegistry.getInstance().getRunner(executor.getId(),
- configuration != null && configuration.getConfiguration() != null
- ? configuration.getConfiguration()
- : runProfile
- );
- if (configuration != null && runner == null) {
- LOG.error("Cannot find runner for " + configuration.getName());
- return;
- }
-
- final List<RunContentDescriptor> runningConfigurationsOfTheSameType = new ArrayList<RunContentDescriptor>();
- final List<RunContentDescriptor> runningIncompatibleConfigurations = new ArrayList<RunContentDescriptor>();
+ @Override
+ public void restartRunProfile(@NotNull final ExecutionEnvironment environment) {
+ RunnerAndConfigurationSettings configuration = environment.getRunnerAndConfigurationSettings();
- if (configuration != null) {
- runningIncompatibleConfigurations.addAll(getIncompatibleRunningDescriptors(configuration));
+ List<RunContentDescriptor> runningIncompatible;
+ if (configuration == null) {
+ runningIncompatible = Collections.emptyList();
}
+ else {
+ runningIncompatible = getIncompatibleRunningDescriptors(configuration);
+ }
+
+ RunContentDescriptor contentToReuse = environment.getContentToReuse();
+ final List<RunContentDescriptor> runningOfTheSameType = new SmartList<RunContentDescriptor>();
if (configuration != null && configuration.isSingleton()) {
- runningConfigurationsOfTheSameType.addAll(getRunningDescriptorsOfTheSameConfigType(configuration));
+ runningOfTheSameType.addAll(getRunningDescriptorsOfTheSameConfigType(configuration));
}
- else if (currentDescriptor != null) {
- runningConfigurationsOfTheSameType.add(currentDescriptor);
+ else if (isProcessRunning(contentToReuse)) {
+ runningOfTheSameType.add(contentToReuse);
}
- final List<RunContentDescriptor> runningConfigurationsToStop = ContainerUtil.concat(runningConfigurationsOfTheSameType,
- runningIncompatibleConfigurations);
- if (!runningConfigurationsToStop.isEmpty()) {
+ List<RunContentDescriptor> runningToStop = ContainerUtil.concat(runningOfTheSameType, runningIncompatible);
+ if (!runningToStop.isEmpty()) {
if (configuration != null) {
- if (!runningConfigurationsOfTheSameType.isEmpty()
- && (runningConfigurationsOfTheSameType.size() > 1 ||
- currentDescriptor == null ||
- runningConfigurationsOfTheSameType.get(0) != currentDescriptor) &&
- !userApprovesStopForSameTypeConfigurations(project, configuration.getName(), runningConfigurationsOfTheSameType.size())) {
+ if (!runningOfTheSameType.isEmpty()
+ && (runningOfTheSameType.size() > 1 || contentToReuse == null || runningOfTheSameType.get(0) != contentToReuse) &&
+ !userApprovesStopForSameTypeConfigurations(environment.getProject(), configuration.getName(), runningOfTheSameType.size())) {
return;
}
- if (!runningIncompatibleConfigurations.isEmpty()
- && !userApprovesStopForIncompatibleConfigurations(myProject, configuration.getName(), runningIncompatibleConfigurations)) {
+ if (!runningIncompatible.isEmpty()
+ && !userApprovesStopForIncompatibleConfigurations(myProject, configuration.getName(), runningIncompatible)) {
return;
}
}
- for (RunContentDescriptor descriptor : runningConfigurationsToStop) {
+
+ for (RunContentDescriptor descriptor : runningToStop) {
stop(descriptor);
}
}
- Runnable runnable = new Runnable() {
+ awaitingTerminationAlarm.addRequest(new Runnable() {
@Override
public void run() {
- if (runner != null && ExecutorRegistry.getInstance().isStarting(project, executor.getId(), runner.getRunnerId())) {
+ if (ExecutorRegistry.getInstance().isStarting(environment)) {
awaitingTerminationAlarm.addRequest(this, 100);
return;
}
- for (RunContentDescriptor descriptor : runningConfigurationsOfTheSameType) {
+
+ for (RunContentDescriptor descriptor : runningOfTheSameType) {
ProcessHandler processHandler = descriptor.getProcessHandler();
if (processHandler != null && !processHandler.isProcessTerminated()) {
awaitingTerminationAlarm.addRequest(this, 100);
return;
}
}
- start(project, context, runner, runProfile, runnerSettings, configurationPerRunnerSettings, configuration, executor, target,
- currentDescriptor);
+ start(environment);
}
- };
- awaitingTerminationAlarm.addRequest(runnable, 50);
+ }, 50);
}
- private static void start(@NotNull Project project,
- @Nullable DataContext context,
- @Nullable ProgramRunner runner,
- @Nullable RunProfile runProfile,
- @Nullable RunnerSettings runnerSettings,
- @Nullable ConfigurationPerRunnerSettings configurationPerRunnerSettings,
- @Nullable RunnerAndConfigurationSettings configuration,
- @NotNull Executor executor,
- @NotNull ExecutionTarget target,
- @Nullable RunContentDescriptor descriptor) {
- Runnable restarter = descriptor != null ? descriptor.getRestarter() : null;
- if (runner != null && runProfile != null) {
- ProgramRunnerUtil.executeConfiguration(project, context, configuration, executor, target, descriptor,
- configuration != null && configuration.isEditBeforeRun(), runner, runProfile, false);
- }
- else if (configuration != null) {
- ProgramRunnerUtil.executeConfiguration(project, context, configuration, executor, target, descriptor, true);
- }
- else if (restarter != null) {
- restarter.run();
- }
+ private static void start(@NotNull ExecutionEnvironment environment) {
+ RunnerAndConfigurationSettings settings = environment.getRunnerAndConfigurationSettings();
+ ProgramRunnerUtil.executeConfiguration(environment, settings != null && settings.isEditBeforeRun(), true);
}
private static boolean userApprovesStopForSameTypeConfigurations(Project project, String configName, int instancesCount) {
@@ -505,35 +471,36 @@ public class ExecutionManagerImpl extends ExecutionManager implements ProjectCom
Messages.getQuestionIcon(), option) == Messages.OK;
}
- private List<RunContentDescriptor> getRunningDescriptorsOfTheSameConfigType(
- @NotNull final RunnerAndConfigurationSettings configurationAndSettings) {
- return getRunningDescriptors(new Predicate<RunnerAndConfigurationSettings>() {
+ @NotNull
+ private List<RunContentDescriptor> getRunningDescriptorsOfTheSameConfigType(@NotNull final RunnerAndConfigurationSettings configurationAndSettings) {
+ return getRunningDescriptors(new Condition<RunnerAndConfigurationSettings>() {
@Override
- public boolean apply(@Nullable RunnerAndConfigurationSettings runningConfigurationAndSettings) {
+ public boolean value(@Nullable RunnerAndConfigurationSettings runningConfigurationAndSettings) {
return configurationAndSettings == runningConfigurationAndSettings;
}
});
}
- private List<RunContentDescriptor> getIncompatibleRunningDescriptors(
- @NotNull final RunnerAndConfigurationSettings configurationAndSettings) {
+ @NotNull
+ private List<RunContentDescriptor> getIncompatibleRunningDescriptors(@NotNull RunnerAndConfigurationSettings configurationAndSettings) {
final RunConfiguration configurationToCheckCompatibility = configurationAndSettings.getConfiguration();
- return getRunningDescriptors(new Predicate<RunnerAndConfigurationSettings>() {
+ return getRunningDescriptors(new Condition<RunnerAndConfigurationSettings>() {
@Override
- public boolean apply(@Nullable RunnerAndConfigurationSettings runningConfigurationAndSettings) {
- if (runningConfigurationAndSettings == null) return false;
- RunConfiguration runningConfiguration = runningConfigurationAndSettings.getConfiguration();
- if (runningConfiguration == null || !(runningConfiguration instanceof CompatibilityAwareRunProfile)) return false;
+ public boolean value(@Nullable RunnerAndConfigurationSettings runningConfigurationAndSettings) {
+ RunConfiguration runningConfiguration = runningConfigurationAndSettings == null ? null : runningConfigurationAndSettings.getConfiguration();
+ if (runningConfiguration == null || !(runningConfiguration instanceof CompatibilityAwareRunProfile)) {
+ return false;
+ }
return ((CompatibilityAwareRunProfile)runningConfiguration).mustBeStoppedToRun(configurationToCheckCompatibility);
}
});
}
- private List<RunContentDescriptor> getRunningDescriptors(
- Predicate<RunnerAndConfigurationSettings> condition) {
- List<RunContentDescriptor> result = new ArrayList<RunContentDescriptor>();
+ @NotNull
+ private List<RunContentDescriptor> getRunningDescriptors(@NotNull Condition<RunnerAndConfigurationSettings> condition) {
+ List<RunContentDescriptor> result = new SmartList<RunContentDescriptor>();
for (Trinity<RunContentDescriptor, RunnerAndConfigurationSettings, Executor> trinity : myRunningConfigurations) {
- if (condition.apply(trinity.getSecond())) {
+ if (condition.value(trinity.getSecond())) {
ProcessHandler processHandler = trinity.getFirst().getProcessHandler();
if (processHandler != null && !processHandler.isProcessTerminating() && !processHandler.isProcessTerminated()) {
result.add(trinity.getFirst());
@@ -543,30 +510,27 @@ public class ExecutionManagerImpl extends ExecutionManager implements ProjectCom
return result;
}
- private static void stop(RunContentDescriptor runContentDescriptor) {
- ProcessHandler processHandler = runContentDescriptor != null ? runContentDescriptor.getProcessHandler() : null;
+ private static void stop(@Nullable RunContentDescriptor descriptor) {
+ ProcessHandler processHandler = descriptor != null ? descriptor.getProcessHandler() : null;
if (processHandler == null) {
return;
}
+
if (processHandler instanceof KillableProcess && processHandler.isProcessTerminating()) {
((KillableProcess)processHandler).killProcess();
return;
}
- if (processHandler.detachIsDefault()) {
- processHandler.detachProcess();
- }
- else {
- processHandler.destroyProcess();
+ if (!processHandler.isProcessTerminated()) {
+ if (processHandler.detachIsDefault()) {
+ processHandler.detachProcess();
+ }
+ else {
+ processHandler.destroyProcess();
+ }
}
}
- @Override
- @NotNull
- public String getComponentName() {
- return "ExecutionManager";
- }
-
private static class ProcessExecutionListener extends ProcessAdapter {
private final Project myProject;
private final RunProfile myProfile;
diff --git a/platform/lang-impl/src/com/intellij/execution/impl/ProjectRunConfigurationManager.java b/platform/lang-impl/src/com/intellij/execution/impl/ProjectRunConfigurationManager.java
index deadaad0a0d1..42b9be79890e 100644
--- a/platform/lang-impl/src/com/intellij/execution/impl/ProjectRunConfigurationManager.java
+++ b/platform/lang-impl/src/com/intellij/execution/impl/ProjectRunConfigurationManager.java
@@ -50,7 +50,7 @@ import java.util.Set;
}
)
public class ProjectRunConfigurationManager implements ProjectComponent, PersistentStateComponent<Element> {
- private static final Logger LOG = Logger.getInstance("#com.intellij.execution.impl.ProjectRunConfigurationManager");
+ private static final Logger LOG = Logger.getInstance(ProjectRunConfigurationManager.class);
private final RunManagerImpl myManager;
private List<Element> myUnloadedElements = null;
@@ -150,7 +150,7 @@ public class ProjectRunConfigurationManager implements ProjectComponent, Persist
}
if (myUnloadedElements != null) {
for (Element unloadedElement : myUnloadedElements) {
- element.addContent((Element)unloadedElement.clone());
+ element.addContent(unloadedElement.clone());
}
}
}
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 edf1352a760c..97f36a8fd2b4 100644
--- a/platform/lang-impl/src/com/intellij/execution/impl/RunConfigurationBeforeRunProvider.java
+++ b/platform/lang-impl/src/com/intellij/execution/impl/RunConfigurationBeforeRunProvider.java
@@ -23,6 +23,7 @@ import com.intellij.execution.process.ProcessAdapter;
import com.intellij.execution.process.ProcessEvent;
import com.intellij.execution.process.ProcessHandler;
import com.intellij.execution.runners.ExecutionEnvironment;
+import com.intellij.execution.runners.ExecutionEnvironmentBuilder;
import com.intellij.execution.runners.ProgramRunner;
import com.intellij.icons.AllIcons;
import com.intellij.openapi.Disposable;
@@ -137,7 +138,7 @@ extends BeforeRunTaskProvider<RunConfigurationBeforeRunProvider.RunConfigurableB
}
@NotNull
- private List<RunnerAndConfigurationSettings> getAvailableConfigurations(RunConfiguration runConfiguration) {
+ private static List<RunnerAndConfigurationSettings> getAvailableConfigurations(RunConfiguration runConfiguration) {
Project project = runConfiguration.getProject();
if (project == null || !project.isInitialized())
return Collections.emptyList();
@@ -164,9 +165,7 @@ extends BeforeRunTaskProvider<RunConfigurationBeforeRunProvider.RunConfigurableB
}
String executorId = DefaultRunExecutor.getRunExecutorInstance().getId();
final ProgramRunner runner = ProgramRunnerUtil.getRunner(executorId, settings);
- if (runner == null)
- return false;
- return runner.canRun(executorId, settings.getConfiguration());
+ return runner != null && runner.canRun(executorId, settings.getConfiguration());
}
@Override
@@ -180,16 +179,17 @@ extends BeforeRunTaskProvider<RunConfigurationBeforeRunProvider.RunConfigurableB
}
final Executor executor = DefaultRunExecutor.getRunExecutorInstance();
final String executorId = executor.getId();
- final ProgramRunner runner = ProgramRunnerUtil.getRunner(executorId, settings);
- if (runner == null)
+ ExecutionEnvironmentBuilder builder = ExecutionEnvironmentBuilder.createOrNull(executor, settings);
+ if (builder == null) {
return false;
- final ExecutionEnvironment environment = new ExecutionEnvironment(executor, runner, settings, myProject);
+ }
+ final ExecutionEnvironment environment = builder.build();
environment.setExecutionId(env.getExecutionId());
if (!ExecutionTargetManager.canRun(settings, env.getExecutionTarget())) {
return false;
}
- if (!runner.canRun(executorId, environment.getRunProfile())) {
+ if (!environment.getRunner().canRun(executorId, environment.getRunProfile())) {
return false;
}
else {
@@ -198,23 +198,27 @@ extends BeforeRunTaskProvider<RunConfigurationBeforeRunProvider.RunConfigurableB
final Disposable disposable = Disposer.newDisposable();
myProject.getMessageBus().connect(disposable).subscribe(ExecutionManager.EXECUTION_TOPIC, new ExecutionAdapter() {
+ @Override
public void processStartScheduled(final String executorIdLocal, final ExecutionEnvironment environmentLocal) {
if (executorId.equals(executorIdLocal) && environment.equals(environmentLocal)) {
targetDone.down();
}
}
+ @Override
public void processNotStarted(final String executorIdLocal, @NotNull final ExecutionEnvironment environmentLocal) {
if (executorId.equals(executorIdLocal) && environment.equals(environmentLocal)) {
targetDone.up();
}
}
+ @Override
public void processStarted(final String executorIdLocal,
@NotNull final ExecutionEnvironment environmentLocal,
@NotNull final ProcessHandler handler) {
if (executorId.equals(executorIdLocal) && environment.equals(environmentLocal)) {
handler.addProcessListener(new ProcessAdapter() {
+ @Override
public void processTerminated(ProcessEvent event) {
result.set(event.getExitCode() == 0);
targetDone.up();
@@ -229,7 +233,7 @@ extends BeforeRunTaskProvider<RunConfigurationBeforeRunProvider.RunConfigurableB
@Override
public void run() {
try {
- runner.execute(environment);
+ environment.getRunner().execute(environment);
}
catch (ExecutionException e) {
targetDone.up();
diff --git a/platform/lang-impl/src/com/intellij/execution/impl/RunDialog.java b/platform/lang-impl/src/com/intellij/execution/impl/RunDialog.java
index 71e205c3f22c..139eb0c4e25b 100644
--- a/platform/lang-impl/src/com/intellij/execution/impl/RunDialog.java
+++ b/platform/lang-impl/src/com/intellij/execution/impl/RunDialog.java
@@ -20,6 +20,7 @@ import com.intellij.execution.ExecutionBundle;
import com.intellij.execution.Executor;
import com.intellij.execution.RunnerAndConfigurationSettings;
import com.intellij.execution.configurations.RunConfiguration;
+import com.intellij.execution.runners.ExecutionEnvironment;
import com.intellij.openapi.help.HelpManager;
import com.intellij.openapi.options.ConfigurationException;
import com.intellij.openapi.options.ex.SingleConfigurableEditor;
@@ -111,6 +112,10 @@ public class RunDialog extends DialogWrapper implements RunConfigurable.RunDialo
return editConfiguration(project, configuration, title, null);
}
+ public static boolean editConfiguration(@NotNull ExecutionEnvironment environment, @NotNull String title) {
+ return editConfiguration(environment.getProject(), environment.getRunnerAndConfigurationSettings(), title, environment.getExecutor());
+ }
+
public static boolean editConfiguration(final Project project, final RunnerAndConfigurationSettings configuration, final String title, @Nullable final Executor executor) {
final SingleConfigurationConfigurable<RunConfiguration> configurable = SingleConfigurationConfigurable.editSettings(configuration, executor);
final SingleConfigurableEditor dialog = new SingleConfigurableEditor(project, configurable, IdeModalityType.PROJECT) {
diff --git a/platform/lang-impl/src/com/intellij/execution/impl/RunManagerImpl.java b/platform/lang-impl/src/com/intellij/execution/impl/RunManagerImpl.java
index d3a1e1cb0574..7b54f21503df 100644
--- a/platform/lang-impl/src/com/intellij/execution/impl/RunManagerImpl.java
+++ b/platform/lang-impl/src/com/intellij/execution/impl/RunManagerImpl.java
@@ -19,6 +19,7 @@ package com.intellij.execution.impl;
import com.intellij.ProjectTopics;
import com.intellij.execution.*;
import com.intellij.execution.configurations.*;
+import com.intellij.execution.runners.ExecutionEnvironment;
import com.intellij.ide.util.PropertiesComponent;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.components.NamedComponent;
@@ -106,7 +107,7 @@ public class RunManagerImpl extends RunManagerEx implements JDOMExternalizable,
public final void initializeConfigurationTypes(@NotNull final ConfigurationType[] factories) {
Arrays.sort(factories, new Comparator<ConfigurationType>() {
@Override
- public int compare(final ConfigurationType o1, final ConfigurationType o2) {
+ public int compare(@NotNull final ConfigurationType o1, @NotNull final ConfigurationType o2) {
return o1.getDisplayName().compareTo(o2.getDisplayName());
}
});
@@ -461,7 +462,7 @@ public class RunManagerImpl extends RunManagerEx implements JDOMExternalizable,
// IDEA-63663 Sort run configurations alphabetically if clean checkout
Collections.sort(order, new Comparator<Pair<String, RunnerAndConfigurationSettings>>() {
@Override
- public int compare(Pair<String, RunnerAndConfigurationSettings> o1, Pair<String, RunnerAndConfigurationSettings> o2) {
+ public int compare(@NotNull Pair<String, RunnerAndConfigurationSettings> o1, @NotNull Pair<String, RunnerAndConfigurationSettings> o2) {
boolean temporary1 = o1.getSecond().isTemporary();
boolean temporary2 = o2.getSecond().isTemporary();
if (temporary1 == temporary2) {
@@ -475,7 +476,7 @@ public class RunManagerImpl extends RunManagerEx implements JDOMExternalizable,
else {
Collections.sort(order, new Comparator<Pair<String, RunnerAndConfigurationSettings>>() {
@Override
- public int compare(Pair<String, RunnerAndConfigurationSettings> o1, Pair<String, RunnerAndConfigurationSettings> o2) {
+ public int compare(@NotNull Pair<String, RunnerAndConfigurationSettings> o1, @NotNull Pair<String, RunnerAndConfigurationSettings> o2) {
int i1 = folderNames.indexOf(o1.getSecond().getFolderName());
int i2 = folderNames.indexOf(o2.getSecond().getFolderName());
if (i1 != i2) {
@@ -507,8 +508,12 @@ public class RunManagerImpl extends RunManagerEx implements JDOMExternalizable,
return myConfigurations.values();
}
- public static boolean canRunConfiguration(@NotNull final RunnerAndConfigurationSettings configuration,
- @NotNull final Executor executor) {
+ public static boolean canRunConfiguration(@NotNull ExecutionEnvironment environment) {
+ RunnerAndConfigurationSettings runnerAndConfigurationSettings = environment.getRunnerAndConfigurationSettings();
+ return runnerAndConfigurationSettings != null && canRunConfiguration(runnerAndConfigurationSettings, environment.getExecutor());
+ }
+
+ public static boolean canRunConfiguration(@NotNull RunnerAndConfigurationSettings configuration, @NotNull Executor executor) {
try {
configuration.checkSettings(executor);
}
@@ -567,7 +572,7 @@ public class RunManagerImpl extends RunManagerEx implements JDOMExternalizable,
if (myUnknownElements != null) {
for (Element unloadedElement : myUnknownElements) {
- parentNode.addContent((Element)unloadedElement.clone());
+ parentNode.addContent(unloadedElement.clone());
}
}
}
@@ -647,7 +652,7 @@ public class RunManagerImpl extends RunManagerEx implements JDOMExternalizable,
final Comparator<Element> comparator = new Comparator<Element>() {
@Override
- public int compare(Element a, Element b) {
+ public int compare(@NotNull Element a, @NotNull Element b) {
final boolean aDefault = Boolean.valueOf(a.getAttributeValue("default", "false"));
final boolean bDefault = Boolean.valueOf(b.getAttributeValue("default", "false"));
return aDefault == bDefault ? 0 : aDefault ? -1 : 1;
@@ -666,7 +671,7 @@ public class RunManagerImpl extends RunManagerEx implements JDOMExternalizable,
Collections.sort(sortedElements, comparator); // ensure templates are loaded first!
for (final Element element : sortedElements) {
- RunnerAndConfigurationSettings configurationSettings = null;
+ RunnerAndConfigurationSettings configurationSettings;
try {
configurationSettings = loadConfiguration(element, false);
}
@@ -915,6 +920,7 @@ public class RunManagerImpl extends RunManagerEx implements JDOMExternalizable,
public List<RunnerAndConfigurationSettings> getTempConfigurationsList() {
List<RunnerAndConfigurationSettings> configurations =
ContainerUtil.filter(myConfigurations.values(), new Condition<RunnerAndConfigurationSettings>() {
+ @Override
public boolean value(RunnerAndConfigurationSettings settings) {
return settings.isTemporary();
}
@@ -933,6 +939,7 @@ public class RunManagerImpl extends RunManagerEx implements JDOMExternalizable,
return result;
}
+ @Override
public void makeStable(@NotNull RunnerAndConfigurationSettings settings) {
settings.setTemporary(false);
myRecentlyUsedTemporaries.remove(settings.getConfiguration());
diff --git a/platform/lang-impl/src/com/intellij/execution/impl/RunnerRegistryImpl.java b/platform/lang-impl/src/com/intellij/execution/impl/RunnerRegistryImpl.java
index 08e9541c265f..cefeaf958f0d 100644
--- a/platform/lang-impl/src/com/intellij/execution/impl/RunnerRegistryImpl.java
+++ b/platform/lang-impl/src/com/intellij/execution/impl/RunnerRegistryImpl.java
@@ -51,10 +51,12 @@ public class RunnerRegistryImpl extends RunnerRegistry {
}
@Override
- public ProgramRunner getRunner(@NotNull final String executorId, final RunProfile settings) {
- if (settings == null) return null;
- final ProgramRunner[] runners = getRegisteredRunners();
- for (final ProgramRunner runner : runners) {
+ public ProgramRunner getRunner(@NotNull String executorId, @Nullable RunProfile settings) {
+ if (settings == null) {
+ return null;
+ }
+
+ for (ProgramRunner runner : getRegisteredRunners()) {
if (runner.canRun(executorId, settings)) {
return runner;
}
diff --git a/platform/lang-impl/src/com/intellij/execution/impl/SingleConfigurationConfigurable.java b/platform/lang-impl/src/com/intellij/execution/impl/SingleConfigurationConfigurable.java
index 4c58ab7029b3..4a750f22a15d 100644
--- a/platform/lang-impl/src/com/intellij/execution/impl/SingleConfigurationConfigurable.java
+++ b/platform/lang-impl/src/com/intellij/execution/impl/SingleConfigurationConfigurable.java
@@ -151,12 +151,10 @@ public final class SingleConfigurationConfigurable<Config extends RunConfigurati
if (snapshot != null) {
snapshot.setName(getNameText());
snapshot.checkSettings(myExecutor);
- for (ProgramRunner runner : RunnerRegistry.getInstance().getRegisteredRunners()) {
- for (Executor executor : ExecutorRegistry.getInstance().getRegisteredExecutors()) {
- if (runner.canRun(executor.getId(), snapshot.getConfiguration())) {
- checkConfiguration(runner, snapshot);
- break;
- }
+ for (Executor executor : ExecutorRegistry.getInstance().getRegisteredExecutors()) {
+ ProgramRunner runner = RunnerRegistry.getInstance().getRunner(executor.getId(), snapshot.getConfiguration());
+ if (runner != null) {
+ checkConfiguration(runner, snapshot);
}
}
}
diff --git a/platform/lang-impl/src/com/intellij/execution/runners/AbstractConsoleRunnerWithHistory.java b/platform/lang-impl/src/com/intellij/execution/runners/AbstractConsoleRunnerWithHistory.java
index b4b3cd919ec4..7bcabebf256a 100644
--- a/platform/lang-impl/src/com/intellij/execution/runners/AbstractConsoleRunnerWithHistory.java
+++ b/platform/lang-impl/src/com/intellij/execution/runners/AbstractConsoleRunnerWithHistory.java
@@ -173,7 +173,7 @@ public abstract class AbstractConsoleRunnerWithHistory<T extends LanguageConsole
return false;
}
- protected void showConsole(Executor defaultExecutor, RunContentDescriptor contentDescriptor) {
+ protected void showConsole(Executor defaultExecutor, @NotNull RunContentDescriptor contentDescriptor) {
// Show in run toolwindow
ExecutionManager.getInstance(myProject).getContentManager().showRunContent(defaultExecutor, contentDescriptor);
}
diff --git a/platform/lang-impl/src/com/intellij/execution/runners/DefaultProgramRunner.java b/platform/lang-impl/src/com/intellij/execution/runners/DefaultProgramRunner.java
index e2f8a5a717fe..5f7321aa8068 100644
--- a/platform/lang-impl/src/com/intellij/execution/runners/DefaultProgramRunner.java
+++ b/platform/lang-impl/src/com/intellij/execution/runners/DefaultProgramRunner.java
@@ -36,10 +36,10 @@ public abstract class DefaultProgramRunner extends GenericProgramRunner {
@NotNull final ExecutionEnvironment env) throws ExecutionException {
FileDocumentManager.getInstance().saveAllDocuments();
ExecutionResult executionResult = state.execute(env.getExecutor(), this);
- if (executionResult == null) return null;
-
- final RunContentBuilder contentBuilder = new RunContentBuilder(this, executionResult, env);
- return contentBuilder.showRunContent(contentToReuse);
+ if (executionResult == null) {
+ return null;
+ }
+ return new RunContentBuilder(executionResult, env).showRunContent(contentToReuse);
}
}
diff --git a/platform/lang-impl/src/com/intellij/execution/runners/FakeRerunAction.java b/platform/lang-impl/src/com/intellij/execution/runners/FakeRerunAction.java
index 45393c328e69..ecc8fa553121 100644
--- a/platform/lang-impl/src/com/intellij/execution/runners/FakeRerunAction.java
+++ b/platform/lang-impl/src/com/intellij/execution/runners/FakeRerunAction.java
@@ -15,33 +15,127 @@
*/
package com.intellij.execution.runners;
+import com.intellij.execution.ExecutionBundle;
+import com.intellij.execution.ExecutorRegistry;
+import com.intellij.execution.impl.ExecutionManagerImpl;
+import com.intellij.execution.process.ProcessHandler;
+import com.intellij.execution.ui.RunContentDescriptor;
+import com.intellij.icons.AllIcons;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
+import com.intellij.openapi.actionSystem.LangDataKeys;
import com.intellij.openapi.actionSystem.Presentation;
import com.intellij.openapi.project.DumbAware;
import com.intellij.util.containers.ContainerUtil;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+import javax.swing.*;
+import java.awt.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
import java.util.List;
/**
* @author Roman.Chernyatchik
*/
-public class FakeRerunAction extends AnAction implements DumbAware {
- protected static final List<RestartAction> registry = ContainerUtil.createLockFreeCopyOnWriteList();
+class FakeRerunAction extends AnAction implements DumbAware {
+ @SuppressWarnings("deprecation")
+ static final List<RestartAction> registry = ContainerUtil.createLockFreeCopyOnWriteList();
@Override
- public void actionPerformed(AnActionEvent e) {
- RestartAction action = RestartAction.findActualAction();
- if (action != null && action.isEnabled()) {
- action.actionPerformed(e);
+ public void update(AnActionEvent event) {
+ Presentation presentation = event.getPresentation();
+ ExecutionEnvironment environment = getEnvironment(event);
+ if (environment != null) {
+ presentation.setText(ExecutionBundle.message("rerun.configuration.action.name", environment.getRunProfile().getName()));
+ presentation.setIcon(ExecutionManagerImpl.isProcessRunning(getDescriptor(event)) ? AllIcons.Actions.Restart : environment.getExecutor().getIcon());
+ presentation.setEnabledAndVisible(isEnabled(event));
+ return;
}
+
+ FakeRerunAction action = findActualAction(event);
+ presentation.setEnabled(action != null && action.isEnabled(event));
+ presentation.setVisible(false);
}
@Override
- public void update(AnActionEvent e) {
- final Presentation presentation = e.getPresentation();
- RestartAction action = RestartAction.findActualAction();
- presentation.setEnabled(action != null && action.isEnabled());
- presentation.setVisible(false);
+ public void actionPerformed(AnActionEvent event) {
+ ExecutionEnvironment environment = getEnvironment(event);
+ if (environment != null) {
+ ExecutionUtil.restart(environment);
+ return;
+ }
+
+ FakeRerunAction action = findActualAction(event);
+ if (action != null && action.isEnabled(event)) {
+ action.actionPerformed(event);
+ }
+ }
+
+ @Nullable
+ protected RunContentDescriptor getDescriptor(AnActionEvent event) {
+ return event.getData(LangDataKeys.RUN_CONTENT_DESCRIPTOR);
+ }
+
+ @Nullable
+ protected ExecutionEnvironment getEnvironment(AnActionEvent event) {
+ return event.getData(LangDataKeys.EXECUTION_ENVIRONMENT);
+ }
+
+ protected boolean isEnabled(AnActionEvent event) {
+ RunContentDescriptor descriptor = getDescriptor(event);
+ ProcessHandler processHandler = descriptor == null ? null : descriptor.getProcessHandler();
+ ExecutionEnvironment environment = getEnvironment(event);
+ return environment != null &&
+ !ExecutorRegistry.getInstance().isStarting(environment) &&
+ !(processHandler != null && processHandler.isProcessTerminating());
+ }
+
+ @Nullable
+ private JComponent getRunComponent(@NotNull AnActionEvent event) {
+ RunContentDescriptor descriptor = getDescriptor(event);
+ return descriptor == null ? null : descriptor.getComponent();
+ }
+
+ @Nullable
+ private static FakeRerunAction findActualAction(@NotNull final AnActionEvent event) {
+ if (registry.isEmpty()) {
+ return null;
+ }
+
+ List<FakeRerunAction> candidates = new ArrayList<FakeRerunAction>(registry);
+ Collections.sort(candidates, new Comparator<FakeRerunAction>() {
+ @Override
+ public int compare(@NotNull FakeRerunAction action1, @NotNull FakeRerunAction action2) {
+ boolean isActive1 = action1.isEnabled(event);
+ if (isActive1 != action2.isEnabled(event)) {
+ return isActive1 ? -1 : 1;
+ }
+
+ JComponent component1 = action1.getRunComponent(event);
+ JComponent component2 = action2.getRunComponent(event);
+ Window window1 = component1 == null ? null : SwingUtilities.windowForComponent(component1);
+ Window window2 = component2 == null ? null : SwingUtilities.windowForComponent(component2);
+ if (window1 == null) {
+ return 1;
+ }
+ if (window2 == null) {
+ return -1;
+ }
+
+ boolean showing1 = component1.isShowing();
+ boolean showing2 = component2.isShowing();
+ if (showing1 && !showing2) {
+ return -1;
+ }
+ if (showing2 && !showing1) {
+ return 1;
+ }
+ return (window1.isActive() ? -1 : 1);
+ }
+ });
+ return candidates.get(0);
}
}
diff --git a/platform/lang-impl/src/com/intellij/execution/runners/RerunTestsAction.java b/platform/lang-impl/src/com/intellij/execution/runners/RerunTestsAction.java
index c4e8fd0a3e0d..8d3bf8663598 100644
--- a/platform/lang-impl/src/com/intellij/execution/runners/RerunTestsAction.java
+++ b/platform/lang-impl/src/com/intellij/execution/runners/RerunTestsAction.java
@@ -1,13 +1,11 @@
package com.intellij.execution.runners;
-import com.intellij.execution.ExecutionManager;
-import com.intellij.execution.ExecutorRegistry;
import com.intellij.execution.process.ProcessHandler;
import com.intellij.execution.ui.RunContentDescriptor;
import com.intellij.openapi.Disposable;
-import com.intellij.openapi.actionSystem.*;
+import com.intellij.openapi.actionSystem.AnAction;
+import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.project.DumbAwareAction;
-import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Disposer;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
@@ -25,41 +23,27 @@ import java.util.List;
* @author Sergey Simonchik
*/
public class RerunTestsAction extends DumbAwareAction implements AnAction.TransparentUpdate {
-
public static final String ID = "RerunTests";
- private static final List<RerunInfo> REGISTRY = ContainerUtil.createLockFreeCopyOnWriteList();
+ private static final List<ExecutionEnvironment> REGISTRY = ContainerUtil.createLockFreeCopyOnWriteList();
- public static void register(@NotNull RunContentDescriptor descriptor,
- @NotNull ExecutionEnvironment env,
- @NotNull ProgramRunner runner) {
- final RerunInfo rerunInfo = new RerunInfo(descriptor, env, runner);
- REGISTRY.add(rerunInfo);
- Disposer.register(descriptor, new Disposable() {
+ public static void register(@NotNull final ExecutionEnvironment environment) {
+ REGISTRY.add(environment);
+ Disposer.register(environment, new Disposable() {
@Override
public void dispose() {
- REGISTRY.remove(rerunInfo);
+ REGISTRY.remove(environment);
}
});
}
@Override
public void actionPerformed(AnActionEvent e) {
- DataContext dataContext = e.getDataContext();
- Project project = CommonDataKeys.PROJECT.getData(dataContext);
- if (project == null) {
- return;
- }
- ExecutionManager executionManager = ExecutionManager.getInstance(project);
- for (RerunInfo rerunInfo : REGISTRY) {
- RunContentDescriptor descriptor = rerunInfo.getDescriptor();
- if (!Disposer.isDisposed(descriptor)) {
- ExecutionEnvironment env = rerunInfo.getEnv();
- ProgramRunner runner = rerunInfo.getRunner();
- ProcessHandler processHandler = descriptor.getProcessHandler();
+ for (ExecutionEnvironment environment : REGISTRY) {
+ if (!Disposer.isDisposed(environment)) {
+ RunContentDescriptor descriptor = environment.getContentToReuse();
+ ProcessHandler processHandler = descriptor == null ? null : descriptor.getProcessHandler();
if (processHandler != null && processHandler.isProcessTerminated()) {
- if (!ExecutorRegistry.getInstance().isStarting(project, env.getExecutor().getId(), runner.getRunnerId())) {
- executionManager.restartRunProfile(runner, env, descriptor);
- }
+ ExecutionUtil.restart(environment);
}
}
}
@@ -67,35 +51,6 @@ public class RerunTestsAction extends DumbAwareAction implements AnAction.Transp
@Override
public void update(AnActionEvent e) {
- Presentation presentation = e.getPresentation();
- presentation.setEnabled(true);
- }
-
- private static class RerunInfo {
-
- private final RunContentDescriptor myDescriptor;
- private final ExecutionEnvironment myEnv;
- private final ProgramRunner myRunner;
-
- public RerunInfo(@NotNull RunContentDescriptor descriptor,
- @NotNull ExecutionEnvironment env,
- @NotNull ProgramRunner runner) {
- myDescriptor = descriptor;
- myEnv = env;
- myRunner = runner;
- }
-
- private RunContentDescriptor getDescriptor() {
- return myDescriptor;
- }
-
- private ExecutionEnvironment getEnv() {
- return myEnv;
- }
-
- private ProgramRunner getRunner() {
- return myRunner;
- }
+ e.getPresentation().setEnabled(true);
}
-
}
diff --git a/platform/lang-impl/src/com/intellij/execution/runners/RestartAction.java b/platform/lang-impl/src/com/intellij/execution/runners/RestartAction.java
index 20b29c2de994..1ab3cee3c8cb 100644
--- a/platform/lang-impl/src/com/intellij/execution/runners/RestartAction.java
+++ b/platform/lang-impl/src/com/intellij/execution/runners/RestartAction.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2014 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.
@@ -15,129 +15,69 @@
*/
package com.intellij.execution.runners;
-import com.intellij.execution.ExecutionBundle;
-import com.intellij.execution.ExecutionManager;
import com.intellij.execution.Executor;
-import com.intellij.execution.ExecutorRegistry;
-import com.intellij.execution.process.ProcessHandler;
import com.intellij.execution.ui.RunContentDescriptor;
-import com.intellij.icons.AllIcons;
import com.intellij.openapi.Disposable;
-import com.intellij.openapi.actionSystem.*;
+import com.intellij.openapi.actionSystem.AnAction;
+import com.intellij.openapi.actionSystem.AnActionEvent;
+import com.intellij.openapi.actionSystem.CustomShortcutSet;
+import com.intellij.openapi.actionSystem.IdeActions;
import com.intellij.openapi.keymap.KeymapManager;
import com.intellij.openapi.project.DumbAware;
-import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Disposer;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
-import java.awt.*;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
+@Deprecated
/**
- * @author dyoma
+ * to remove in IDEA 15
*/
public class RestartAction extends FakeRerunAction implements DumbAware, AnAction.TransparentUpdate, Disposable {
-
- private final ProgramRunner myRunner;
- @NotNull private final RunContentDescriptor myDescriptor;
- @NotNull private final Executor myExecutor;
+ private final RunContentDescriptor myDescriptor;
private final ExecutionEnvironment myEnvironment;
- public RestartAction(@NotNull final Executor executor,
- final ProgramRunner runner,
- @NotNull final RunContentDescriptor descriptor,
- @NotNull final ExecutionEnvironment env) {
+ public RestartAction(@NotNull RunContentDescriptor descriptor, @NotNull ExecutionEnvironment environment) {
+ //noinspection deprecation
+ this(environment.getExecutor(), null, descriptor, environment);
+ }
+
+ @Deprecated
+ /**
+ * @deprecated environment must provide runner id
+ * to remove in IDEA 15
+ */
+ public RestartAction(@SuppressWarnings("UnusedParameters") @NotNull Executor executor,
+ @Nullable ProgramRunner runner,
+ @NotNull RunContentDescriptor descriptor,
+ @NotNull ExecutionEnvironment environment) {
Disposer.register(descriptor, this);
- registry.add(this);
+ FakeRerunAction.registry.add(this);
- myEnvironment = env;
+ myEnvironment = runner == null ? environment : RunContentBuilder.fix(environment, runner);
getTemplatePresentation().setEnabled(false);
- myRunner = runner;
myDescriptor = descriptor;
- myExecutor = executor;
- // see IDEADEV-698
-
- if (descriptor.getRestarter() == null) {
- descriptor.setRestarter(new Runnable() {
- @Override
- public void run() {
- restart();
- }
- });
- }
}
@Override
public void dispose() {
- registry.remove(this);
- }
-
- @Nullable
- static RestartAction findActualAction() {
- if (registry.isEmpty())
- return null;
- List<RestartAction> candidates = new ArrayList<RestartAction>(registry);
- Collections.sort(candidates, new Comparator<RestartAction>() {
- @Override
- public int compare(RestartAction action1, RestartAction action2) {
- boolean isActive1 = action1.isEnabled();
- boolean isActive2 = action2.isEnabled();
- if (isActive1 != isActive2)
- return isActive1? - 1 : 1;
- Window window1 = SwingUtilities.windowForComponent(action1.myDescriptor.getComponent());
- Window window2 = SwingUtilities.windowForComponent(action2.myDescriptor.getComponent());
- if (window1 == null)
- return 1;
- if (window2 == null)
- return -1;
- boolean showing1 = action1.myDescriptor.getComponent().isShowing();
- boolean showing2 = action2.myDescriptor.getComponent().isShowing();
- if (showing1 && !showing2)
- return -1;
- if (showing2 && !showing1)
- return 1;
- return (window1.isActive() ? -1 : 1);
- }
- });
- return candidates.get(0);
+ FakeRerunAction.registry.remove(this);
}
@Override
- public void actionPerformed(final AnActionEvent e) {
- restart();
- }
-
- public void restart() {
- Project project = myEnvironment.getProject();
- if (!ExecutorRegistry.getInstance().isStarting(project, myExecutor.getId(), myRunner.getRunnerId()))
- ExecutionManager.getInstance(project).restartRunProfile(myRunner, myEnvironment, myDescriptor);
+ @NotNull
+ protected RunContentDescriptor getDescriptor(AnActionEvent event) {
+ return myDescriptor;
}
@Override
- public void update(final AnActionEvent event) {
- final Presentation presentation = event.getPresentation();
- String name = myEnvironment.getRunProfile().getName();
- ProcessHandler processHandler = myDescriptor.getProcessHandler();
- final boolean isRunning = processHandler != null && !processHandler.isProcessTerminated();
-
- presentation.setText(ExecutionBundle.message("rerun.configuration.action.name", name));
- presentation.setIcon(isRunning ? AllIcons.Actions.Restart : myExecutor.getIcon());
- presentation.setEnabled(isEnabled());
- }
-
- boolean isEnabled() {
- ProcessHandler processHandler = myDescriptor.getProcessHandler();
- boolean isTerminating = processHandler != null && processHandler.isProcessTerminating();
- boolean isStarting = ExecutorRegistry.getInstance().isStarting(myEnvironment.getProject(), myExecutor.getId(), myRunner.getRunnerId());
- return !isStarting && !isTerminating;
+ @NotNull
+ protected ExecutionEnvironment getEnvironment(AnActionEvent event) {
+ return myEnvironment;
}
- public void registerShortcut(final JComponent component) {
+ public void registerShortcut(JComponent component) {
registerCustomShortcutSet(new CustomShortcutSet(KeymapManager.getInstance().getActiveKeymap().getShortcuts(IdeActions.ACTION_RERUN)),
component);
}
diff --git a/platform/lang-impl/src/com/intellij/execution/runners/RunContentBuilder.java b/platform/lang-impl/src/com/intellij/execution/runners/RunContentBuilder.java
index bb6d206f1eb9..f16f8dadfb45 100644
--- a/platform/lang-impl/src/com/intellij/execution/runners/RunContentBuilder.java
+++ b/platform/lang-impl/src/com/intellij/execution/runners/RunContentBuilder.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2014 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.
@@ -15,9 +15,6 @@
*/
package com.intellij.execution.runners;
-import com.intellij.diagnostic.logging.LogConsoleManagerBase;
-import com.intellij.diagnostic.logging.LogFilesManager;
-import com.intellij.diagnostic.logging.OutputFileUtil;
import com.intellij.execution.DefaultExecutionResult;
import com.intellij.execution.ExecutionManager;
import com.intellij.execution.ExecutionResult;
@@ -32,7 +29,6 @@ import com.intellij.execution.ui.actions.CloseAction;
import com.intellij.execution.ui.layout.PlaceInGrid;
import com.intellij.icons.AllIcons;
import com.intellij.ide.actions.ContextHelpAction;
-import com.intellij.openapi.Disposable;
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.project.Project;
@@ -40,115 +36,91 @@ import com.intellij.openapi.util.Disposer;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.ui.content.Content;
import com.intellij.ui.content.tabs.PinToolwindowTabAction;
+import com.intellij.util.SmartList;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
import javax.swing.*;
-import java.util.ArrayList;
import java.util.Collection;
+import java.util.List;
-/**
- * @author dyoma
- */
-public class RunContentBuilder extends LogConsoleManagerBase {
+public class RunContentBuilder extends RunTab {
@NonNls private static final String JAVA_RUNNER = "JavaRunner";
- private final ProgramRunner myRunner;
- private final ArrayList<AnAction> myRunnerActions = new ArrayList<AnAction>();
- private ExecutionResult myExecutionResult;
-
- private final LogFilesManager myManager;
-
- private RunnerLayoutUi myUi;
- private final Executor myExecutor;
+ private final List<AnAction> myRunnerActions = new SmartList<AnAction>();
+ private final ExecutionResult myExecutionResult;
/**
- * @deprecated use {@link #RunContentBuilder(ProgramRunner, com.intellij.execution.ExecutionResult, ExecutionEnvironment)}
+ * @deprecated use {@link #RunContentBuilder(com.intellij.execution.ExecutionResult, ExecutionEnvironment)}
+ * to remove in IDEA 14
*/
+ @SuppressWarnings("UnusedParameters")
public RunContentBuilder(@NotNull Project project,
ProgramRunner runner,
Executor executor,
ExecutionResult executionResult,
@NotNull ExecutionEnvironment environment) {
+ //noinspection deprecation
this(runner, executionResult, environment);
}
+ /**
+ * @deprecated use {@link #RunContentBuilder(com.intellij.execution.ExecutionResult, ExecutionEnvironment)}
+ * to remove in IDEA 15
+ */
public RunContentBuilder(ProgramRunner runner,
ExecutionResult executionResult,
@NotNull ExecutionEnvironment environment) {
- super(environment.getProject(), SearchScopeProvider.createSearchScope(environment.getProject(), environment.getRunProfile()));
- myRunner = runner;
- myExecutor = environment.getExecutor();
- myManager = new LogFilesManager(environment.getProject(), this, this);
+ this(executionResult, fix(environment, runner));
+ }
+
+ public RunContentBuilder(@NotNull ExecutionResult executionResult, @NotNull ExecutionEnvironment environment) {
+ super(environment, getRunnerType(executionResult.getExecutionConsole()));
+
myExecutionResult = executionResult;
- setEnvironment(environment);
+ myUi.getOptions().setMoveToGridActionEnabled(false).setMinimizeActionEnabled(false);
}
- /**
- * @deprecated use {@link #RunContentBuilder(com.intellij.openapi.project.Project, ProgramRunner, com.intellij.execution.Executor, com.intellij.execution.ExecutionResult, ExecutionEnvironment)}
- */
- public RunContentBuilder(final Project project, final ProgramRunner runner, Executor executor) {
- super(project);
- myRunner = runner;
- myExecutor = executor;
- myManager = new LogFilesManager(project, this, this);
+ @NotNull
+ public static ExecutionEnvironment fix(@NotNull ExecutionEnvironment environment, @Nullable ProgramRunner runner) {
+ if (runner == null || runner.equals(environment.getRunner())) {
+ return environment;
+ }
+ else {
+ return new ExecutionEnvironmentBuilder(environment).runner(runner).build();
+ }
}
+ @SuppressWarnings("UnusedDeclaration")
@Deprecated
@NotNull
+ /**
+ * @deprecated to remove in IDEA 15
+ */
public static GlobalSearchScope createSearchScope(Project project, RunProfile runProfile) {
return SearchScopeProvider.createSearchScope(project, runProfile);
}
+ @NotNull
public ExecutionResult getExecutionResult() {
return myExecutionResult;
}
- @Deprecated
- public void setExecutionResult(final ExecutionResult executionResult) {
- myExecutionResult = executionResult;
- }
-
- @Override
- public void setEnvironment(@NotNull final ExecutionEnvironment env) {
- super.setEnvironment(env);
- final RunProfile profile = env.getRunProfile();
- if (profile instanceof RunConfigurationBase) {
- myManager.registerFileMatcher((RunConfigurationBase)profile);
- }
- }
-
public void addAction(@NotNull final AnAction action) {
myRunnerActions.add(action);
}
+ @NotNull
private RunContentDescriptor createDescriptor() {
- if (myExecutionResult == null) {
- throw new IllegalStateException("Missing ExecutionResult");
- }
-
- ExecutionEnvironment environment = getEnvironment();
- if (environment == null) {
- throw new IllegalStateException("Missing ExecutionEnvironment");
- }
-
- final RunProfile profile = environment.getRunProfile();
-
- final ExecutionConsole console = myExecutionResult.getExecutionConsole();
- String runnerType = JAVA_RUNNER;
- if (console instanceof ExecutionConsoleEx) {
- final String id = ((ExecutionConsoleEx)console).getExecutionConsoleId();
- if (id != null) {
- runnerType = JAVA_RUNNER + "." + id;
- }
- }
- myUi = RunnerLayoutUi.Factory.getInstance(getProject()).create(runnerType, myExecutor.getId(), profile.getName(), this);
- myUi.getOptions().setMoveToGridActionEnabled(false).setMinimizeActionEnabled(false);
-
+ final RunProfile profile = getEnvironment().getRunProfile();
if (ApplicationManager.getApplication().isUnitTestMode()) {
- return new MyRunContentDescriptor(profile, myExecutionResult, myUi.getComponent(), this);
+ RunContentDescriptor contentDescriptor = new RunContentDescriptor(profile, myExecutionResult, myUi);
+ Disposer.register(contentDescriptor, this);
+ return contentDescriptor;
}
+ final ExecutionConsole console = myExecutionResult.getExecutionConsole();
if (console != null) {
if (console instanceof ExecutionConsoleEx) {
((ExecutionConsoleEx)console).buildUi(myUi);
@@ -156,19 +128,17 @@ public class RunContentBuilder extends LogConsoleManagerBase {
else {
buildConsoleUiDefault(myUi, console);
}
- if (profile instanceof RunConfigurationBase) {
- myManager.initLogConsoles((RunConfigurationBase)profile, myExecutionResult.getProcessHandler());
- OutputFileUtil.attachDumpListener((RunConfigurationBase)profile, myExecutionResult.getProcessHandler(), console);
- }
+ initLogConsoles(profile, myExecutionResult.getProcessHandler(), console);
}
- MyRunContentDescriptor contentDescriptor = new MyRunContentDescriptor(profile, myExecutionResult, myUi.getComponent(), this);
- myUi.getOptions().setLeftToolbar(createActionToolbar(contentDescriptor, myUi.getComponent()), ActionPlaces.UNKNOWN);
+ RunContentDescriptor contentDescriptor = new RunContentDescriptor(profile, myExecutionResult, myUi);
+ Disposer.register(contentDescriptor, this);
+ myUi.getOptions().setLeftToolbar(createActionToolbar(contentDescriptor), ActionPlaces.UNKNOWN);
if (profile instanceof RunConfigurationBase) {
if (console instanceof ObservableConsoleView && !ApplicationManager.getApplication().isUnitTestMode()) {
((ObservableConsoleView)console).addChangeListener(new ConsoleToFrontListener((RunConfigurationBase)profile,
getProject(),
- myExecutor,
+ getEnvironment().getExecutor(),
contentDescriptor,
myUi),
this);
@@ -178,10 +148,22 @@ public class RunContentBuilder extends LogConsoleManagerBase {
return contentDescriptor;
}
+ @NotNull
+ private static String getRunnerType(@Nullable ExecutionConsole console) {
+ String runnerType = JAVA_RUNNER;
+ if (console instanceof ExecutionConsoleEx) {
+ String id = ((ExecutionConsoleEx)console).getExecutionConsoleId();
+ if (id != null) {
+ return JAVA_RUNNER + '.' + id;
+ }
+ }
+ return runnerType;
+ }
+
public static void buildConsoleUiDefault(RunnerLayoutUi ui, final ExecutionConsole console) {
final Content consoleContent = ui.createContent(ExecutionConsole.CONSOLE_CONTENT_ID, console.getComponent(), "Console",
AllIcons.Debugger.Console,
- console.getPreferredFocusableComponent());
+ console.getPreferredFocusableComponent());
consoleContent.setCloseable(false);
addAdditionalConsoleEditorActions(console, consoleContent);
@@ -191,22 +173,18 @@ public class RunContentBuilder extends LogConsoleManagerBase {
public static void addAdditionalConsoleEditorActions(final ExecutionConsole console, final Content consoleContent) {
final DefaultActionGroup consoleActions = new DefaultActionGroup();
if (console instanceof ConsoleView) {
- AnAction[] actions = ((ConsoleView)console).createConsoleActions();
- for (AnAction goaction: actions) {
- consoleActions.add(goaction);
+ for (AnAction action : ((ConsoleView)console).createConsoleActions()) {
+ consoleActions.add(action);
}
}
consoleContent.setActions(consoleActions, ActionPlaces.UNKNOWN, console.getComponent());
}
- private ActionGroup createActionToolbar(final RunContentDescriptor contentDescriptor, final JComponent component) {
+ @NotNull
+ private ActionGroup createActionToolbar(@NotNull RunContentDescriptor contentDescriptor) {
final DefaultActionGroup actionGroup = new DefaultActionGroup();
-
- final RestartAction restartAction = new RestartAction(myExecutor, myRunner, contentDescriptor, getEnvironment());
- restartAction.registerShortcut(component);
- actionGroup.add(restartAction);
-
+ actionGroup.add(ActionManager.getInstance().getAction(IdeActions.ACTION_RERUN));
if (myExecutionResult instanceof DefaultExecutionResult) {
final AnAction[] actions = ((DefaultExecutionResult)myExecutionResult).getRestartActions();
if (actions != null) {
@@ -217,15 +195,14 @@ public class RunContentBuilder extends LogConsoleManagerBase {
}
}
- final AnAction stopAction = ActionManager.getInstance().getAction(IdeActions.ACTION_STOP_PROGRAM);
- actionGroup.add(stopAction);
+ actionGroup.add(ActionManager.getInstance().getAction(IdeActions.ACTION_STOP_PROGRAM));
if (myExecutionResult instanceof DefaultExecutionResult) {
actionGroup.addAll(((DefaultExecutionResult)myExecutionResult).getAdditionalStopActions());
}
actionGroup.addAll(myExecutionResult.getActions());
- for (final AnAction anAction : myRunnerActions) {
+ for (AnAction anAction : myRunnerActions) {
if (anAction != null) {
actionGroup.add(anAction);
}
@@ -238,9 +215,9 @@ public class RunContentBuilder extends LogConsoleManagerBase {
actionGroup.add(myUi.getOptions().getLayoutActions());
actionGroup.addSeparator();
actionGroup.add(PinToolwindowTabAction.getPinAction());
- actionGroup.add(new CloseAction(myExecutor, contentDescriptor, getProject()));
+ actionGroup.add(new CloseAction(getEnvironment().getExecutor(), contentDescriptor, getProject()));
final String helpId = contentDescriptor.getHelpId();
- actionGroup.add(new ContextHelpAction(helpId != null ? helpId : myExecutor.getHelpId()));
+ actionGroup.add(new ContextHelpAction(helpId != null ? helpId : getEnvironment().getExecutor().getHelpId()));
return actionGroup;
}
@@ -252,14 +229,10 @@ public class RunContentBuilder extends LogConsoleManagerBase {
/**
* @param reuseContent see {@link RunContentDescriptor#myContent}
*/
- public RunContentDescriptor showRunContent(final RunContentDescriptor reuseContent) {
- final RunContentDescriptor descriptor = createDescriptor();
- if (reuseContent != null) {
- descriptor.setAttachedContent(reuseContent.getAttachedContent());
- if (reuseContent.isReuseToolWindowActivation()) {
- descriptor.setActivateToolWindowWhenAdded(reuseContent.isActivateToolWindowWhenAdded());
- }
- }
+ public RunContentDescriptor showRunContent(@Nullable RunContentDescriptor reuseContent) {
+ RunContentDescriptor descriptor = createDescriptor();
+ RunContentManagerImpl.copyContentAndBehavior(descriptor, reuseContent);
+ myRunContentDescriptor = descriptor;
return descriptor;
}
@@ -273,21 +246,6 @@ public class RunContentBuilder extends LogConsoleManagerBase {
return AllIcons.Debugger.Console;
}
- private static class MyRunContentDescriptor extends RunContentDescriptor {
- private final Disposable myAdditionalDisposable;
-
- public MyRunContentDescriptor(final RunProfile profile, final ExecutionResult executionResult, final JComponent component, @NotNull Disposable additionalDisposable) {
- super(executionResult.getExecutionConsole(), executionResult.getProcessHandler(), component, profile.getName(), profile.getIcon());
- myAdditionalDisposable = additionalDisposable;
- }
-
- @Override
- public void dispose() {
- Disposer.dispose(myAdditionalDisposable);
- super.dispose();
- }
- }
-
public static class ConsoleToFrontListener implements ConsoleViewImpl.ChangeListener {
@NotNull private final RunConfigurationBase myRunConfigurationBase;
@NotNull private final Project myProject;
diff --git a/platform/lang-impl/src/com/intellij/execution/runners/RunTab.java b/platform/lang-impl/src/com/intellij/execution/runners/RunTab.java
new file mode 100644
index 000000000000..2edc2098ce15
--- /dev/null
+++ b/platform/lang-impl/src/com/intellij/execution/runners/RunTab.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright 2000-2014 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.diagnostic.logging.LogConsoleManagerBase;
+import com.intellij.diagnostic.logging.LogFilesManager;
+import com.intellij.diagnostic.logging.OutputFileUtil;
+import com.intellij.execution.configurations.RunConfigurationBase;
+import com.intellij.execution.configurations.RunProfile;
+import com.intellij.execution.configurations.SearchScopeProvider;
+import com.intellij.execution.process.ProcessHandler;
+import com.intellij.execution.ui.ExecutionConsole;
+import com.intellij.execution.ui.RunContentDescriptor;
+import com.intellij.execution.ui.RunnerLayoutUi;
+import com.intellij.openapi.actionSystem.DataProvider;
+import com.intellij.openapi.actionSystem.LangDataKeys;
+import com.intellij.openapi.project.Project;
+import com.intellij.psi.search.GlobalSearchScope;
+import org.jetbrains.annotations.NonNls;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+public abstract class RunTab extends LogConsoleManagerBase implements DataProvider {
+ @NotNull
+ protected final RunnerLayoutUi myUi;
+ protected final LogFilesManager myManager;
+ protected RunContentDescriptor myRunContentDescriptor;
+
+ protected RunTab(@NotNull ExecutionEnvironment environment, @NotNull String runnerType) {
+ this(environment.getProject(),
+ SearchScopeProvider.createSearchScope(environment.getProject(), environment.getRunProfile()),
+ runnerType,
+ environment.getExecutor().getId(),
+ environment.getRunProfile().getName());
+
+ setEnvironment(environment);
+ }
+
+ protected RunTab(@NotNull Project project, @NotNull GlobalSearchScope searchScope, @NotNull String runnerType, @NotNull String runnerTitle, @NotNull String sessionName) {
+ super(project, searchScope);
+
+ myManager = new LogFilesManager(project, this, this);
+
+ myUi = RunnerLayoutUi.Factory.getInstance(getProject()).create(runnerType, runnerTitle, sessionName, this);
+ myUi.getContentManager().addDataProvider(this);
+ }
+
+ @Nullable
+ @Override
+ public Object getData(@NonNls String dataId) {
+ if (LangDataKeys.RUN_PROFILE.is(dataId)) {
+ ExecutionEnvironment environment = getEnvironment();
+ return environment == null ? null : environment.getRunProfile();
+ }
+ else if (LangDataKeys.EXECUTION_ENVIRONMENT.is(dataId)) {
+ return getEnvironment();
+ }
+ else if (LangDataKeys.RUN_CONTENT_DESCRIPTOR.is(dataId)) {
+ return myRunContentDescriptor;
+ }
+ return null;
+ }
+
+ @Override
+ public final void setEnvironment(@NotNull ExecutionEnvironment environment) {
+ super.setEnvironment(environment);
+
+ RunProfile profile = environment.getRunProfile();
+ if (profile instanceof RunConfigurationBase) {
+ myManager.registerFileMatcher((RunConfigurationBase)profile);
+ }
+ }
+
+ protected final void initLogConsoles(@NotNull RunProfile runConfiguration, @Nullable ProcessHandler processHandler, @Nullable ExecutionConsole console) {
+ if (runConfiguration instanceof RunConfigurationBase && processHandler != null) {
+ RunConfigurationBase configuration = (RunConfigurationBase)runConfiguration;
+ myManager.initLogConsoles(configuration, processHandler);
+ OutputFileUtil.attachDumpListener(configuration, processHandler, console);
+ }
+ }
+}
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 73ec463954cd..c9dae095522c 100644
--- a/platform/lang-impl/src/com/intellij/execution/ui/RunContentManagerImpl.java
+++ b/platform/lang-impl/src/com/intellij/execution/ui/RunContentManagerImpl.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2013 JetBrains s.r.o.
+ * Copyright 2000-2014 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.
@@ -46,12 +46,14 @@ import com.intellij.openapi.wm.ToolWindowAnchor;
import com.intellij.openapi.wm.ToolWindowManager;
import com.intellij.openapi.wm.ex.ToolWindowManagerAdapter;
import com.intellij.openapi.wm.ex.ToolWindowManagerEx;
+import com.intellij.ui.AppUIUtil;
import com.intellij.ui.content.*;
import com.intellij.ui.docking.DockManager;
+import com.intellij.util.SmartList;
import com.intellij.util.concurrency.Semaphore;
import com.intellij.util.containers.ContainerUtil;
-import com.intellij.util.containers.HashMap;
-import com.intellij.util.messages.Topic;
+import gnu.trove.THashMap;
+import gnu.trove.THashSet;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -59,60 +61,59 @@ import javax.swing.*;
import java.util.*;
public class RunContentManagerImpl implements RunContentManager, Disposable {
- public static final Topic<RunContentWithExecutorListener> RUN_CONTENT_TOPIC =
- Topic.create("Run Content", RunContentWithExecutorListener.class);
public static final Key<Boolean> ALWAYS_USE_DEFAULT_STOPPING_BEHAVIOUR_KEY = Key.create("ALWAYS_USE_DEFAULT_STOPPING_BEHAVIOUR_KEY");
- private static final Logger LOG = Logger.getInstance("#com.intellij.execution.ui.RunContentManagerImpl");
- private static final Key<RunContentDescriptor> DESCRIPTOR_KEY = new Key<RunContentDescriptor>("Descriptor");
+ private static final Logger LOG = Logger.getInstance(RunContentManagerImpl.class);
+ private static final Key<RunContentDescriptor> DESCRIPTOR_KEY = Key.create("Descriptor");
private final Project myProject;
- private DockableGridContainerFactory myContentFactory;
- private final Map<String, ContentManager> myToolwindowIdToContentManagerMap = new HashMap<String, ContentManager>();
+ private final Map<String, ContentManager> myToolwindowIdToContentManagerMap = new THashMap<String, ContentManager>();
- private final Map<RunContentListener, Disposable> myListeners = new HashMap<RunContentListener, Disposable>();
- private final LinkedList<String> myToolwindowIdZbuffer = new LinkedList<String>();
+ private final Map<RunContentListener, Disposable> myListeners = new THashMap<RunContentListener, Disposable>();
+ private final LinkedList<String> myToolwindowIdZBuffer = new LinkedList<String>();
- public RunContentManagerImpl(Project project, DockManager dockManager) {
+ public RunContentManagerImpl(@NotNull Project project, @NotNull DockManager dockManager) {
myProject = project;
- myContentFactory = new DockableGridContainerFactory();
- dockManager.register(DockableGridContainerFactory.TYPE, myContentFactory);
- Disposer.register(myProject, myContentFactory);
+ DockableGridContainerFactory containerFactory = new DockableGridContainerFactory();
+ dockManager.register(DockableGridContainerFactory.TYPE, containerFactory);
+ Disposer.register(myProject, containerFactory);
+
+ AppUIUtil.invokeOnEdt(new Runnable() {
+ @Override
+ public void run() {
+ init();
+ }
+ }, myProject.getDisposed());
}
- public void init() {
- final Executor[] executors = ExecutorRegistry.getInstance().getRegisteredExecutors();
- for (Executor executor : executors) {
- registerToolwindow(executor);
+ // must be called on EDT
+ private void init() {
+ ToolWindowManagerEx toolWindowManager = ToolWindowManagerEx.getInstanceEx(myProject);
+ if (toolWindowManager == null) {
+ return;
}
- if (ToolWindowManager.getInstance(myProject) == null) return;
+ for (Executor executor : ExecutorRegistry.getInstance().getRegisteredExecutors()) {
+ registerToolwindow(executor, toolWindowManager);
+ }
- // To ensure ToolwindowManager had already initialized in its projectOpened.
- SwingUtilities.invokeLater(new Runnable() {
+ toolWindowManager.addToolWindowManagerListener(new ToolWindowManagerAdapter() {
@Override
- public void run() {
- if (myProject.isDisposed()) return;
- ((ToolWindowManagerEx)ToolWindowManager.getInstance(myProject)).addToolWindowManagerListener(new ToolWindowManagerAdapter() {
- @Override
- public void stateChanged() {
- if (myProject.isDisposed()) return;
-
- ToolWindowManager toolWindowManager = ToolWindowManager.getInstance(myProject);
-
- Set<String> currentWindows = new HashSet<String>();
- String[] toolWindowIds = toolWindowManager.getToolWindowIds();
+ public void stateChanged() {
+ if (myProject.isDisposed()) {
+ return;
+ }
- ContainerUtil.addAll(currentWindows, toolWindowIds);
- myToolwindowIdZbuffer.retainAll(currentWindows);
+ ToolWindowManager toolWindowManager = ToolWindowManager.getInstance(myProject);
+ Set<String> currentWindows = new THashSet<String>();
+ ContainerUtil.addAll(currentWindows, toolWindowManager.getToolWindowIds());
+ myToolwindowIdZBuffer.retainAll(currentWindows);
- final String activeToolWindowId = toolWindowManager.getActiveToolWindowId();
- if (activeToolWindowId != null) {
- if (myToolwindowIdZbuffer.remove(activeToolWindowId)) {
- myToolwindowIdZbuffer.addFirst(activeToolWindowId);
- }
- }
+ final String activeToolWindowId = toolWindowManager.getActiveToolWindowId();
+ if (activeToolWindowId != null) {
+ if (myToolwindowIdZBuffer.remove(activeToolWindowId)) {
+ myToolwindowIdZBuffer.addFirst(activeToolWindowId);
}
- });
+ }
}
});
}
@@ -121,25 +122,15 @@ public class RunContentManagerImpl implements RunContentManager, Disposable {
public void dispose() {
}
- private void unregisterToolwindow(final String id) {
- final ContentManager manager = myToolwindowIdToContentManagerMap.get(id);
- manager.removeAllContents(true);
- myToolwindowIdToContentManagerMap.remove(id);
- myToolwindowIdZbuffer.remove(id);
- }
-
- private void registerToolwindow(@NotNull final Executor executor) {
+ private void registerToolwindow(@NotNull final Executor executor, @NotNull ToolWindowManagerEx toolWindowManager) {
final String toolWindowId = executor.getToolWindowId();
- final ToolWindowManager toolWindowManager = ToolWindowManager.getInstance(myProject);
- if (toolWindowManager == null) return; //headless environment
if (toolWindowManager.getToolWindow(toolWindowId) != null) {
return;
}
- final ToolWindow toolWindow = toolWindowManager.registerToolWindow(toolWindowId, true, ToolWindowAnchor.BOTTOM, this, true);
-
+ ToolWindow toolWindow = toolWindowManager.registerToolWindow(toolWindowId, true, ToolWindowAnchor.BOTTOM, this, true);
final ContentManager contentManager = toolWindow.getContentManager();
- class MyDataProvider implements DataProvider {
+ contentManager.addDataProvider(new DataProvider() {
private int myInsideGetData = 0;
@Override
@@ -157,31 +148,30 @@ public class RunContentManagerImpl implements RunContentManager, Disposable {
myInsideGetData--;
}
}
- }
- contentManager.addDataProvider(new MyDataProvider());
+ });
toolWindow.setIcon(executor.getToolWindowIcon());
new ContentManagerWatcher(toolWindow, contentManager);
contentManager.addContentManagerListener(new ContentManagerAdapter() {
@Override
public void selectionChanged(final ContentManagerEvent event) {
- final Content content = event.getContent();
- final RunContentDescriptor descriptor = content != null ? getRunContentDescriptorByContent(content) : null;
- getSyncPublisher().contentSelected(descriptor, executor);
+ Content content = event.getContent();
+ getSyncPublisher().contentSelected(content == null ? null : getRunContentDescriptorByContent(content), executor);
}
});
myToolwindowIdToContentManagerMap.put(toolWindowId, contentManager);
Disposer.register(contentManager, new Disposable() {
@Override
public void dispose() {
- unregisterToolwindow(toolWindowId);
+ myToolwindowIdToContentManagerMap.remove(toolWindowId).removeAllContents(true);
+ myToolwindowIdZBuffer.remove(toolWindowId);
}
});
- myToolwindowIdZbuffer.addLast(toolWindowId);
+ myToolwindowIdZBuffer.addLast(toolWindowId);
}
private RunContentWithExecutorListener getSyncPublisher() {
- return myProject.getMessageBus().syncPublisher(RUN_CONTENT_TOPIC);
+ return myProject.getMessageBus().syncPublisher(TOPIC);
}
@Override
@@ -193,24 +183,19 @@ public class RunContentManagerImpl implements RunContentManager, Disposable {
toFrontRunContent(requestor, descriptor);
}
-
@Override
public void toFrontRunContent(final Executor requestor, final RunContentDescriptor descriptor) {
ApplicationManager.getApplication().invokeLater(new Runnable() {
@Override
public void run() {
- final ContentManager contentManager = getContentManagerForRunner(requestor);
-
- final Content content = getRunContentByDescriptor(contentManager, descriptor);
-
- if (contentManager != null && content != null) {
+ ContentManager contentManager = getContentManagerForRunner(requestor);
+ Content content = getRunContentByDescriptor(contentManager, descriptor);
+ if (content != null) {
contentManager.setSelectedContent(content);
-
- final ToolWindow toolWindow = ToolWindowManager.getInstance(myProject).getToolWindow(requestor.getToolWindowId());
- toolWindow.show(null);
+ ToolWindowManager.getInstance(myProject).getToolWindow(requestor.getToolWindowId()).show(null);
}
}
- });
+ }, myProject.getDisposed());
}
@Override
@@ -218,37 +203,25 @@ public class RunContentManagerImpl implements RunContentManager, Disposable {
ApplicationManager.getApplication().invokeLater(new Runnable() {
@Override
public void run() {
- if (!myProject.isDisposed()) {
- final String toolWindowId = executor.getToolWindowId();
- final ToolWindow toolWindow = ToolWindowManager.getInstance(myProject).getToolWindow(toolWindowId);
- if (toolWindow != null) {
- toolWindow.hide(null);
- }
+ ToolWindow toolWindow = ToolWindowManager.getInstance(myProject).getToolWindow(executor.getToolWindowId());
+ if (toolWindow != null) {
+ toolWindow.hide(null);
}
}
- });
+ }, myProject.getDisposed());
}
@Override
@Nullable
public RunContentDescriptor getSelectedContent(final Executor executor) {
- final ContentManager contentManager = getContentManagerForRunner(executor);
- if (contentManager != null) {
- final Content selectedContent = contentManager.getSelectedContent();
- if (selectedContent != null) {
- final RunContentDescriptor runContentDescriptorByContent = getRunContentDescriptorByContent(selectedContent);
- if (runContentDescriptorByContent != null) {
- return runContentDescriptorByContent;
- }
- }
- }
- return null;
+ final Content selectedContent = getContentManagerForRunner(executor).getSelectedContent();
+ return selectedContent != null ? getRunContentDescriptorByContent(selectedContent) : null;
}
@Override
@Nullable
public RunContentDescriptor getSelectedContent() {
- for (String activeWindow : myToolwindowIdZbuffer) {
+ for (String activeWindow : myToolwindowIdZBuffer) {
final ContentManager contentManager = myToolwindowIdToContentManagerMap.get(activeWindow);
if (contentManager == null) {
continue;
@@ -280,32 +253,30 @@ public class RunContentManagerImpl implements RunContentManager, Disposable {
}
@Override
- public void showRunContent(@NotNull final Executor executor, final RunContentDescriptor descriptor) {
- showRunContent(executor, descriptor, descriptor != null ? descriptor.getExecutionId() : 0L);
+ public void showRunContent(@NotNull Executor executor, @NotNull RunContentDescriptor descriptor) {
+ showRunContent(executor, descriptor, descriptor.getExecutionId());
}
- public void showRunContent(@NotNull final Executor executor, final RunContentDescriptor descriptor, long executionId) {
- if (ApplicationManager.getApplication().isUnitTestMode()) return;
+ public void showRunContent(@NotNull final Executor executor, @NotNull final RunContentDescriptor descriptor, long executionId) {
+ if (ApplicationManager.getApplication().isUnitTestMode()) {
+ return;
+ }
final ContentManager contentManager = getContentManagerForRunner(executor);
- RunContentDescriptor oldDescriptor =
- chooseReuseContentForDescriptor(contentManager, descriptor, executionId, descriptor != null ? descriptor.getDisplayName() : null);
-
+ RunContentDescriptor oldDescriptor = chooseReuseContentForDescriptor(contentManager, descriptor, executionId, descriptor.getDisplayName());
final Content content;
-
- Content oldAttachedContent = oldDescriptor != null ? oldDescriptor.getAttachedContent() : null;
- if (oldDescriptor != null) {
- content = oldAttachedContent;
- getSyncPublisher().contentRemoved(oldDescriptor, executor);
- Disposer.dispose(oldDescriptor); // is of the same category, can be reused
- }
- else if (oldAttachedContent == null || !oldAttachedContent.isValid() /*|| oldAttachedContent.getUserData(MARKED_TO_BE_REUSED) != null */) {
+ if (oldDescriptor == null) {
content = createNewContent(contentManager, descriptor, executor);
- final Icon icon = descriptor.getIcon();
+ Icon icon = descriptor.getIcon();
content.setIcon(icon == null ? executor.getToolWindowIcon() : icon);
- } else {
- content = oldAttachedContent;
}
+ else {
+ content = oldDescriptor.getAttachedContent();
+ LOG.assertTrue(content != null);
+ getSyncPublisher().contentRemoved(oldDescriptor, executor);
+ Disposer.dispose(oldDescriptor); // is of the same category, can be reused
+ }
+
content.setExecutionId(executionId);
content.setComponent(descriptor.getComponent());
content.setPreferredFocusedComponent(descriptor.getPreferredFocusComputable());
@@ -353,10 +324,10 @@ public class RunContentManagerImpl implements RunContentManager, Disposable {
if (!descriptor.isActivateToolWindowWhenAdded()) {
return;
}
+
ApplicationManager.getApplication().invokeLater(new Runnable() {
@Override
public void run() {
- if (myProject.isDisposed()) return;
ToolWindow window = ToolWindowManager.getInstance(myProject).getToolWindow(executor.getToolWindowId());
// let's activate tool window, but don't move focus
//
@@ -367,14 +338,17 @@ public class RunContentManagerImpl implements RunContentManager, Disposable {
descriptor.getPreferredFocusComputable();
window.activate(null, descriptor.isAutoFocusContent(), descriptor.isAutoFocusContent());
}
- });
+ }, myProject.getDisposed());
}
@Override
@Nullable
@Deprecated
public RunContentDescriptor getReuseContent(final Executor requestor, DataContext dataContext) {
- if (ApplicationManager.getApplication().isUnitTestMode()) return null;
+ if (ApplicationManager.getApplication().isUnitTestMode()) {
+ return null;
+ }
+ //noinspection deprecation
return getReuseContent(requestor, GenericProgramRunner.CONTENT_TO_REUSE_DATA_KEY.getData(dataContext));
}
@@ -382,11 +356,13 @@ public class RunContentManagerImpl implements RunContentManager, Disposable {
@Nullable
@Deprecated
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, contentToReuse, 0L, null);
+ if (ApplicationManager.getApplication().isUnitTestMode()) {
+ return null;
+ }
+ if (contentToReuse != null) {
+ return contentToReuse;
+ }
+ return chooseReuseContentForDescriptor(getContentManagerForRunner(requestor), null, 0L, null);
}
@Nullable
@@ -400,10 +376,12 @@ public class RunContentManagerImpl implements RunContentManager, Disposable {
public RunContentDescriptor getReuseContent(@NotNull ExecutionEnvironment executionEnvironment) {
if (ApplicationManager.getApplication().isUnitTestMode()) return null;
RunContentDescriptor contentToReuse = executionEnvironment.getContentToReuse();
- if (contentToReuse != null) return contentToReuse;
+ if (contentToReuse != null) {
+ return contentToReuse;
+ }
final ContentManager contentManager = getContentManagerForRunner(executionEnvironment.getExecutor());
- return chooseReuseContentForDescriptor(contentManager, contentToReuse, executionEnvironment.getExecutionId(),
+ return chooseReuseContentForDescriptor(contentManager, null, executionEnvironment.getExecutionId(),
executionEnvironment.toString());
}
@@ -413,14 +391,21 @@ public class RunContentManagerImpl implements RunContentManager, Disposable {
}
@Override
- public void showRunContent(@NotNull final Executor info, RunContentDescriptor descriptor, RunContentDescriptor contentToReuse) {
+ public void showRunContent(@NotNull Executor info, @NotNull RunContentDescriptor descriptor, @Nullable RunContentDescriptor contentToReuse) {
+ copyContentAndBehavior(descriptor, contentToReuse);
+ showRunContent(info, descriptor, descriptor.getExecutionId());
+ }
+
+ public static void copyContentAndBehavior(@NotNull RunContentDescriptor descriptor, @Nullable RunContentDescriptor contentToReuse) {
if (contentToReuse != null) {
- final Content attachedContent = contentToReuse.getAttachedContent();
- if (attachedContent.getManager() != null) {
+ Content attachedContent = contentToReuse.getAttachedContent();
+ if (attachedContent != null && attachedContent.isValid()) {
descriptor.setAttachedContent(attachedContent);
}
+ if (contentToReuse.isReuseToolWindowActivation()) {
+ descriptor.setActivateToolWindowWhenAdded(contentToReuse.isActivateToolWindowWhenAdded());
+ }
}
- showRunContent(info, descriptor, descriptor != null ? descriptor.getExecutionId(): 0L);
}
@Nullable
@@ -436,7 +421,9 @@ public class RunContentManagerImpl implements RunContentManager, Disposable {
}
//Stage two: try to get content from descriptor itself
final Content attachedContent = descriptor.getAttachedContent();
- if (attachedContent != null && attachedContent.isValid() && contentManager.getIndexOfContent(attachedContent) != -1) content = attachedContent;
+ if (attachedContent != null && attachedContent.isValid() && contentManager.getIndexOfContent(attachedContent) != -1) {
+ content = attachedContent;
+ }
}
//Stage three: choose the content with name we prefer
if (content == null) {
@@ -486,6 +473,7 @@ public class RunContentManagerImpl implements RunContentManager, Disposable {
if (contentManager == null) {
LOG.error("Runner " + executor.getId() + " is not registered");
}
+ //noinspection ConstantConditions
return contentManager;
}
@@ -499,26 +487,20 @@ public class RunContentManagerImpl implements RunContentManager, Disposable {
return content;
}
- private static boolean isTerminated(@NotNull final Content content) {
- final RunContentDescriptor descriptor = getRunContentDescriptorByContent(content);
- if (descriptor == null) {
- return true;
- }
- else {
- final ProcessHandler processHandler = descriptor.getProcessHandler();
- return processHandler == null || processHandler.isProcessTerminated();
- }
+ private static boolean isTerminated(@NotNull Content content) {
+ RunContentDescriptor descriptor = getRunContentDescriptorByContent(content);
+ ProcessHandler processHandler = descriptor == null ? null : descriptor.getProcessHandler();
+ return processHandler == null || processHandler.isProcessTerminated();
}
@Nullable
- public static RunContentDescriptor getRunContentDescriptorByContent(@NotNull final Content content) {
+ private static RunContentDescriptor getRunContentDescriptorByContent(@NotNull Content content) {
return content.getUserData(DESCRIPTOR_KEY);
}
-
@Override
@Nullable
- public ToolWindow getToolWindowByDescriptor(@NotNull final RunContentDescriptor descriptor) {
+ public ToolWindow getToolWindowByDescriptor(@NotNull RunContentDescriptor descriptor) {
for (Map.Entry<String, ContentManager> entry : myToolwindowIdToContentManagerMap.entrySet()) {
if (getRunContentByDescriptor(entry.getValue(), descriptor) != null) {
return ToolWindowManager.getInstance(myProject).getToolWindow(entry.getKey());
@@ -528,9 +510,8 @@ public class RunContentManagerImpl implements RunContentManager, Disposable {
}
@Nullable
- private static Content getRunContentByDescriptor(final ContentManager contentManager, final RunContentDescriptor descriptor) {
- final Content[] contents = contentManager.getContents();
- for (final Content content : contents) {
+ private static Content getRunContentByDescriptor(@NotNull ContentManager contentManager, @NotNull RunContentDescriptor descriptor) {
+ for (Content content : contentManager.getContents()) {
if (descriptor.equals(content.getUserData(DESCRIPTOR_KEY))) {
return content;
}
@@ -539,18 +520,18 @@ public class RunContentManagerImpl implements RunContentManager, Disposable {
}
@Override
- public void addRunContentListener(final RunContentListener listener, final Executor executor) {
+ public void addRunContentListener(@NotNull final RunContentListener listener, final Executor executor) {
final Disposable disposable = Disposer.newDisposable();
- myProject.getMessageBus().connect(disposable).subscribe(RUN_CONTENT_TOPIC, new RunContentWithExecutorListener() {
+ myProject.getMessageBus().connect(disposable).subscribe(TOPIC, new RunContentWithExecutorListener() {
@Override
- public void contentSelected(RunContentDescriptor descriptor, @NotNull Executor executor2) {
+ public void contentSelected(@Nullable RunContentDescriptor descriptor, @NotNull Executor executor2) {
if (executor2.equals(executor)) {
listener.contentSelected(descriptor);
}
}
@Override
- public void contentRemoved(RunContentDescriptor descriptor, @NotNull Executor executor2) {
+ public void contentRemoved(@Nullable RunContentDescriptor descriptor, @NotNull Executor executor2) {
if (executor2.equals(executor)) {
listener.contentRemoved(descriptor);
}
@@ -560,16 +541,16 @@ public class RunContentManagerImpl implements RunContentManager, Disposable {
}
@Override
- public void addRunContentListener(final RunContentListener listener) {
+ public void addRunContentListener(@NotNull final RunContentListener listener) {
final Disposable disposable = Disposer.newDisposable();
- myProject.getMessageBus().connect(disposable).subscribe(RUN_CONTENT_TOPIC, new RunContentWithExecutorListener() {
+ myProject.getMessageBus().connect(disposable).subscribe(TOPIC, new RunContentWithExecutorListener() {
@Override
- public void contentSelected(RunContentDescriptor descriptor, @NotNull Executor executor) {
+ public void contentSelected(@Nullable RunContentDescriptor descriptor, @NotNull Executor executor) {
listener.contentSelected(descriptor);
}
@Override
- public void contentRemoved(RunContentDescriptor descriptor, @NotNull Executor executor) {
+ public void contentRemoved(@Nullable RunContentDescriptor descriptor, @NotNull Executor executor) {
listener.contentRemoved(descriptor);
}
});
@@ -582,18 +563,16 @@ public class RunContentManagerImpl implements RunContentManager, Disposable {
if (myToolwindowIdToContentManagerMap.isEmpty()) {
return Collections.emptyList();
}
- final String[] ids = myToolwindowIdToContentManagerMap.keySet().toArray(new String[myToolwindowIdToContentManagerMap.size()]);
- final List<RunContentDescriptor> descriptors = new ArrayList<RunContentDescriptor>();
- for (String id : ids) {
- final ContentManager contentManager = myToolwindowIdToContentManagerMap.get(id);
- for (final Content content : contentManager.getContents()) {
- final RunContentDescriptor descriptor = getRunContentDescriptorByContent(content);
+
+ List<RunContentDescriptor> descriptors = new SmartList<RunContentDescriptor>();
+ for (String id : myToolwindowIdToContentManagerMap.keySet()) {
+ for (Content content : myToolwindowIdToContentManagerMap.get(id).getContents()) {
+ RunContentDescriptor descriptor = getRunContentDescriptorByContent(content);
if (descriptor != null) {
descriptors.add(descriptor);
}
}
}
-
return descriptors;
}
@@ -607,10 +586,9 @@ public class RunContentManagerImpl implements RunContentManager, Disposable {
@Nullable
private RunContentDescriptor getDescriptorBy(ProcessHandler handler, Executor runnerInfo) {
- ContentManager contentManager = getContentManagerForRunner(runnerInfo);
- Content[] contents = contentManager.getContents();
- for (Content content : contents) {
- RunContentDescriptor runContentDescriptor = content.getUserData(DESCRIPTOR_KEY);
+ for (Content content : getContentManagerForRunner(runnerInfo).getContents()) {
+ RunContentDescriptor runContentDescriptor = getRunContentDescriptorByContent(content);
+ assert runContentDescriptor != null;
if (runContentDescriptor.getProcessHandler() == handler) {
return runContentDescriptor;
}
@@ -642,12 +620,11 @@ public class RunContentManagerImpl implements RunContentManager, Disposable {
final Content content = myContent;
try {
- final RunContentDescriptor descriptor = getRunContentDescriptorByContent(content);
-
+ RunContentDescriptor descriptor = getRunContentDescriptorByContent(content);
getSyncPublisher().contentRemoved(descriptor, myExecutor);
-
- if (descriptor != null)
+ if (descriptor != null) {
Disposer.dispose(descriptor);
+ }
}
finally {
content.getManager().removeContentManagerListener(this);
@@ -699,7 +676,6 @@ public class RunContentManagerImpl implements RunContentManager, Disposable {
private boolean closeQuery(boolean modal) {
final RunContentDescriptor descriptor = getRunContentDescriptorByContent(myContent);
-
if (descriptor == null) {
return true;
}
@@ -709,6 +685,7 @@ public class RunContentManagerImpl implements RunContentManager, Disposable {
return true;
}
final boolean destroyProcess;
+ //noinspection deprecation
if (processHandler.isSilentlyDestroyOnClose() || Boolean.TRUE.equals(processHandler.getUserData(ProcessHandler.SILENTLY_DESTROY_ON_CLOSE))) {
destroyProcess = true;
}
@@ -786,7 +763,9 @@ public class RunContentManagerImpl implements RunContentManager, Disposable {
break;
}
try {
+ //noinspection SynchronizeOnThis
synchronized (this) {
+ //noinspection SynchronizeOnThis
wait(2000L);
}
}
diff --git a/platform/lang-impl/src/com/intellij/execution/ui/RunContentWithExecutorListener.java b/platform/lang-impl/src/com/intellij/execution/ui/RunContentWithExecutorListener.java
deleted file mode 100644
index 8231f0d1d1d8..000000000000
--- a/platform/lang-impl/src/com/intellij/execution/ui/RunContentWithExecutorListener.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright 2000-2010 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.ui;
-
-import com.intellij.execution.Executor;
-import org.jetbrains.annotations.NotNull;
-
-/**
- * @author nik
- */
-public interface RunContentWithExecutorListener {
- void contentSelected(RunContentDescriptor descriptor, @NotNull Executor executor);
- void contentRemoved(RunContentDescriptor descriptor, @NotNull Executor executor);
-}
diff --git a/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/GridCellImpl.java b/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/GridCellImpl.java
index b70d37a79e41..301cceee7e19 100644
--- a/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/GridCellImpl.java
+++ b/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/GridCellImpl.java
@@ -70,6 +70,7 @@ public class GridCellImpl implements GridCell {
myPlaceInGrid = placeInGrid;
myPlaceholder = placeholder;
myTabs = new JBTabsImpl(myContext.getProject(), myContext.getActionManager(), myContext.getFocusManager(), container) {
+ @SuppressWarnings("UseJBColor")
@Override
protected Color getFocusedTopFillColor() {
return UIUtil.isUnderDarcula() ? ColorUtil.toAlpha(new Color(0x1E2533), 100) : new Color(202, 211, 227);
@@ -88,11 +89,13 @@ public class GridCellImpl implements GridCell {
super.paintBorder(g2d, shape, borderColor);
}
+ @SuppressWarnings("UseJBColor")
@Override
protected Color getFocusedBottomFillColor() {
return UIUtil.isUnderDarcula() ? new Color(0x1E2533) : new Color(0xc2cbdb);
}
+ @SuppressWarnings("UseJBColor")
@Override
public Color getBackground() {
return UIUtil.isUnderDarcula() ? new Color(0x27292A) : super.getBackground();
@@ -239,8 +242,6 @@ public class GridCellImpl implements GridCell {
}
private TabInfo createTabInfoFor(Content content) {
- final JComponent c = content.getComponent();
-
final TabInfo tabInfo = updatePresentation(new TabInfo(new ProviderWrapper(content, myContext)), content)
.setObject(content)
.setPreferredFocusableComponent(content.getPreferredFocusableComponent())
@@ -257,7 +258,10 @@ public class GridCellImpl implements GridCell {
@Nullable
private static TabInfo updatePresentation(TabInfo info, Content content) {
- if (info == null) return info;
+ if (info == null) {
+ return null;
+ }
+
return info.
setIcon(content.getIcon()).
setText(content.getDisplayName()).
@@ -309,7 +313,6 @@ public class GridCellImpl implements GridCell {
}
private static class ProviderWrapper extends NonOpaquePanel implements DataProvider {
-
Content myContent;
ViewContext myContext;
diff --git a/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/JBRunnerTabs.java b/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/JBRunnerTabs.java
index 8ca416bd5427..d680e8a7e173 100644
--- a/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/JBRunnerTabs.java
+++ b/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/JBRunnerTabs.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2012 JetBrains s.r.o.
+ * Copyright 2000-2014 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.
@@ -43,7 +43,7 @@ import java.util.Map;
*/
public class
JBRunnerTabs extends JBTabsImpl {
- public JBRunnerTabs(@Nullable Project project, ActionManager actionManager, IdeFocusManager focusManager, @NotNull Disposable parent) {
+ public JBRunnerTabs(@Nullable Project project, @NotNull ActionManager actionManager, IdeFocusManager focusManager, @NotNull Disposable parent) {
super(project, actionManager, focusManager, parent);
}
diff --git a/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/RunnerContentUi.java b/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/RunnerContentUi.java
index 821d9dbd6bc3..b8225b0c238b 100644
--- a/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/RunnerContentUi.java
+++ b/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/RunnerContentUi.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2012 JetBrains s.r.o.
+ * Copyright 2000-2014 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.
@@ -89,7 +89,7 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac
private ContentManager myManager;
private final RunnerLayout myLayoutSettings;
- private final ActionManager myActionManager;
+ @NotNull private final ActionManager myActionManager;
private final String mySessionName;
private final MyComponent myComponent = new MyComponent();
@@ -99,7 +99,7 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac
JBRunnerTabs myTabs;
private final Comparator<TabInfo> myTabsComparator = new Comparator<TabInfo>() {
@Override
- public int compare(final TabInfo o1, final TabInfo o2) {
+ public int compare(@NotNull final TabInfo o1, @NotNull final TabInfo o2) {
//noinspection ConstantConditions
TabImpl tab1 = getTabFor(o1);
TabImpl tab2 = getTabFor(o2);
@@ -132,7 +132,7 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac
private final Map<String, LayoutAttractionPolicy> myConditionAttractions = new HashMap<String, LayoutAttractionPolicy>();
private ActionGroup myTabPopupActions;
- private ActionGroup myAdditonalFocusActions;
+ private ActionGroup myAdditionalFocusActions;
private final ActionCallback myInitialized = new ActionCallback();
private boolean myToDisposeRemovedContent = true;
@@ -149,7 +149,7 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac
private final CopyOnWriteArraySet<Listener> myDockingListeners = new CopyOnWriteArraySet<Listener>();
private final Set<RunnerContentUi> myChildren = new TreeSet<RunnerContentUi>(new Comparator<RunnerContentUi>() {
@Override
- public int compare(RunnerContentUi o1, RunnerContentUi o2) {
+ public int compare(@NotNull RunnerContentUi o1, @NotNull RunnerContentUi o2) {
return o1.myWindow - o2.myWindow;
}
});
@@ -164,7 +164,7 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac
@NotNull String sessionName) {
myProject = project;
myRunnerUi = ui;
- myLayoutSettings = settings;
+ myLayoutSettings = settings;
myActionManager = actionManager;
mySessionName = sessionName;
myFocusManager = focusManager;
@@ -190,7 +190,7 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac
}
public void setAdditionalFocusActions(final ActionGroup group) {
- myAdditonalFocusActions = group;
+ myAdditionalFocusActions = group;
rebuildTabPopup();
}
@@ -269,7 +269,7 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac
});
myTabs.addTabMouseListener(new MouseAdapter() {
@Override
- public void mousePressed(MouseEvent e) {
+ public void mousePressed(@NotNull MouseEvent e) {
if (UIUtil.isCloseClick(e)) {
final TabInfo tabInfo = myTabs.findInfo(e);
final GridImpl grid = tabInfo == null? null : getGridFor(tabInfo);
@@ -299,10 +299,11 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac
}
private void rebuildTabPopup() {
+ initUi();
+
myTabs.setPopupGroup(getCellPopupGroup(TAB_POPUP_PLACE), TAB_POPUP_PLACE, true);
- final ArrayList<GridImpl> grids = getGrids();
- for (GridImpl each : grids) {
+ for (GridImpl each : getGrids()) {
each.rebuildTabPopup();
}
}
@@ -325,10 +326,9 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac
for (AnAction eachFocus : focusActions) {
group.add(eachFocus);
}
- if (myAdditonalFocusActions != null) {
- final AnAction[] addins = myAdditonalFocusActions.getChildren(event);
- for (AnAction eachAddin : addins) {
- group.add(eachAddin);
+ if (myAdditionalFocusActions != null) {
+ for (AnAction action : myAdditionalFocusActions.getChildren(event)) {
+ group.add(action);
}
}
}
@@ -350,7 +350,7 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac
}
@Override
- public void propertyChange(final PropertyChangeEvent evt) {
+ public void propertyChange(@NotNull final PropertyChangeEvent evt) {
Content content = (Content)evt.getSource();
final GridImpl grid = getGridFor(content, false);
if (grid == null) return;
@@ -436,8 +436,8 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac
return new ActionCallback.Done();
}
- private void storeDefaultIndices(Content[] contents) {
- int i = 0;
+ private void storeDefaultIndices(@NotNull Content[] contents) {
+ //int i = 0;
for (Content content : contents) {
content.putUserData(RunnerLayout.DEFAULT_INDEX, getStateFor(content).getTab().getDefaultIndex());
//content.putUserData(CONTENT_NUMBER, i++);
@@ -637,8 +637,9 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac
myManager.addContentManagerListener(new ContentManagerListener() {
@Override
public void contentAdded(final ContentManagerEvent event) {
- final GridImpl grid = getGridFor(event.getContent(), true);
+ initUi();
+ GridImpl grid = getGridFor(event.getContent(), true);
if (grid == null) {
return;
}
@@ -795,10 +796,12 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac
private static void moveFollowingTabs(int index, final JBRunnerTabs tabs) {
for (TabInfo info : tabs.getTabs()) {
- final TabImpl tab = getTabFor(info);
- final int tabIndex = tab != null ? tab.getIndex() : -1;
- if (tabIndex >= index) {
- tab.setIndex(tabIndex + 1);
+ TabImpl tab = getTabFor(info);
+ if (tab != null) {
+ int tabIndex = tab.getIndex();
+ if (tabIndex >= index) {
+ tab.setIndex(tabIndex + 1);
+ }
}
}
}
@@ -1147,7 +1150,7 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac
myOriginal = null;
myTopActions = null;
- myAdditonalFocusActions = null;
+ myAdditionalFocusActions = null;
myLeftToolbarActions = null;
}
@@ -1166,7 +1169,7 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac
Content[] all = contents.toArray(new Content[contents.size()]);
Arrays.sort(all, new Comparator<Content>() {
@Override
- public int compare(Content content, Content content1) {
+ public int compare(@NotNull Content content, @NotNull Content content1) {
final int i = getStateFor(content).getTab().getDefaultIndex();
final int i1 = getStateFor(content1).getTab().getDefaultIndex();
return i - i1;
@@ -1222,6 +1225,7 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac
myMinimizeActionEnabled = enabled;
}
+ @SuppressWarnings("SpellCheckingInspection")
public void setMovetoGridActionEnabled(final boolean enabled) {
myMoveToGridActionEnabled = enabled;
}
@@ -1271,7 +1275,6 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac
return null;
}
- @Nullable
public void restoreContent(final String key) {
for (AnAction action : myMinimizedViewActions.getChildren(null)) {
Content content = ((RestoreViewAction)action).getContent();
@@ -1293,7 +1296,7 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac
private static class MyDropAreaPainter extends AbstractPainter {
private Shape myBoundingBox;
- private Color myColor = ColorUtil.mix(JBColor.BLUE, JBColor.WHITE, .3);
+ private final Color myColor = ColorUtil.mix(JBColor.BLUE, JBColor.WHITE, .3);
@Override
public boolean needsRepaint() {
@@ -1390,6 +1393,7 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac
}
}
+ @SuppressWarnings("NullableProblems")
@Override
public String getName() {
return RunnerContentUi.this.getName();
@@ -1575,6 +1579,7 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac
return myManager;
}
+ @NotNull
@Override
public ActionManager getActionManager() {
return myActionManager;
@@ -1617,7 +1622,7 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac
}
@Override
- public void validate(final Content content, final ActiveRunnable toRestore) {
+ public void validate(Content content, final ActiveRunnable toRestore) {
final TabInfo current = myTabs.getSelectedInfo();
myTabs.getPresentation().setPaintBlocked(true, true);
@@ -1628,6 +1633,7 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac
toRestore.run().doWhenDone(new Runnable() {
@Override
public void run() {
+ assert current != null;
myTabs.select(current, true);
myTabs.getPresentation().setPaintBlocked(false, true);
}
@@ -1654,7 +1660,7 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac
}
@Override
- public Dimension preferredLayoutSize(final Container parent) {
+ public Dimension preferredLayoutSize(@NotNull final Container parent) {
Dimension size = new Dimension();
Dimension leftSize = myLeft.getPreferredSize();
@@ -1667,7 +1673,7 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac
}
@Override
- public void layoutContainer(final Container parent) {
+ public void layoutContainer(@NotNull final Container parent) {
Dimension size = parent.getSize();
Dimension prefSize = parent.getPreferredSize();
if (prefSize.width <= size.width) {
@@ -1806,10 +1812,9 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac
@Override
public void dragOutStarted(MouseEvent mouseEvent, TabInfo info) {
- final JComponent component = info.getComponent();
- final Content[] data = CONTENT_KEY.getData((DataProvider)component);
- final List<Content> contents = Arrays.asList(data);
-
+ JComponent component = info.getComponent();
+ Content[] data = CONTENT_KEY.getData((DataProvider)component);
+ assert data != null;
storeDefaultIndices(data);
final Dimension size = info.getComponent().getSize();
@@ -1822,7 +1827,7 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac
presentation.setIcon(info.getIcon());
mySession = getDockManager().createDragSession(mouseEvent, new DockableGrid(image, presentation,
size,
- contents, 0));
+ Arrays.asList(data), 0));
}
@Override
diff --git a/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/RunnerLayoutUiImpl.java b/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/RunnerLayoutUiImpl.java
index 70d6a3f92819..7475adbcab21 100644
--- a/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/RunnerLayoutUiImpl.java
+++ b/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/RunnerLayoutUiImpl.java
@@ -21,7 +21,6 @@ import com.intellij.execution.ui.layout.LayoutAttractionPolicy;
import com.intellij.execution.ui.layout.LayoutStateDefaults;
import com.intellij.execution.ui.layout.LayoutViewOptions;
import com.intellij.execution.ui.layout.PlaceInGrid;
-import com.intellij.ide.DataManager;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.actionSystem.ActionGroup;
import com.intellij.openapi.actionSystem.ActionManager;
@@ -46,9 +45,8 @@ import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.awt.*;
-public class RunnerLayoutUiImpl implements Disposable.Parent, RunnerLayoutUi, LayoutStateDefaults, LayoutViewOptions {
+public class RunnerLayoutUiImpl implements Disposable.Parent, RunnerLayoutUi, LayoutStateDefaults, LayoutViewOptions, DataProvider {
private final RunnerLayout myLayout;
- private final JPanel myContentPanel;
private final RunnerContentUi myContentUI;
private final ContentManager myViewsContentManager;
@@ -63,14 +61,12 @@ public class RunnerLayoutUiImpl implements Disposable.Parent, RunnerLayoutUi, La
Disposer.register(parent, this);
myContentUI = new RunnerContentUi(project, this, ActionManager.getInstance(), IdeFocusManager.getInstance(project), myLayout,
- runnerTitle + " - " + sessionName);
+ runnerTitle + " - " + sessionName);
Disposer.register(this, myContentUI);
- myContentPanel = new MyContent();
myViewsContentManager = getContentFactory().createContentManager(myContentUI.getContentUI(), false, project);
+ myViewsContentManager.addDataProvider(this);
Disposer.register(this, myViewsContentManager);
-
- myContentPanel.add(myViewsContentManager.getComponent(), BorderLayout.CENTER);
}
@Override
@@ -80,7 +76,6 @@ public class RunnerLayoutUiImpl implements Disposable.Parent, RunnerLayoutUi, La
return this;
}
-
@NotNull
@Override
public LayoutStateDefaults initTabDefaults(int id, String text, Icon icon) {
@@ -156,7 +151,7 @@ public class RunnerLayoutUiImpl implements Disposable.Parent, RunnerLayoutUi, La
@Override
@NotNull
public JComponent getComponent() {
- return myContentPanel;
+ return myViewsContentManager.getComponent();
}
private static ContentFactory getContentFactory() {
@@ -380,28 +375,12 @@ public class RunnerLayoutUiImpl implements Disposable.Parent, RunnerLayoutUi, La
return contents;
}
- private class MyContent extends JPanel implements DataProvider {
- public MyContent() {
- super(new BorderLayout());
- }
-
- @Override
- public Object getData(@NonNls String dataId) {
- if (SwitchProvider.KEY.getName().equals(dataId)) {
- return myContentUI;
- }
-
- if (QuickActionProvider.KEY.getName().equals(dataId)) {
- return myContentUI;
- }
-
- if (RunnerContentUi.KEY.getName().equals(dataId)) {
- return myContentUI;
- }
-
- final DataProvider provider = DataManager.getDataProvider(this);
- return provider != null ? provider.getData(dataId) : null;
+ @Nullable
+ @Override
+ public Object getData(@NonNls String dataId) {
+ if (SwitchProvider.KEY.is(dataId) || QuickActionProvider.KEY.is(dataId) || RunnerContentUi.KEY.is(dataId)) {
+ return myContentUI;
}
+ return null;
}
-
}