diff options
author | Martin Aeschlimann | 2007-05-16 10:23:34 +0000 |
---|---|---|
committer | Martin Aeschlimann | 2007-05-16 10:23:34 +0000 |
commit | 19f77c8eae6320f1a666c231aa9881a1ac992f68 (patch) | |
tree | 856ec5075adcfb33faa927cb69ec2e08c14b7205 /org.eclipse.search/search/org/eclipse/search/internal/ui/text/EditorOpener.java | |
parent | 0c17d3a3e625997d32c049d7ef1f3beddd8070bc (diff) | |
download | eclipse.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.java | 80 |
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; } + } |