From ed7ea9191f9a9939c05a018ec0123ccd70347cb8 Mon Sep 17 00:00:00 2001 From: greg Date: Wed, 2 Jul 2008 20:43:46 +0400 Subject: [PATCH] QL console in separate process --- .../intellij/execution/ui/ConsoleViewWrapper.java | 94 ++++++++++++++++++++++ .../execution/ui/RunContentDescriptor.java | 3 +- .../execution/ui/RunContentManagerImpl.java | 34 ++++---- .../intellij/execution/process/ProcessHandler.java | 2 + 4 files changed, 116 insertions(+), 17 deletions(-) create mode 100644 lang-api/src/com/intellij/execution/ui/ConsoleViewWrapper.java diff --git a/lang-api/src/com/intellij/execution/ui/ConsoleViewWrapper.java b/lang-api/src/com/intellij/execution/ui/ConsoleViewWrapper.java new file mode 100644 index 0000000000..c6c84dc7ae --- /dev/null +++ b/lang-api/src/com/intellij/execution/ui/ConsoleViewWrapper.java @@ -0,0 +1,94 @@ +package com.intellij.execution.ui; + +import com.intellij.execution.filters.Filter; +import com.intellij.execution.filters.HyperlinkInfo; +import com.intellij.execution.process.ProcessHandler; +import com.intellij.openapi.actionSystem.AnAction; +import org.jetbrains.annotations.NotNull; + +import javax.swing.*; + +/** + * @author Gregory.Shrago + */ +public class ConsoleViewWrapper implements ConsoleView { + private final ConsoleView myDelegate; + + public ConsoleViewWrapper(final ConsoleView delegate) { + myDelegate = delegate; + } + + public ConsoleView getDelegate() { + return myDelegate; + } + + public void dispose() { + myDelegate.dispose(); + } + + public JComponent getComponent() { + return myDelegate.getComponent(); + } + + public JComponent getPreferredFocusableComponent() { + return myDelegate.getPreferredFocusableComponent(); + } + + public void print(String s, ConsoleViewContentType contentType) { + myDelegate.print(s, contentType); + } + + public void clear() { + myDelegate.clear(); + } + + public void scrollTo(int offset) { + myDelegate.scrollTo(offset); + } + + public void attachToProcess(ProcessHandler processHandler) { + myDelegate.attachToProcess(processHandler); + } + + public void setOutputPaused(boolean value) { + myDelegate.setOutputPaused(value); + } + + public boolean isOutputPaused() { + return myDelegate.isOutputPaused(); + } + + public boolean hasDeferredOutput() { + return myDelegate.hasDeferredOutput(); + } + + public void performWhenNoDeferredOutput(Runnable runnable) { + myDelegate.performWhenNoDeferredOutput(runnable); + } + + public void setHelpId(String helpId) { + myDelegate.setHelpId(helpId); + } + + public void addMessageFilter(Filter filter) { + myDelegate.addMessageFilter(filter); + } + + public void printHyperlink(String hyperlinkText, HyperlinkInfo info) { + myDelegate.printHyperlink(hyperlinkText, info); + } + + public int getContentSize() { + return myDelegate.getContentSize(); + } + + public boolean canPause() { + return myDelegate.canPause(); + } + + @NotNull + public AnAction[] createUpDownStacktraceActions() { + return myDelegate.createUpDownStacktraceActions(); + } + +} diff --git a/lang-api/src/com/intellij/execution/ui/RunContentDescriptor.java b/lang-api/src/com/intellij/execution/ui/RunContentDescriptor.java index e1b05f2628..93402a7cf3 100644 --- a/lang-api/src/com/intellij/execution/ui/RunContentDescriptor.java +++ b/lang-api/src/com/intellij/execution/ui/RunContentDescriptor.java @@ -18,6 +18,7 @@ package com.intellij.execution.ui; import com.intellij.execution.process.ProcessHandler; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.diagnostic.Logger; +import com.intellij.openapi.util.Disposer; import com.intellij.ui.content.Content; import org.jetbrains.annotations.Nullable; @@ -49,7 +50,7 @@ public class RunContentDescriptor { } public void dispose() { - myExecutionConsole.dispose(); + Disposer.dispose(myExecutionConsole); } @Nullable diff --git a/lang-impl/src/com/intellij/execution/ui/RunContentManagerImpl.java b/lang-impl/src/com/intellij/execution/ui/RunContentManagerImpl.java index 8686b7aa8d..5d27e1b76e 100644 --- a/lang-impl/src/com/intellij/execution/ui/RunContentManagerImpl.java +++ b/lang-impl/src/com/intellij/execution/ui/RunContentManagerImpl.java @@ -529,23 +529,25 @@ public class RunContentManagerImpl implements RunContentManager { if (processHandler == null || processHandler.isProcessTerminated()) { return true; } - - final TerminateRemoteProcessDialog terminateDialog = new TerminateRemoteProcessDialog(myProject, myProcessDisplayName, - processHandler.detachIsDefault()); - terminateDialog.show(); - - if (terminateDialog.getExitCode() == DialogWrapper.OK_EXIT_CODE) { - if (terminateDialog.forceTermination()) { - processHandler.destroyProcess(); - } - else { - processHandler.detachProcess(); - } - waitForProcess(descriptor); - return true; + final boolean destroyProcess; + if (Boolean.TRUE.equals(processHandler.getUserData(ProcessHandler.SILENTLY_DESTROY_ON_CLOSE))) { + destroyProcess = true; } - - return false; + else { + final TerminateRemoteProcessDialog terminateDialog = new TerminateRemoteProcessDialog(myProject, myProcessDisplayName, + processHandler.detachIsDefault()); + terminateDialog.show(); + if (terminateDialog.getExitCode() != DialogWrapper.OK_EXIT_CODE) return false; + destroyProcess = terminateDialog.forceTermination(); + } + if (destroyProcess) { + processHandler.destroyProcess(); + } + else { + processHandler.detachProcess(); + } + waitForProcess(descriptor); + return true; } } diff --git a/platform-api/src/com/intellij/execution/process/ProcessHandler.java b/platform-api/src/com/intellij/execution/process/ProcessHandler.java index 03280d9e5e..17df9dd3b5 100644 --- a/platform-api/src/com/intellij/execution/process/ProcessHandler.java +++ b/platform-api/src/com/intellij/execution/process/ProcessHandler.java @@ -32,6 +32,8 @@ import java.util.concurrent.atomic.AtomicInteger; public abstract class ProcessHandler extends UserDataHolderBase { private static final Logger LOG = Logger.getInstance("#com.intellij.execution.process.ProcessHandler"); + public static final Key SILENTLY_DESTROY_ON_CLOSE = Key.create("SILENTLY_DESTROY_ON_CLOSE"); + private final List myListeners = new CopyOnWriteArrayList(); private static final int STATE_INITIAL = 0; -- 2.11.4.GIT