Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Aeschlimann2007-05-16 10:23:34 +0000
committerMartin Aeschlimann2007-05-16 10:23:34 +0000
commit19f77c8eae6320f1a666c231aa9881a1ac992f68 (patch)
tree856ec5075adcfb33faa927cb69ec2e08c14b7205 /org.eclipse.search/search/org/eclipse/search/internal/ui/text/EditorOpener.java
parent0c17d3a3e625997d32c049d7ef1f3beddd8070bc (diff)
downloadeclipse.platform.text-19f77c8eae6320f1a666c231aa9881a1ac992f68.tar.gz
eclipse.platform.text-19f77c8eae6320f1a666c231aa9881a1ac992f68.tar.xz
eclipse.platform.text-19f77c8eae6320f1a666c231aa9881a1ac992f68.zip
178859 EditorOpener leaks last opened editorv20070516-0800
Diffstat (limited to 'org.eclipse.search/search/org/eclipse/search/internal/ui/text/EditorOpener.java')
-rw-r--r--org.eclipse.search/search/org/eclipse/search/internal/ui/text/EditorOpener.java80
1 files changed, 33 insertions, 47 deletions
diff --git a/org.eclipse.search/search/org/eclipse/search/internal/ui/text/EditorOpener.java b/org.eclipse.search/search/org/eclipse/search/internal/ui/text/EditorOpener.java
index cfa384c9a60..a391963bbbe 100644
--- a/org.eclipse.search/search/org/eclipse/search/internal/ui/text/EditorOpener.java
+++ b/org.eclipse.search/search/org/eclipse/search/internal/ui/text/EditorOpener.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2007 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
@@ -13,10 +13,10 @@ package org.eclipse.search.internal.ui.text;
import org.eclipse.core.resources.IFile;
import org.eclipse.ui.IEditorDescriptor;
+import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IEditorReference;
import org.eclipse.ui.IEditorRegistry;
-import org.eclipse.ui.IFileEditorInput;
import org.eclipse.ui.IReusableEditor;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PartInitException;
@@ -29,7 +29,7 @@ import org.eclipse.search.internal.ui.SearchPlugin;
public class EditorOpener {
- private IEditorPart fEditor;
+ private IEditorReference fReusedEditor;
public IEditorPart open(IFile file, boolean activate) throws PartInitException {
IWorkbenchPage wbPage= SearchPlugin.getActivePage();
@@ -54,62 +54,48 @@ public class EditorOpener {
return SearchPlugin.getDefault().getWorkbench().getEditorRegistry().findEditor(IEditorRegistry.SYSTEM_EXTERNAL_EDITOR_ID).getId();
return desc.getId();
}
-
-
- private boolean isPinned(IEditorPart editor) {
- if (editor == null)
- return false;
-
- IEditorReference[] editorRefs= editor.getEditorSite().getPage().getEditorReferences();
- int i= 0;
- while (i < editorRefs.length) {
- if (editor.equals(editorRefs[i].getEditor(false)))
- return editorRefs[i].isPinned();
- i++;
- }
- return false;
- }
private IEditorPart showInEditor(IWorkbenchPage page, IFile file, String editorId, boolean activate) throws PartInitException {
- IFileEditorInput input= new FileEditorInput(file);
+ IEditorInput input= new FileEditorInput(file);
IEditorPart editor= page.findEditor(input);
if (editor != null) {
page.bringToTop(editor);
if (activate) {
page.activate(editor);
}
- } else {
- boolean isOpen= false;
- if (fEditor != null) {
- IEditorReference[] parts= page.getEditorReferences();
- int i= 0;
- while (!isOpen && i < parts.length)
- isOpen= fEditor == parts[i++].getEditor(false);
- }
-
- boolean canBeReused= isOpen && !fEditor.isDirty() && !isPinned(fEditor);
- boolean showsSameInputType= fEditor != null && fEditor.getSite().getId().equals(editorId);
- if (canBeReused && !showsSameInputType) {
- page.closeEditor(fEditor, false);
- fEditor= null;
- }
-
- if (canBeReused && showsSameInputType) {
- ((IReusableEditor)fEditor).setInput(input);
- page.bringToTop(fEditor);
- editor= fEditor;
- if (activate) {
- page.activate(editor);
+ return editor;
+ }
+ IEditorReference reusedEditorRef= fReusedEditor;
+ if (reusedEditorRef != null) {
+ boolean isOpen= reusedEditorRef.getEditor(false) != null;
+ boolean canBeReused= isOpen && !reusedEditorRef.isDirty() && !reusedEditorRef.isPinned();
+ if (canBeReused) {
+ boolean showsSameInputType= reusedEditorRef.getId().equals(editorId);
+ if (!showsSameInputType) {
+ page.closeEditors(new IEditorReference[] { reusedEditorRef }, false);
+ fReusedEditor= null;
+ } else {
+ editor= reusedEditorRef.getEditor(true);
+ if (editor instanceof IReusableEditor) {
+ ((IReusableEditor) editor).setInput(input);
+ page.bringToTop(editor);
+ if (activate) {
+ page.activate(editor);
+ }
+ return editor;
+ }
}
- } else {
- editor= IDE.openEditor(page, file, activate);
- if (editor instanceof IReusableEditor)
- fEditor= editor;
- else
- fEditor= null;
}
}
+ editor= page.openEditor(input, editorId, activate);
+ if (editor instanceof IReusableEditor) {
+ IEditorReference reference= (IEditorReference) page.getReference(editor);
+ fReusedEditor= reference;
+ } else {
+ fReusedEditor= null;
+ }
return editor;
}
+
}

Back to the top