diff options
author | Mickael Istria | 2020-12-15 21:02:51 +0000 |
---|---|---|
committer | Mickael Istria | 2020-12-15 21:02:51 +0000 |
commit | 6f042adc549393a4a3e30e1f0739c651646fa047 (patch) | |
tree | 8cd6505d648159a49f16e7cb25e336b3a4762ce1 | |
parent | ba5b573f21f5a0357d9e4af10fdbb05fe93e6903 (diff) | |
download | eclipse.platform.text-6f042adc549393a4a3e30e1f0739c651646fa047.tar.gz eclipse.platform.text-6f042adc549393a4a3e30e1f0739c651646fa047.tar.xz eclipse.platform.text-6f042adc549393a4a3e30e1f0739c651646fa047.zip |
Bug 569701 - Generic Editor misses collapse/expandI20201215-1800
This change adds a generic handlers bound to various folding commands.
This handler is enabled whenever activePart adapts to
ITextOperationTarget, so it enables folding commands on most views and
editors that leverage folding.
Change-Id: I0c054a66b93a45f34497a6dd4f488f650d9de0db
Signed-off-by: Mickael Istria <mistria@redhat.com>
10 files changed, 246 insertions, 7 deletions
diff --git a/org.eclipse.ui.editors/plugin.xml b/org.eclipse.ui.editors/plugin.xml index 3976749e1b8..3ba076fc1fc 100644 --- a/org.eclipse.ui.editors/plugin.xml +++ b/org.eclipse.ui.editors/plugin.xml @@ -167,6 +167,54 @@ commandId="org.eclipse.ui.edit.text.removeTrailingWhitespace" class="org.eclipse.ui.internal.editors.text.RemoveTrailingWhitespaceHandler"> </handler> + <handler + commandId="org.eclipse.ui.edit.text.folding.collapse_all" + class="org.eclipse.ui.internal.editors.text.folding.CollapseAllHandler"> + <enabledWhen> + <with + variable="activePart"> + <adapt + type="org.eclipse.jface.text.ITextOperationTarget"> + </adapt> + </with> + </enabledWhen> + </handler> + <handler + class="org.eclipse.ui.internal.editors.text.folding.CollapseAllHandler" + commandId="org.eclipse.ui.edit.text.folding.collapse_all"> + <enabledWhen> + <with + variable="activePart"> + <adapt + type="org.eclipse.jface.text.ITextOperationTarget"> + </adapt> + </with> + </enabledWhen> + </handler> + <handler + class="org.eclipse.ui.internal.editors.text.folding.ExpandAllHandler" + commandId="org.eclipse.ui.edit.text.folding.expand_all"> + <enabledWhen> + <with + variable="activePart"> + <adapt + type="org.eclipse.jface.text.ITextOperationTarget"> + </adapt> + </with> + </enabledWhen> + </handler> + <handler + class="org.eclipse.ui.internal.editors.text.folding.ExpandHandler" + commandId="org.eclipse.ui.edit.text.folding.expand"> + <enabledWhen> + <with + variable="activePart"> + <adapt + type="org.eclipse.jface.text.ITextOperationTarget"> + </adapt> + </with> + </enabledWhen> + </handler> </extension> <extension diff --git a/org.eclipse.ui.editors/src/org/eclipse/ui/internal/editors/text/TextOperationActionHandler.java b/org.eclipse.ui.editors/src/org/eclipse/ui/internal/editors/text/TextOperationActionHandler.java new file mode 100644 index 00000000000..b78b11a3325 --- /dev/null +++ b/org.eclipse.ui.editors/src/org/eclipse/ui/internal/editors/text/TextOperationActionHandler.java @@ -0,0 +1,85 @@ +/******************************************************************************* + * Copyright (c) 2020 Red Hat Inc. and others. + * + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ +package org.eclipse.ui.internal.editors.text; + +import org.eclipse.swt.custom.BusyIndicator; +import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Shell; + +import org.eclipse.core.commands.AbstractHandler; +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; + +import org.eclipse.core.runtime.Status; + +import org.eclipse.jface.text.ITextOperationTarget; + +import org.eclipse.ui.IWorkbench; +import org.eclipse.ui.IWorkbenchPage; +import org.eclipse.ui.IWorkbenchPart; +import org.eclipse.ui.IWorkbenchPartSite; +import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.handlers.HandlerUtil; + +/** + * Abstract Handler to delegate to an operation of {@link ITextOperationTarget}. + */ +public abstract class TextOperationActionHandler extends AbstractHandler { + + protected final int operationCode; + + public TextOperationActionHandler(int operationCode) { + this.operationCode= operationCode; + } + + @Override + public Object execute(ExecutionEvent event) throws ExecutionException { + if (operationCode < 0) { + return null; + } + IWorkbenchPart part= HandlerUtil.getActivePart(event); + ITextOperationTarget target= part.getAdapter(ITextOperationTarget.class); + if (target == null) { + return null; + } + + IWorkbenchPartSite site= part.getSite(); + Shell shell= site.getShell(); + if (shell != null && !shell.isDisposed()) { + Display display= shell.getDisplay(); + BusyIndicator.showWhile(display, () -> target.doOperation(operationCode)); + return Status.OK_STATUS; + } + return null; + } + + @Override + public void setEnabled(Object evaluationContext) { + IWorkbench workbench= PlatformUI.getWorkbench(); + if (workbench == null) { + setBaseEnabled(false); + return; + } + IWorkbenchWindow window= workbench.getActiveWorkbenchWindow(); + if (window == null) { + setBaseEnabled(false); + return; + } + IWorkbenchPage page= window.getActivePage(); + if (page == null) { + setBaseEnabled(false); + return; + } + IWorkbenchPart part= page.getActivePart(); + setBaseEnabled(part != null && part.getAdapter(ITextOperationTarget.class) != null); + } +} diff --git a/org.eclipse.ui.editors/src/org/eclipse/ui/internal/editors/text/folding/CollapseAllHandler.java b/org.eclipse.ui.editors/src/org/eclipse/ui/internal/editors/text/folding/CollapseAllHandler.java new file mode 100644 index 00000000000..7646a395640 --- /dev/null +++ b/org.eclipse.ui.editors/src/org/eclipse/ui/internal/editors/text/folding/CollapseAllHandler.java @@ -0,0 +1,22 @@ +/******************************************************************************* + * Copyright (c) 2020 Red Hat Inc. and others. + * + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ +package org.eclipse.ui.internal.editors.text.folding; + +import org.eclipse.jface.text.source.projection.ProjectionViewer; + +import org.eclipse.ui.internal.editors.text.TextOperationActionHandler; + +public class CollapseAllHandler extends TextOperationActionHandler { + + public CollapseAllHandler() { + super(ProjectionViewer.COLLAPSE_ALL); + } +} diff --git a/org.eclipse.ui.editors/src/org/eclipse/ui/internal/editors/text/folding/CollapseHandler.java b/org.eclipse.ui.editors/src/org/eclipse/ui/internal/editors/text/folding/CollapseHandler.java new file mode 100644 index 00000000000..a2fe6abcd26 --- /dev/null +++ b/org.eclipse.ui.editors/src/org/eclipse/ui/internal/editors/text/folding/CollapseHandler.java @@ -0,0 +1,22 @@ +/******************************************************************************* + * Copyright (c) 2020 Red Hat Inc. and others. + * + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ +package org.eclipse.ui.internal.editors.text.folding; + +import org.eclipse.jface.text.source.projection.ProjectionViewer; + +import org.eclipse.ui.internal.editors.text.TextOperationActionHandler; + +public class CollapseHandler extends TextOperationActionHandler { + + public CollapseHandler() { + super(ProjectionViewer.COLLAPSE); + } +} diff --git a/org.eclipse.ui.editors/src/org/eclipse/ui/internal/editors/text/folding/ExpandAllHandler.java b/org.eclipse.ui.editors/src/org/eclipse/ui/internal/editors/text/folding/ExpandAllHandler.java new file mode 100644 index 00000000000..f2c88dd9cff --- /dev/null +++ b/org.eclipse.ui.editors/src/org/eclipse/ui/internal/editors/text/folding/ExpandAllHandler.java @@ -0,0 +1,22 @@ +/******************************************************************************* + * Copyright (c) 2020 Red Hat Inc. and others. + * + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ +package org.eclipse.ui.internal.editors.text.folding; + +import org.eclipse.jface.text.source.projection.ProjectionViewer; + +import org.eclipse.ui.internal.editors.text.TextOperationActionHandler; + +public class ExpandAllHandler extends TextOperationActionHandler { + + public ExpandAllHandler() { + super(ProjectionViewer.EXPAND_ALL); + } +} diff --git a/org.eclipse.ui.editors/src/org/eclipse/ui/internal/editors/text/folding/ExpandHandler.java b/org.eclipse.ui.editors/src/org/eclipse/ui/internal/editors/text/folding/ExpandHandler.java new file mode 100644 index 00000000000..b2596c0b13b --- /dev/null +++ b/org.eclipse.ui.editors/src/org/eclipse/ui/internal/editors/text/folding/ExpandHandler.java @@ -0,0 +1,22 @@ +/******************************************************************************* + * Copyright (c) 2020 Red Hat Inc. and others. + * + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ +package org.eclipse.ui.internal.editors.text.folding; + +import org.eclipse.jface.text.source.projection.ProjectionViewer; + +import org.eclipse.ui.internal.editors.text.TextOperationActionHandler; + +public class ExpandHandler extends TextOperationActionHandler { + + public ExpandHandler() { + super(ProjectionViewer.EXPAND); + } +} diff --git a/org.eclipse.ui.genericeditor.tests/src/org/eclipse/ui/genericeditor/tests/FoldingTest.java b/org.eclipse.ui.genericeditor.tests/src/org/eclipse/ui/genericeditor/tests/FoldingTest.java index bd05bc0f5f2..d3905186689 100644 --- a/org.eclipse.ui.genericeditor.tests/src/org/eclipse/ui/genericeditor/tests/FoldingTest.java +++ b/org.eclipse.ui.genericeditor.tests/src/org/eclipse/ui/genericeditor/tests/FoldingTest.java @@ -13,6 +13,8 @@ */ package org.eclipse.ui.genericeditor.tests; +import static org.junit.Assert.assertTrue; + import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; @@ -23,6 +25,8 @@ import org.junit.Test; import org.eclipse.swt.widgets.Display; +import org.eclipse.core.commands.Command; + import org.eclipse.jface.text.ITextViewer; import org.eclipse.jface.text.Position; import org.eclipse.jface.text.source.Annotation; @@ -31,8 +35,11 @@ import org.eclipse.jface.text.source.projection.ProjectionAnnotation; import org.eclipse.jface.text.source.projection.ProjectionViewer; import org.eclipse.jface.text.tests.util.DisplayHelper; +import org.eclipse.ui.commands.ICommandService; import org.eclipse.ui.genericeditor.tests.contributions.EnabledPropertyTester; +import org.eclipse.ui.editors.text.IFoldingCommandIds; + public class FoldingTest extends AbstratGenericEditorTest { @Override @@ -118,4 +125,12 @@ public class FoldingTest extends AbstratGenericEditorTest { } return annotationList; } + + @Test + public void testFoldingCommandsEnabled() throws Exception { + createAndOpenFile("bar.xml", "<a>\n b</a>"); + ICommandService commandService = editor.getEditorSite().getService(ICommandService.class); + Command collapseAllCommand = commandService.getCommand(IFoldingCommandIds.FOLDING_COLLAPSE_ALL); + assertTrue(collapseAllCommand.isEnabled() && collapseAllCommand.isHandled()); + } } diff --git a/org.eclipse.ui.genericeditor/.classpath b/org.eclipse.ui.genericeditor/.classpath index eca7bdba8f0..e801ebfb468 100644 --- a/org.eclipse.ui.genericeditor/.classpath +++ b/org.eclipse.ui.genericeditor/.classpath @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src"/> <classpathentry kind="output" path="bin"/> diff --git a/org.eclipse.ui.genericeditor/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.ui.genericeditor/.settings/org.eclipse.jdt.core.prefs index 25c93f491d9..fbe2ec86786 100644 --- a/org.eclipse.ui.genericeditor/.settings/org.eclipse.jdt.core.prefs +++ b/org.eclipse.ui.genericeditor/.settings/org.eclipse.jdt.core.prefs @@ -10,9 +10,9 @@ org.eclipse.jdt.core.compiler.annotation.nullable.secondary= org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -26,6 +26,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=warning org.eclipse.jdt.core.compiler.problem.emptyStatement=info +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning @@ -71,6 +72,7 @@ org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=igno org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=info org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=info +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled @@ -103,4 +105,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/org.eclipse.ui.genericeditor/META-INF/MANIFEST.MF b/org.eclipse.ui.genericeditor/META-INF/MANIFEST.MF index 05b438dba0b..2619e897122 100644 --- a/org.eclipse.ui.genericeditor/META-INF/MANIFEST.MF +++ b/org.eclipse.ui.genericeditor/META-INF/MANIFEST.MF @@ -2,11 +2,11 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %Bundle-Name Bundle-SymbolicName: org.eclipse.ui.genericeditor;singleton:=true -Bundle-Version: 1.1.900.qualifier +Bundle-Version: 1.2.0.qualifier Bundle-Vendor: %Bundle-Vendor -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-11 Require-Bundle: org.eclipse.ui.workbench.texteditor;bundle-version="3.10.0", - org.eclipse.ui.editors;bundle-version="3.10.0", + org.eclipse.ui.editors;bundle-version="3.14.0", org.eclipse.text;bundle-version="3.6.0", org.eclipse.jface.text;bundle-version="3.13.0", org.eclipse.core.runtime;bundle-version="3.12.0", |