diff --git a/bundles/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorContentServiceContentProvider.java b/bundles/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorContentServiceContentProvider.java index 538d1777e0d..3647642429e 100644 --- a/bundles/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorContentServiceContentProvider.java +++ b/bundles/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorContentServiceContentProvider.java @@ -304,7 +304,7 @@ public void run() throws Exception { overridingExtensions = foundExtension .getOverridingExtensionsForPossibleChild(anElement); if (overridingExtensions.length > 0) { - parent[0] = pipelineParent(anElement, overridingExtensions, parent); + parent[0] = pipelineParent(anElement, overridingExtensions, parent[0]); } } } @@ -354,7 +354,7 @@ private Object pipelineParent(Object anInputElement, NavigatorContentExtension[] Object theCurrentParent) { IPipelinedTreeContentProvider pipelinedContentProvider; NavigatorContentExtension[] overridingExtensions; - Object aSuggestedParent = null; + Object aSuggestedParent = theCurrentParent; for (NavigatorContentExtension theOverridingExtension : theOverridingExtensions) { if (theOverridingExtension.internalGetContentProvider().isPipelined()) { diff --git a/bundles/org.eclipse.ui.navigator/src/org/eclipse/ui/navigator/CommonViewer.java b/bundles/org.eclipse.ui.navigator/src/org/eclipse/ui/navigator/CommonViewer.java index abf482b97d9..aa1e3bc63f3 100644 --- a/bundles/org.eclipse.ui.navigator/src/org/eclipse/ui/navigator/CommonViewer.java +++ b/bundles/org.eclipse.ui.navigator/src/org/eclipse/ui/navigator/CommonViewer.java @@ -24,6 +24,7 @@ import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.LabelProviderChangedEvent; import org.eclipse.jface.viewers.StructuredSelection; +import org.eclipse.jface.viewers.TreePath; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.ViewerComparator; import org.eclipse.jface.viewers.ViewerSorter; @@ -39,6 +40,7 @@ import org.eclipse.ui.internal.navigator.CommonNavigatorFrameSource; import org.eclipse.ui.internal.navigator.ContributorTrackingSet; import org.eclipse.ui.internal.navigator.NavigatorContentService; +import org.eclipse.ui.internal.navigator.NavigatorContentServiceContentProvider; import org.eclipse.ui.internal.navigator.NavigatorDecoratingLabelProvider; import org.eclipse.ui.internal.navigator.NavigatorPipelineService; import org.eclipse.ui.internal.navigator.dnd.NavigatorDnDService; @@ -242,6 +244,19 @@ protected void handleLabelProviderChanged(LabelProviderChangedEvent event) { super.handleLabelProviderChanged(event); } + @Override + protected Object getParentElement(Object elementOrTreePath) { + if (!(elementOrTreePath instanceof TreePath) + && getContentProvider() instanceof NavigatorContentServiceContentProvider provider) { + // getParents() compiles the whole ancestor chain although only the immediate parent is used + Object parent = provider.getParent(elementOrTreePath); + if (parent != null) { + return parent; + } + } + return super.getParentElement(elementOrTreePath); + } + @Override protected void handleDispose(DisposeEvent event) { dispose();