Bug 577289 - allow to open editors independently on file size limits
Introduced IWorkbenchPage.MATCH_IGNORE_SIZE flag so the clients can ask
openEditor() to ignore file size when opening editors. This will be used
by "Open With" and "Clone Editor" menus which mean explicit user choice
to use selected editor type with no extra checks.
Change-Id: I297bf7c8e2785cb94e17a8fc978b1468a648d2f5
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
Signed-off-by: Simeon Andreev <simeon.danailov.andreev@gmail.com>
Reviewed-on: https://git.eclipse.org/r/c/platform/eclipse.platform.ui/+/189928
Tested-by: Platform Bot <platform-bot@eclipse.org>
diff --git a/bundles/org.eclipse.ui.ide/META-INF/MANIFEST.MF b/bundles/org.eclipse.ui.ide/META-INF/MANIFEST.MF
index 07f39ed..757091d 100644
--- a/bundles/org.eclipse.ui.ide/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.ui.ide/META-INF/MANIFEST.MF
@@ -53,7 +53,7 @@
org.eclipse.help;bundle-version="[3.2.0,4.0.0)",
org.eclipse.swt;bundle-version="[3.107.0,4.0.0)",
org.eclipse.ui;bundle-version="[3.106.0,4.0.0)",
- org.eclipse.ui.workbench;bundle-version="[3.115.100,4.0.0)",
+ org.eclipse.ui.workbench;bundle-version="[3.125.0,4.0.0)",
org.eclipse.ui.views;bundle-version="[3.2.0,4.0.0)";resolution:=optional,
org.eclipse.jface.text;bundle-version="[3.2.0,4.0.0)",
org.eclipse.ui.forms;bundle-version="[3.3.0,4.0.0)";resolution:=optional,
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/OpenWithMenu.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/OpenWithMenu.java
index f59ecdb..b12f959 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/OpenWithMenu.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/OpenWithMenu.java
@@ -79,7 +79,8 @@
/**
* Match both the input and id, so that different types of editor can be opened on the same input.
*/
- private static final int MATCH_BOTH = IWorkbenchPage.MATCH_INPUT | IWorkbenchPage.MATCH_ID;
+ private static final int MATCH_BOTH = IWorkbenchPage.MATCH_INPUT | IWorkbenchPage.MATCH_ID
+ | IWorkbenchPage.MATCH_IGNORE_SIZE;
/**
* Compares the labels from two IEditorDescriptor objects
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkbenchPage.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkbenchPage.java
index 6425bfa..af54b84 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkbenchPage.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkbenchPage.java
@@ -211,6 +211,14 @@
int MATCH_ID = 2;
/**
+ * Editor opening match mode specifying that the editor selection strategy
+ * should ignore file size
+ *
+ * @since 3.125
+ */
+ int MATCH_IGNORE_SIZE = 4;
+
+ /**
* State of a view in a given page when the view stack is minimized.
*
* @since 3.2
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPage.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPage.java
index 10fe849..8a1d6e2 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPage.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPage.java
@@ -3129,7 +3129,11 @@
IEditorRegistry editorRegistry = getWorkbenchWindow().getWorkbench().getEditorRegistry();
IEditorDescriptor desc = editorRegistry.findEditor(editorId);
- if (desc != null && !desc.isOpenExternal()) {
+ boolean ignoreFileSize = (matchFlags & MATCH_IGNORE_SIZE) != 0;
+ if (ignoreFileSize) {
+ // clear the flag so code below do not need to have extra cases for that
+ matchFlags ^= MATCH_IGNORE_SIZE;
+ } else if (desc != null && !desc.isOpenExternal()) {
java.util.Optional<String> largeFileEditorId = largeFileLimitsPreferenceHandler.getEditorForInput(input);
if (largeFileEditorId == null) {
// the user pressed cancel in the editor selection dialog
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/NewEditorHandler.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/NewEditorHandler.java
index 76d3f23..4513d7d 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/NewEditorHandler.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/NewEditorHandler.java
@@ -53,13 +53,14 @@
return null;
}
try {
+ int matchFlags = IWorkbenchPage.MATCH_NONE | IWorkbenchPage.MATCH_IGNORE_SIZE;
if (editor instanceof IPersistableEditor) {
XMLMemento editorState = XMLMemento.createWriteRoot(IWorkbenchConstants.TAG_EDITOR_STATE);
((IPersistableEditor) editor).saveState(editorState);
- ((WorkbenchPage) page).openEditor(editor.getEditorInput(), editorId, true, IWorkbenchPage.MATCH_NONE,
+ ((WorkbenchPage) page).openEditor(editor.getEditorInput(), editorId, true, matchFlags,
editorState, true);
} else {
- page.openEditor(editor.getEditorInput(), editorId, true, IWorkbenchPage.MATCH_NONE);
+ page.openEditor(editor.getEditorInput(), editorId, true, matchFlags);
}
} catch (PartInitException e) {
DialogUtil.openError(activeWorkbenchWindow.getShell(), WorkbenchMessages.Error, e.getMessage(), e);
diff --git a/bundles/org.eclipse.ui.workbench/META-INF/MANIFEST.MF b/bundles/org.eclipse.ui.workbench/META-INF/MANIFEST.MF
index deeeb80..7e4f1b3 100644
--- a/bundles/org.eclipse.ui.workbench/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.ui.workbench/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.ui.workbench; singleton:=true
-Bundle-Version: 3.124.100.qualifier
+Bundle-Version: 3.125.0.qualifier
Bundle-ClassPath: .
Bundle-Activator: org.eclipse.ui.internal.WorkbenchPlugin
Bundle-ActivationPolicy: lazy
diff --git a/bundles/org.eclipse.ui.workbench/pom.xml b/bundles/org.eclipse.ui.workbench/pom.xml
index d2f5e6f..72feb68 100644
--- a/bundles/org.eclipse.ui.workbench/pom.xml
+++ b/bundles/org.eclipse.ui.workbench/pom.xml
@@ -20,7 +20,7 @@
</parent>
<groupId>org.eclipse.ui</groupId>
<artifactId>org.eclipse.ui.workbench</artifactId>
- <version>3.124.100-SNAPSHOT</version>
+ <version>3.125.0-SNAPSHOT</version>
<packaging>eclipse-plugin</packaging>
<properties>
diff --git a/bundles/org.eclipse.ui/META-INF/MANIFEST.MF b/bundles/org.eclipse.ui/META-INF/MANIFEST.MF
index cd0959d..8b74eff 100644
--- a/bundles/org.eclipse.ui/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
Bundle-ManifestVersion: 2
Bundle-Name: %Plugin.name
Bundle-SymbolicName: org.eclipse.ui; singleton:=true
-Bundle-Version: 3.200.100.qualifier
+Bundle-Version: 3.201.0.qualifier
Bundle-ClassPath: .
Bundle-Activator: org.eclipse.ui.internal.UIPlugin
Bundle-ActivationPolicy: lazy
@@ -12,7 +12,7 @@
Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)",
org.eclipse.swt;bundle-version="[3.103.0,4.0.0)";visibility:=reexport,
org.eclipse.jface;bundle-version="[3.19.0,4.0.0)";visibility:=reexport,
- org.eclipse.ui.workbench;bundle-version="[3.120.0,4.0.0)";visibility:=reexport,
+ org.eclipse.ui.workbench;bundle-version="[3.125.0,4.0.0)";visibility:=reexport,
org.eclipse.core.expressions;bundle-version="[3.4.0,4.0.0)"
Bundle-RequiredExecutionEnvironment: JavaSE-11
Automatic-Module-Name: org.eclipse.ui
diff --git a/tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/largefile/LargeFileLimitsPreferenceHandlerTest.java b/tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/largefile/LargeFileLimitsPreferenceHandlerTest.java
index 882e262..cd569b1 100644
--- a/tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/largefile/LargeFileLimitsPreferenceHandlerTest.java
+++ b/tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/largefile/LargeFileLimitsPreferenceHandlerTest.java
@@ -153,6 +153,31 @@
}
@Test
+ public void testOpenEditorWithIgnoreSize() throws Exception {
+ String testEditorId = TEST_EDITOR_ID2;
+ long fileSize = 4L;
+ List<FileLimit> fileLimits = Arrays.asList(new FileLimit(testEditorId, fileSize));
+ configureFileLimits(fileLimits);
+
+ Class<?> expectedEditorClass = org.eclipse.ui.tests.api.MockEditorPart.class;
+ IEditorInput editorInput = testEditorInput;
+ String editorIdForOpen = "org.eclipse.ui.tests.api.MockEditorPart1";
+
+ IWorkbenchPage page = getWorkbench().getActiveWorkbenchWindow().getActivePage();
+ IEditorPart editor = null;
+ try {
+ boolean activate = true;
+ int flags = IWorkbenchPage.MATCH_NONE | IWorkbenchPage.MATCH_IGNORE_SIZE;
+ editor = page.openEditor(editorInput, editorIdForOpen, activate, flags);
+ assertEquals("Wrong editor opened", expectedEditorClass, editor.getClass());
+ } finally {
+ if (editor != null) {
+ editor.dispose();
+ }
+ }
+ }
+
+ @Test
public void testOpenEditor() throws Exception {
String testEditorId = "org.eclipse.ui.tests.api.MockEditorPart1";
long fileSize = 4L;