Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 24032 Details for
Bug 96129
[MPE] (regression) MultiEditor.getInnerEditors() returns null.
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
[patch]
Fix ui.workbench NPE
multieditor-ui.workbench-0627.txt (text/plain), 12.58 KB, created by
Paul Webster
on 2005-06-27 10:19:19 EDT
(
hide
)
Description:
Fix ui.workbench NPE
Filename:
MIME Type:
Creator:
Paul Webster
Created:
2005-06-27 10:19:19 EDT
Size:
12.58 KB
patch
obsolete
>Index: Eclipse UI/org/eclipse/ui/internal/EditorManager.java >=================================================================== >RCS file: /home/eclipse/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/EditorManager.java,v >retrieving revision 1.87 >diff -u -r1.87 EditorManager.java >--- Eclipse UI/org/eclipse/ui/internal/EditorManager.java 16 May 2005 21:16:50 -0000 1.87 >+++ Eclipse UI/org/eclipse/ui/internal/EditorManager.java 27 Jun 2005 14:16:35 -0000 >@@ -713,41 +713,42 @@ > return null; > } > >- /* >- * Create the site and action bars for each inner editor. >- */ >- private IEditorReference[] openMultiEditor(final IEditorReference ref, >- final MultiEditor part, final EditorDescriptor desc, >- final MultiEditorInput input, final boolean setVisible) >- throws PartInitException { >+ /** >+ * Create the site and action bars for each inner editor. Just like >+ * createPart(), this method is called from the EditorReference. >+ */ >+ IEditorReference[] openMultiEditor(final IEditorReference ref, final MultiEditor part, >+ final MultiEditorInput input) throws PartInitException { > >- String[] editorArray = input.getEditors(); >- IEditorInput[] inputArray = input.getInput(); >+ String[] editorArray = input.getEditors(); >+ IEditorInput[] inputArray = input.getInput(); > >- //find all descriptors >- EditorDescriptor[] descArray = new EditorDescriptor[editorArray.length]; >- IEditorReference refArray[] = new IEditorReference[editorArray.length]; >- IEditorPart partArray[] = new IEditorPart[editorArray.length]; >- >- IEditorRegistry reg = getEditorRegistry(); >- for (int i = 0; i < editorArray.length; i++) { >- EditorDescriptor innerDesc = (EditorDescriptor) reg >- .findEditor(editorArray[i]); >- if (innerDesc == null) >- throw new PartInitException( >- NLS.bind(WorkbenchMessages.EditorManager_unknownEditorIDMessage, editorArray[i] )); >- descArray[i] = innerDesc; >- InnerEditor innerRef = new InnerEditor(ref, inputArray[i], descArray[i]); >- refArray[i] = innerRef; >- partArray[i] = innerRef.getEditor(true); >- } >- part.setChildren(partArray); >- return refArray; >+ // find all descriptors >+ EditorDescriptor[] descArray = new EditorDescriptor[editorArray.length]; >+ IEditorPart partArray[] = new IEditorPart[editorArray.length]; >+ IEditorReference[] refArray = new IEditorReference[editorArray.length]; >+ >+ IEditorRegistry reg = getEditorRegistry(); >+ for (int i = 0; i < editorArray.length; i++) { >+ EditorDescriptor innerDesc = (EditorDescriptor) reg >+ .findEditor(editorArray[i]); >+ if (innerDesc == null) { >+ throw new PartInitException(NLS.bind( >+ WorkbenchMessages.EditorManager_unknownEditorIDMessage, >+ editorArray[i])); >+ } >+ descArray[i] = innerDesc; >+ refArray[i] = new InnerEditor(ref, inputArray[i], >+ descArray[i]); >+ partArray[i] = refArray[i].getEditor(true); >+ } >+ part.setChildren(partArray); >+ return refArray; > } > > /* >- * Opens an editor part. >- */ >+ * Opens an editor part. >+ */ > private void createEditorTab(final EditorReference ref, final String workbookId) throws PartInitException { > > editorPresentation.addEditor(ref, workbookId); >Index: Eclipse UI/org/eclipse/ui/internal/EditorReference.java >=================================================================== >RCS file: /home/eclipse/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/EditorReference.java,v >retrieving revision 1.5 >diff -u -r1.5 EditorReference.java >--- Eclipse UI/org/eclipse/ui/internal/EditorReference.java 16 May 2005 21:16:50 -0000 1.5 >+++ Eclipse UI/org/eclipse/ui/internal/EditorReference.java 27 Jun 2005 14:16:35 -0000 >@@ -44,6 +44,8 @@ > import org.eclipse.ui.internal.registry.EditorDescriptor; > import org.eclipse.ui.internal.util.Util; > import org.eclipse.ui.part.IWorkbenchPartOrientation; >+import org.eclipse.ui.part.MultiEditor; >+import org.eclipse.ui.part.MultiEditorInput; > import org.eclipse.ui.presentations.IPresentablePart; > > public class EditorReference extends WorkbenchPartReference implements >@@ -79,6 +81,12 @@ > String factoryId; > > IEditorInput restoredInput; >+ >+ /** >+ * If the reference is instantiated as a MultiEditor, we need to dispose the >+ * inner references correctly. >+ */ >+ private IEditorReference[] multiEditorChildren = null; > > public EditorReference(EditorManager manager, IEditorInput input, EditorDescriptor desc) { > this.manager = manager; >@@ -241,6 +249,15 @@ > } > > protected void doDisposePart() { >+ if (multiEditorChildren!=null) { >+ for (int i=0; i<multiEditorChildren.length; ++i) { >+ EditorReference ref = (EditorReference)multiEditorChildren[i]; >+ if (ref!=null) { >+ ref.dispose(); >+ } >+ } >+ multiEditorChildren = null; >+ } > if (part != null) { > EditorSite site = (EditorSite) ((IEditorPart)part).getEditorSite(); > manager.disposeEditorActionBars((EditorActionBars) site.getActionBars()); >@@ -534,7 +551,7 @@ > throw new PartInitException(NLS.bind(WorkbenchMessages.EditorManager_missing_editor_descriptor, editorID)); //$NON-NLS-1$ > } > >- IEditorPart part; >+ IEditorPart part = null; > > if (desc.isInternal()) { > // Create an editor instance. >@@ -544,7 +561,10 @@ > } finally { > UIStats.end(UIStats.CREATE_PART, this, editorID); > } >- >+ if (part != null && part instanceof MultiEditor) { >+ multiEditorChildren = manager.openMultiEditor(this, >+ (MultiEditor) part, (MultiEditorInput) editorInput); >+ } > } else if (desc.getId().equals( > IEditorRegistry.SYSTEM_INPLACE_EDITOR_ID)) { > >Index: Eclipse UI/org/eclipse/ui/internal/WorkbenchPage.java >=================================================================== >RCS file: /home/eclipse/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPage.java,v >retrieving revision 1.223 >diff -u -r1.223 WorkbenchPage.java >--- Eclipse UI/org/eclipse/ui/internal/WorkbenchPage.java 22 Jun 2005 20:40:06 -0000 1.223 >+++ Eclipse UI/org/eclipse/ui/internal/WorkbenchPage.java 27 Jun 2005 14:16:35 -0000 >@@ -2467,6 +2467,10 @@ > if (!certifyPart(part)) > return; > >+ if (part instanceof MultiEditor) { >+ part = ((MultiEditor) part).getActiveEditor(); >+ } >+ > // Real work. > setActivePart(part); > } >@@ -2829,8 +2833,8 @@ > label = newPart != null ? newPart.getTitle() : "none"; //$NON-NLS-1$ > } > try { >- IWorkbenchPartReference partref = getReference(newPart); >- partBeingActivated = partref; >+ IWorkbenchPartReference parentRef = getReference(newPart); >+ partBeingActivated = getReference(newPart, false); > > UIStats.start(UIStats.ACTIVATE_PART, label); > // Notify perspective. It may deactivate fast view. >@@ -2848,15 +2852,14 @@ > if (newPart != null) { > activationList.setActive(newPart); > if (newPart instanceof IEditorPart) { >- IEditorReference ref = (IEditorReference) getReference(newPart); >- makeActiveEditor(ref); >+ makeActiveEditor((IEditorReference)parentRef); > } > } > activatePart(newPart); > > actionSwitcher.updateActivePart(newPart); > >- partList.setActivePart(partref); >+ partList.setActivePart(parentRef); > } finally { > partBeingActivated = null; > Object blame = newPart == null ? (Object)this : newPart; >@@ -3439,59 +3442,69 @@ > > /** > * Returns the reference to the given part, or <code>null</code> if it has no reference >- * (i.e. it is not a top-level part in this workbench page). >+ * (i.e. it is not a top-level part in this workbench page). For >+ * the MultiEditor, it returns parent reference. > * > * @param part the part > * @return the part's reference or <code>null</code> if the given part does not belong > * to this workbench page > */ > public IWorkbenchPartReference getReference(IWorkbenchPart part) { >- if (part == null) { >- return null; >- } >- IWorkbenchPartSite site = part.getSite(); >- if (!(site instanceof PartSite)) { >- return null; >- } >- PartSite partSite = ((PartSite) site); >- PartPane pane = partSite.getPane(); >- if (pane instanceof MultiEditorInnerPane) { >- MultiEditorInnerPane innerPane = (MultiEditorInnerPane) pane; >- return innerPane.getParentPane().getPartReference(); >- } >- return partSite.getPartReference(); >+ return getReference(part, true); >+ } >+ >+ /** >+ * Returns the reference to the given part, or <code>null</code> if it has >+ * no reference (i.e. it is not a top-level part in this workbench page). >+ * >+ * @param part >+ * the part >+ * @param findContainer >+ * true - return the parent reference for InnerEditors >+ * @return the part's reference or <code>null</code> if the given part >+ * does not belong to this workbench page >+ */ >+ public IWorkbenchPartReference getReference(IWorkbenchPart part, >+ boolean findContainer) { >+ if (part == null) { >+ return null; >+ } >+ IWorkbenchPartSite site = part.getSite(); >+ if (!(site instanceof PartSite)) { >+ return null; >+ } >+ PartSite partSite = ((PartSite) site); >+ PartPane pane = partSite.getPane(); >+ if (findContainer && pane instanceof MultiEditorInnerPane) { >+ MultiEditorInnerPane innerPane = (MultiEditorInnerPane) pane; >+ return innerPane.getParentPane().getPartReference(); >+ } >+ return partSite.getPartReference(); > } > > private class ActivationList { >- //List of parts in the activation order (oldest first) >+ // List of parts in the activation order (oldest first) > List parts = new ArrayList(); > > /* >- * Add/Move the active part to end of the list; >- */ >+ * Add/Move the active part to end of the list; >+ */ > void setActive(IWorkbenchPart part) { >- if (parts.size() <= 0) >- return; >- PartPane pane = ((PartSite) part.getSite()).getPane(); >- if (pane instanceof MultiEditorInnerPane) { >- MultiEditorInnerPane innerPane = (MultiEditorInnerPane) pane; >- setActive(innerPane.getParentPane().getPartReference().getPart( >- true)); >- } else { >- IWorkbenchPartReference ref = getReference(part); >- if (ref != null) { >- if (ref == parts.get(parts.size() - 1)) >- return; >- parts.remove(ref); >- parts.add(ref); >- } >- } >+ if (parts.size() <= 0) >+ return; >+ IWorkbenchPartReference ref = getReference(part); >+ if (ref != null) { >+ if (ref == parts.get(parts.size() - 1)) >+ return; >+ parts.remove(ref); >+ parts.add(ref); >+ } > } > > /* >- * Ensures that the given part appears AFTER any other part in the same >- * container. >- */ >+ * Ensures that the given part appears AFTER any other part in the same >+ * container. >+ */ > void bringToTop(IWorkbenchPartReference ref) { > ILayoutContainer targetContainer = getContainer(ref); > >Index: Eclipse UI/org/eclipse/ui/part/MultiEditor.java >=================================================================== >RCS file: /home/eclipse/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/part/MultiEditor.java,v >retrieving revision 1.15 >diff -u -r1.15 MultiEditor.java >--- Eclipse UI/org/eclipse/ui/part/MultiEditor.java 25 Feb 2005 20:52:16 -0000 1.15 >+++ Eclipse UI/org/eclipse/ui/part/MultiEditor.java 27 Jun 2005 14:16:37 -0000 >@@ -77,20 +77,6 @@ > return content; > } > >- /** >- * The <code>MultiEditor</code> implementation of this >- * method extends the <code>EditorPart</code> implementation, >- * and disposes any inner editors. Subclasses may extend. >- * >- * @since 3.0 >- */ >- public void dispose() { >- super.dispose(); >- IEditorPart[] editors = getInnerEditors(); >- for (int i = 0; i < editors.length; i++) { >- editors[i].dispose(); >- } >- } > > /* > * @see IEditorPart#doSaveAs()
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 96129
:
22644
|
22931
|
23457
|
24032
|
24096
|
24227
|
24358
|
24437
|
25128
|
25262
|
25425
|
25426
|
25620
|
25735
|
25831
|
25832
|
25834
|
25890
|
25923
|
25936
|
25937
|
25990
|
26109
|
26111
|
26121