From 78f2d3c716e15efd8f6d081fe7de2e1f0e158a30 Mon Sep 17 00:00:00 2001 From: Kris De Volder Date: Thu, 5 Jul 2018 14:20:43 -0700 Subject: [PATCH] Add a 'close' button to LSP console --- .../icons/rem_co.png | Bin 0 -> 463 bytes .../icons/rem_co@2x.png | Bin 0 -> 1034 bytes .../plugin.xml | 10 ++ .../LanguageServerCommonsActivator.java | 22 ++++ .../commons/console/CloseConsoleAction.java | 37 ++++++ .../eclipse/commons/console/ConsoleUtil.java | 18 +-- .../LanguageServerConsolePageParticipant.java | 106 ++++++++++++++++++ .../console/LanguageServerIOConsole.java | 23 ++++ 8 files changed, 207 insertions(+), 9 deletions(-) create mode 100644 eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/icons/rem_co.png create mode 100644 eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/icons/rem_co@2x.png create mode 100644 eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/src/org/springframework/tooling/ls/eclipse/commons/console/CloseConsoleAction.java create mode 100644 eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/src/org/springframework/tooling/ls/eclipse/commons/console/LanguageServerConsolePageParticipant.java create mode 100644 eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/src/org/springframework/tooling/ls/eclipse/commons/console/LanguageServerIOConsole.java diff --git a/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/icons/rem_co.png b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/icons/rem_co.png new file mode 100644 index 0000000000000000000000000000000000000000..38ab8a480129f52d9d71c191d89a0a521ffd40a2 GIT binary patch literal 463 zcmV;=0WkiFP)SRY0)~ z6j4@sn%#MCp2s`u^Zn=QbUF`>M&r3&uLrL2l}g1A{)wZ91Q7&|?RNWs_yH63H(#sO z6y#55p3iRg{d78|-EK#l&4yqgkW-AdVNBHT^K_?1@!lUON48u@B*yHh7w&@0U z2wp&^-kb!RCX*q+YPDKY$iU3G;LDxEhlH-{&P&uZ?FD0#0!Fjhq(mYi z;_(6iA5_OOAN?|B)Agy}Q^zkpfGfY-a!ey*F=XW|xG7*N?%+>2$s= zEiF9&As`@7TwMGiR=>mHNG&NT@rS*F--nDDa{(|M0g2!zf~CcfJPF!!9lx)28X6j8Z*Nc5*4Ct=qT-fgz-QVC2waiL z2?N0>;UMR@o?@1qT93zb=Vz>YMYzq{7XUIbF(F>B_W|46+frR!ExZmc?-#*Y6%`eI zf!vYZG0?6XxqMCIio12?bTU#sCfU|;vf@F)u@}{t`@R(zm zrL3>7>v~yK*!Rn<053(2jg6{>ySuwlFhONyr4}pzPWhW-tE;QJ9@5<0ta*H9tN$GY zSD2BswY90X@9gYEvAn#@bt2S}va&K+T3XW8lJ@p?P5T>NGv7%RKzNOB>Fn%Ot5R4LnHk+{q^GCnE;+Ep zbsEC>1>D%}cGU^)=Xl`E=|zmc!2YBoIb1}LfjArP=UC|N?N!N1etv$wyK_&uxrp6zYic#0H}pGGBWZ2?S$iXaE9c`nh(FDEP}^&q@N2C z$#0>#FzbMmK`3l(ZI$8SVFi=(siv3wUJ;47=BI{>lea_j^9 + + + + + + + diff --git a/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/src/org/springframework/tooling/ls/eclipse/commons/LanguageServerCommonsActivator.java b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/src/org/springframework/tooling/ls/eclipse/commons/LanguageServerCommonsActivator.java index 727e3d71f..5588de19c 100644 --- a/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/src/org/springframework/tooling/ls/eclipse/commons/LanguageServerCommonsActivator.java +++ b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/src/org/springframework/tooling/ls/eclipse/commons/LanguageServerCommonsActivator.java @@ -10,13 +10,22 @@ *******************************************************************************/ package org.springframework.tooling.ls.eclipse.commons; +import java.net.URL; + +import org.eclipse.core.runtime.FileLocator; import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Path; +import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.Status; +import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.ui.plugin.AbstractUIPlugin; +import org.osgi.framework.Bundle; import org.osgi.framework.BundleContext; public class LanguageServerCommonsActivator extends AbstractUIPlugin { + public static final String PLUGIN_ID = "org.springframework.tooling.ls.eclipse.commons"; + private static LanguageServerCommonsActivator instance; public LanguageServerCommonsActivator() { @@ -28,6 +37,19 @@ public class LanguageServerCommonsActivator extends AbstractUIPlugin { super.start(context); } + public final static ImageDescriptor getImageDescriptor(String path) { + ImageDescriptor desc = ImageDescriptor.getMissingImageDescriptor(); + Bundle bundle = Platform.getBundle(PLUGIN_ID); + URL url = null; + if (bundle != null) { + url = FileLocator.find(bundle, new Path(path), null); + if (url != null) { + desc = ImageDescriptor.createFromURL(url); + } + } + return desc; + } + public static LanguageServerCommonsActivator getInstance() { return instance; } diff --git a/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/src/org/springframework/tooling/ls/eclipse/commons/console/CloseConsoleAction.java b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/src/org/springframework/tooling/ls/eclipse/commons/console/CloseConsoleAction.java new file mode 100644 index 000000000..0375613b5 --- /dev/null +++ b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/src/org/springframework/tooling/ls/eclipse/commons/console/CloseConsoleAction.java @@ -0,0 +1,37 @@ +/******************************************************************************* + * Copyright (c) 2018 Pivotal, Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Pivotal, Inc. - initial API and implementation + *******************************************************************************/ +package org.springframework.tooling.ls.eclipse.commons.console; + +import org.eclipse.jface.action.Action; +import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.console.ConsolePlugin; +import org.eclipse.ui.console.IConsole; +import org.springframework.tooling.ls.eclipse.commons.LanguageServerCommonsActivator; + +public class CloseConsoleAction extends Action { + + private LanguageServerIOConsole fConsole; + + public CloseConsoleAction(IWorkbenchWindow workbenchWindow, LanguageServerIOConsole fConsole) { + super("Close Console", LanguageServerCommonsActivator.getImageDescriptor("icons/rem_co.png")); + this.fConsole = fConsole; + } + + public void dispose() { + //TODO: anything to clean up? + } + + @Override + public void run() { + ConsolePlugin.getDefault().getConsoleManager().removeConsoles(new IConsole[]{fConsole}); + } + +} diff --git a/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/src/org/springframework/tooling/ls/eclipse/commons/console/ConsoleUtil.java b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/src/org/springframework/tooling/ls/eclipse/commons/console/ConsoleUtil.java index 80ab01ffa..935ebcc1c 100644 --- a/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/src/org/springframework/tooling/ls/eclipse/commons/console/ConsoleUtil.java +++ b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/src/org/springframework/tooling/ls/eclipse/commons/console/ConsoleUtil.java @@ -29,7 +29,7 @@ import org.eclipse.ui.console.IOConsoleOutputStream; */ @SuppressWarnings("restriction") public class ConsoleUtil { - + public static class Console { public final InputStream in; public final OutputStream out; @@ -67,15 +67,15 @@ public class ConsoleUtil { public static Color getOutputColor() { return DebugUIPlugin.getPreferenceColor(IDebugPreferenceConstants.CONSOLE_SYS_OUT_COLOR); } - + public static Color getErrorColor() { return DebugUIPlugin.getPreferenceColor(IDebugPreferenceConstants.CONSOLE_SYS_ERR_COLOR); } - + public static Color getInputColor() { return DebugUIPlugin.getPreferenceColor(IDebugPreferenceConstants.CONSOLE_SYS_IN_COLOR); } - + private LinkedList history = new LinkedList(); private void add(IOConsole console) { @@ -96,18 +96,18 @@ public class ConsoleUtil { private static void close(IOConsole console) { ConsolePlugin.getDefault().getConsoleManager().removeConsoles(new IConsole[] {console}); } - + public Console getConsole(String title) { - - final IOConsole console = new IOConsole(title, null); + + final IOConsole console = new LanguageServerIOConsole(title); final IOConsoleInputStream in = console.getInputStream(); final IOConsoleOutputStream out = console.newOutputStream(); final IOConsoleOutputStream err = console.newOutputStream(); - + in.setColor(getInputColor()); out.setColor(getOutputColor()); err.setColor(getErrorColor()); - + add(console); return new Console(in, out, err); } diff --git a/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/src/org/springframework/tooling/ls/eclipse/commons/console/LanguageServerConsolePageParticipant.java b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/src/org/springframework/tooling/ls/eclipse/commons/console/LanguageServerConsolePageParticipant.java new file mode 100644 index 000000000..d68b12629 --- /dev/null +++ b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/src/org/springframework/tooling/ls/eclipse/commons/console/LanguageServerConsolePageParticipant.java @@ -0,0 +1,106 @@ +/******************************************************************************* + * Copyright (c) 2000, 2009, 2017 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + * Kris De Volder - copied from org.eclipse.debug.internal.ui.views.console.ProcessConsolePageParticipant + * - modified to create similar functionality for GrailsIOConsole + * Kris De Volder - copied and modified to support lsp console close action + *******************************************************************************/ +package org.springframework.tooling.ls.eclipse.commons.console; + +import org.eclipse.jface.action.IToolBarManager; +import org.eclipse.ui.IActionBars; +import org.eclipse.ui.console.IConsole; +import org.eclipse.ui.console.IConsoleConstants; +import org.eclipse.ui.console.IConsolePageParticipant; +import org.eclipse.ui.console.IConsoleView; +import org.eclipse.ui.part.IPageBookViewPage; + +public class LanguageServerConsolePageParticipant implements IConsolePageParticipant { + + // actions + private CloseConsoleAction fClose; + + private IPageBookViewPage fPage; + + private IConsoleView fView; + + private LanguageServerIOConsole fConsole; + + @Override + public void init(IPageBookViewPage page, IConsole console) { + fPage = page; + fConsole = (LanguageServerIOConsole) console; + + fClose = new CloseConsoleAction(page.getSite().getWorkbenchWindow(), fConsole); + + fView = (IConsoleView) fPage.getSite().getPage().findView(IConsoleConstants.ID_CONSOLE_VIEW); + + // contribute to toolbar + IActionBars actionBars = fPage.getSite().getActionBars(); + configureToolBar(actionBars.getToolBarManager()); + } + + @Override + public T getAdapter(Class arg0) { + return null; + } + + @Override + public void dispose() { + if (fClose != null) { + fClose.dispose(); + fClose = null; + } + // if (fStdOut != null) { + // fStdOut.dispose(); + // fStdOut = null; + // } + // if (fStdErr != null) { + // fStdErr.dispose(); + // fStdErr = null; + // } + fConsole = null; + } + + /** + * Contribute actions to the toolbar + */ + protected void configureToolBar(IToolBarManager mgr) { + mgr.appendToGroup(IConsoleConstants.LAUNCH_GROUP, fClose); + + // mgr.appendToGroup(IConsoleConstants.LAUNCH_GROUP, fRemoveTerminated); + // mgr.appendToGroup(IConsoleConstants.LAUNCH_GROUP, fRemoveAllTerminated); + // mgr.appendToGroup(IConsoleConstants.OUTPUT_GROUP, fStdOut); + // mgr.appendToGroup(IConsoleConstants.OUTPUT_GROUP, fStdErr); + } + + @Override + public void activated() { + // add EOF submissions + // IPageSite site = fPage.getSite(); + // IHandlerService handlerService = (IHandlerService)site.getService(IHandlerService.class); + // IContextService contextService = (IContextService)site.getService(IContextService.class); + // fActivatedContext = contextService.activateContext(fContextId); + // fActivatedHandler = handlerService.activateHandler("org.eclipse.debug.ui.commands.eof", fEOFHandler); //$NON-NLS-1$ + } + + /* (non-Javadoc) + * @see org.eclipse.ui.console.IConsolePageParticipant#deactivated() + */ + @Override + public void deactivated() { + // remove EOF submissions + // IPageSite site = fPage.getSite(); + // IHandlerService handlerService = (IHandlerService)site.getService(IHandlerService.class); + // IContextService contextService = (IContextService)site.getService(IContextService.class); + // handlerService.deactivateHandler(fActivatedHandler); + // contextService.deactivateContext(fActivatedContext); + } + +} \ No newline at end of file diff --git a/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/src/org/springframework/tooling/ls/eclipse/commons/console/LanguageServerIOConsole.java b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/src/org/springframework/tooling/ls/eclipse/commons/console/LanguageServerIOConsole.java new file mode 100644 index 000000000..0f73e0480 --- /dev/null +++ b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/src/org/springframework/tooling/ls/eclipse/commons/console/LanguageServerIOConsole.java @@ -0,0 +1,23 @@ +/******************************************************************************* + * Copyright (c) 2018 Pivotal, Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Pivotal, Inc. - initial API and implementation + *******************************************************************************/ +package org.springframework.tooling.ls.eclipse.commons.console; + +import org.eclipse.ui.console.IOConsole; + +public class LanguageServerIOConsole extends IOConsole { + + private static final String CONSOLE_TYPE = LanguageServerIOConsole.class.getName(); + + public LanguageServerIOConsole(final String title) { + super(title, CONSOLE_TYPE, null); + } + +} \ No newline at end of file