diff options
Diffstat (limited to 'platform/lang-impl/src/com/intellij/execution/runners/RunContentBuilder.java')
-rw-r--r-- | platform/lang-impl/src/com/intellij/execution/runners/RunContentBuilder.java | 186 |
1 files changed, 72 insertions, 114 deletions
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; |