lk-wip
diff --git a/bundles/org.eclipse.ui.views/src/org/eclipse/ui/views/navigator/INavigatorContentProvider.java b/bundles/org.eclipse.ui.views/src/org/eclipse/ui/views/navigator/INavigatorContentProvider.java
deleted file mode 100644
index c67158b..0000000
--- a/bundles/org.eclipse.ui.views/src/org/eclipse/ui/views/navigator/INavigatorContentProvider.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.ui.views.navigator;
-
-/**
- */
-public interface INavigatorContentProvider {
-	/**
-	 * Returns the child elements of the given parent element.
-	 * <p>
-	 * The difference between this method and <code>IStructuredContentProvider.getElements</code> 
-	 * is that <code>getElements</code> is called to obtain the 
-	 * tree viewer's root elements, whereas <code>getChildren</code> is used
-	 * to obtain the children of a given parent element in the tree (including a root).
-	 * </p>
-	 * The result is not modified by the viewer.
-	 *
-	 * @param parentElement the parent element
-	 * @return an array of child elements
-	 */
-	public Object[] getChildren(Object parentElement);
-	/**
-	 * Returns the parent for the given element, or <code>null</code> 
-	 * indicating that the parent can't be computed. 
-	 * In this case the tree-structured viewer can't expand
-	 * a given node correctly if requested.
-	 *
-	 * @param element the element
-	 * @return the parent element, or <code>null</code> if it
-	 *   has none or if the parent cannot be computed
-	 */
-	public Object getParent(Object element);
-	/**
-	 * Returns whether the given element has children.
-	 * <p>
-	 * Intended as an optimization for when the viewer does not
-	 * need the actual children.  Clients may be able to implement
-	 * this more efficiently than <code>getChildren</code>.
-	 * </p>
-	 *
-	 * @param element the element
-	 * @return <code>true</code> if the given element has children,
-	 *  and <code>false</code> if it has no children
-	 */
-	public boolean hasChildren(Object element);
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.ui.views/src/org/eclipse/ui/views/navigator/NavigatorContentProvider.java b/bundles/org.eclipse.ui.views/src/org/eclipse/ui/views/navigator/NavigatorContentProvider.java
index 97b16d7..d7f802f 100644
--- a/bundles/org.eclipse.ui.views/src/org/eclipse/ui/views/navigator/NavigatorContentProvider.java
+++ b/bundles/org.eclipse.ui.views/src/org/eclipse/ui/views/navigator/NavigatorContentProvider.java
@@ -10,10 +10,12 @@
  *******************************************************************************/
 package org.eclipse.ui.views.navigator;
 
-import org.eclipse.core.resources.*;
-import org.eclipse.core.runtime.*;
-import org.eclipse.jface.viewers.*;
-import org.eclipse.swt.widgets.Control;
+import org.eclipse.core.internal.resources.WorkspaceRoot;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.QualifiedName;
+import org.eclipse.ui.INavigatorTreeContentProvider;
 import org.eclipse.ui.internal.ActionExpression;
 import org.eclipse.ui.internal.WorkbenchPlugin;
 import org.eclipse.ui.internal.registry.NavigatorContentDescriptor;
@@ -34,44 +36,34 @@
 	partId = navigator.getSite().getId();
 	this.navigator = navigator;
 }
-public Object[] getChildren(Object element) {
+protected IWorkbenchAdapter getAdapter(Object o) {
+	if (!(o instanceof IAdaptable)) {
+		return null;
+	}
+	return (IWorkbenchAdapter)((IAdaptable)o).getAdapter(IWorkbenchAdapter.class);
+}
+protected INavigatorTreeContentProvider getContentProvider(Object element) {
 	NavigatorContentDescriptor[] descriptors = registry.getDescriptors(partId);
-	Object[] elements = new Object[0];
-	NavigatorContentDescriptor defaultContentDescriptor = null;
-	NavigatorContentDescriptor contentDescriptor = null;
-	int priority = 0;
-	
 	for (int i = 0; i < descriptors.length; i++) {
 		NavigatorContentDescriptor descriptor = descriptors[i];
 		ActionExpression enablement = descriptor.getEnableExpression(); 
-		
-		if (enablement == null)
-			defaultContentDescriptor = descriptor;
-		else
-		if (enablement.isEnabledFor(element) && descriptor.getPriority() > priority) {
-			priority = descriptor.getPriority();
-			contentDescriptor = descriptor;
+		if (enablement != null) {
+			if (enablement.isEnabledFor(element)) {
+				NavigatorContentDescriptor contentDescriptor = descriptor;
+				return contentDescriptor.createContentProvider();
+			}
 		}
 	}
-	if (contentDescriptor == null)
-		contentDescriptor = defaultContentDescriptor;
-		
-	if (contentDescriptor != null) {
-		elements = contentDescriptor.createContentProvider().getChildren(element);
-		setContentName(element, contentDescriptor.getName());
+	Object parentElement = getParent(element);
+	if (parentElement instanceof WorkspaceRoot) {
+		return new ProjectContentProvider();
+	} else {
+		return getContentProvider(parentElement);
 	}
-	return elements;	
 }
-private IProject getProject(Object element) {
-	IProject project = null;
-	if (element instanceof IProject) {
-		project = (IProject) element;
-	}
-	else 
-	if (element instanceof IAdaptable) {
-		project = (IProject) ((IAdaptable) element).getAdapter(IProject.class);
-	}	
-	return project;
+public Object[] getChildren(Object element) {
+	INavigatorTreeContentProvider contentProvider = getContentProvider(element);
+	return contentProvider.getChildren(element);
 }
 private IResource getResource(Object element) {
 	IResource resource = null;
@@ -88,16 +80,32 @@
  * Method declared on IStructuredContentProvider.
  */
 public Object[] getElements(Object element) {
-	ITreeContentProvider contentProvider = registry.getRootContentProvider(partId);
+	INavigatorTreeContentProvider contentProvider = registry.getRootContentProvider(partId);
 	Object[] elements = contentProvider.getElements(element);
-	ITreeContentProvider[] subContentProviders = registry.getSubContentProviders(partId);
-	for (int i=0; i<subContentProviders.length; i++) {
-		ITreeContentProvider subContentProvider = subContentProviders[i];
-		// if delete enabled
-		// if replace enabled
-		// if add enabled
+
+	Object[] newElements = new Object[elements.length];
+	NavigatorContentDescriptor[] descriptors = registry.getDescriptors(partId);
+	for (int i=0; i<elements.length; i++) {
+		Object childElement = elements[i];
+		setContentName(childElement, registry.getRootContentDescriptor(partId).getName());
+		newElements[i] = childElement;
+		for (int j = 0; j < descriptors.length; j++) {
+			NavigatorContentDescriptor descriptor = descriptors[j];
+			ActionExpression enablement = descriptor.getEnableExpression(); 
+			if (enablement != null) {
+				if (enablement.isEnabledFor(childElement)) {
+					NavigatorContentDescriptor contentDescriptor = descriptor;
+					Object replacementElement = contentDescriptor.createContentProvider().getReplacementElement(element, childElement);
+					if (replacementElement != null) {
+						setContentName(replacementElement, contentDescriptor.getName());
+						newElements[i]=replacementElement;
+					}
+				}
+			}
+		}
 	}
-	return elements;
+
+	return newElements;
 }
 public Object getParent(Object element) {
 	IWorkbenchAdapter adapter = getAdapter(element);
diff --git a/bundles/org.eclipse.ui.views/src/org/eclipse/ui/views/navigator/ProjectContentProvider.java b/bundles/org.eclipse.ui.views/src/org/eclipse/ui/views/navigator/ProjectContentProvider.java
index 2843e20..2f9e460 100644
--- a/bundles/org.eclipse.ui.views/src/org/eclipse/ui/views/navigator/ProjectContentProvider.java
+++ b/bundles/org.eclipse.ui.views/src/org/eclipse/ui/views/navigator/ProjectContentProvider.java
@@ -10,232 +10,18 @@
  *******************************************************************************/
 package org.eclipse.ui.views.navigator;
 
-import org.eclipse.core.resources.IContainer;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IResourceChangeEvent;
-import org.eclipse.core.resources.IResourceChangeListener;
-import org.eclipse.core.resources.IResourceDelta;
-import org.eclipse.core.resources.IWorkspace;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.jface.viewers.AbstractTreeViewer;
-import org.eclipse.jface.viewers.ITreeContentProvider;
-import org.eclipse.jface.viewers.StructuredViewer;
 import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.ui.model.IWorkbenchAdapter;
+import org.eclipse.ui.INavigatorTreeContentProvider;
+import org.eclipse.ui.model.WorkbenchContentProvider;
 
 /**
  * Provides tree contents for objects that have the IWorkbenchAdapter
  * adapter registered. 
  */
-public class ProjectContentProvider implements ITreeContentProvider, IResourceChangeListener {
+public class ProjectContentProvider extends WorkbenchContentProvider implements INavigatorTreeContentProvider {
 	protected Viewer viewer;
 
-/* (non-Javadoc)
- * Method declared on IContentProvider.
- */
-public void dispose() {
-	if (viewer != null) {
-		Object obj = viewer.getInput();
-		if (obj instanceof IWorkspace) {
-			IWorkspace workspace = (IWorkspace) obj;
-			workspace.removeResourceChangeListener(this);
-		} else
-			if (obj instanceof IContainer) {
-				IWorkspace workspace = ((IContainer) obj).getWorkspace();
-				workspace.removeResourceChangeListener(this);
-			}
-	}
-}
-/**
- * Returns the implementation of IWorkbenchAdapter for the given
- * object.  Returns null if the adapter is not defined or the
- * object is not adaptable.
- */
-protected IWorkbenchAdapter getAdapter(Object o) {
-	if (!(o instanceof IAdaptable)) {
-		return null;
-	}
-	return (IWorkbenchAdapter)((IAdaptable)o).getAdapter(IWorkbenchAdapter.class);
-}
-/* (non-Javadoc)
- * Method declared on ITreeContentProvider.
- */
-public Object[] getChildren(Object element) {
-	return new Object[0];
-}
-/* (non-Javadoc)
- * Method declared on IStructuredContentProvider.
- */
-public Object[] getElements(Object element) {
-	IWorkbenchAdapter adapter;
-	
-	adapter = getAdapter(getInput(element));
-	if (adapter != null) {
-		return adapter.getChildren(element);
-	}
-	return new Object[0];
-}
-IAdaptable getInput(Object element) {
-	IResource resource = null;
-
-	if (element instanceof IResource) {
-		resource = (IResource) element;
-	} else if (element instanceof IAdaptable){
-		resource = (IResource) ((IAdaptable) element).getAdapter(IResource.class);
-	}
-	if (resource != null) {
-		switch (resource.getType()) {
-			case IResource.FILE :
-				return resource.getParent();
-			case IResource.FOLDER :
-			case IResource.PROJECT :
-			case IResource.ROOT :
-				return (IContainer) resource;
-			default :
-				// Unknown resource type.  Fall through.
-				break;
-		}
-	}
-	return ResourcesPlugin.getWorkspace().getRoot();	
-}
-/* (non-Javadoc)
- * Method declared on ITreeContentProvider.
- */
-public Object getParent(Object element) {
-	IWorkbenchAdapter adapter = getAdapter(element);
-	if (adapter != null) {
-	    return adapter.getParent(element);
-	}
+public Object getReplacementElement(Object parentElement, Object element) {
 	return null;
 }
-/* (non-Javadoc)
- * Method declared on ITreeContentProvider.
- */
-public boolean hasChildren(Object element) {
-	return false;
-}
-/* (non-Javadoc)
- * Method declared on IContentProvider.
- */
-public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-	this.viewer = viewer;
-	IWorkspace oldWorkspace = null;
-	IWorkspace newWorkspace = null;
-	if (oldInput instanceof IWorkspace) {
-		oldWorkspace = (IWorkspace) oldInput;
-	}
-	else if (oldInput instanceof IContainer) {
-		oldWorkspace = ((IContainer) oldInput).getWorkspace();
-	}
-	if (newInput instanceof IWorkspace) {
-		newWorkspace = (IWorkspace) newInput;
-	} else if (newInput instanceof IContainer) {
-		newWorkspace = ((IContainer) newInput).getWorkspace();
-	}
-	if (oldWorkspace != newWorkspace) {
-		if (oldWorkspace != null) {
-			oldWorkspace.removeResourceChangeListener(this);
-		}
-		if (newWorkspace != null) {
-			newWorkspace.addResourceChangeListener(this, IResourceChangeEvent.POST_CHANGE);
-		}
-	}
-}
-/**
- * Process a resource delta.  
- */
-protected void processDelta(IResourceDelta delta) {
-	// This method runs inside a syncExec.  The widget may have been destroyed
-	// by the time this is run.  Check for this and do nothing if so.
-	Control ctrl = viewer.getControl();
-	if (ctrl == null || ctrl.isDisposed())
-		return;
-
-	// Get the affected resource
-	IResource resource = delta.getResource();
-
-	// If any children have changed type, just do a full refresh of this parent,
-	// since a simple update on such children won't work, 
-	// and trying to map the change to a remove and add is too dicey.
-	// The case is: folder A renamed to existing file B, answering yes to overwrite B.
-	IResourceDelta[] affectedChildren =
-		delta.getAffectedChildren(IResourceDelta.CHANGED);
-	for (int i = 0; i < affectedChildren.length; i++) {
-		if ((affectedChildren[i].getFlags() & IResourceDelta.TYPE) != 0) {
-			((StructuredViewer) viewer).refresh(resource);
-			return;
-		}
-	}
-
-	// Check the flags for changes the Navigator cares about.
-	// See ResourceLabelProvider for the aspects it cares about.
-	// Notice we don't care about F_CONTENT or F_MARKERS currently.
-	int changeFlags = delta.getFlags();
-	if ((changeFlags
-		& (IResourceDelta.OPEN | IResourceDelta.SYNC))
-		!= 0) {
-		((StructuredViewer) viewer).update(resource, null);
-	}
-	// Replacing a resource may affect its label and its children
-	if ((changeFlags & IResourceDelta.REPLACED) != 0) {
-		((StructuredViewer) viewer).refresh(resource, true);
-		return;
-	}
-
-	// Handle changed children .
-	for (int i = 0; i < affectedChildren.length; i++) {
-		processDelta(affectedChildren[i]);
-	}
-
-	// Process removals before additions, to avoid multiple equal elements in the viewer.
-
-	// Handle removed children. Issue one update for all removals.
-	affectedChildren = delta.getAffectedChildren(IResourceDelta.REMOVED);
-	if (affectedChildren.length > 0) {
-		Object[] affected = new Object[affectedChildren.length];
-		for (int i = 0; i < affectedChildren.length; i++)
-			affected[i] = affectedChildren[i].getResource();
-		if (viewer instanceof AbstractTreeViewer) {
-			((AbstractTreeViewer) viewer).remove(affected);
-		} else {
-			((StructuredViewer) viewer).refresh(resource);
-		}
-	}
-
-	// Handle added children. Issue one update for all insertions.
-	affectedChildren = delta.getAffectedChildren(IResourceDelta.ADDED);
-	if (affectedChildren.length > 0) {
-		Object[] affected = new Object[affectedChildren.length];
-		for (int i = 0; i < affectedChildren.length; i++)
-			affected[i] = affectedChildren[i].getResource();
-		if (viewer instanceof AbstractTreeViewer) {
-			((AbstractTreeViewer) viewer).add(resource, affected);
-		}
-		else {
-			((StructuredViewer) viewer).refresh(resource);
-		}
-	}
-}
-/**
- * The workbench has changed.  Process the delta and issue updates to the viewer,
- * inside the UI thread.
- *
- * @see IResourceChangeListener#resourceChanged(org.eclipse.core.resources.IResourceChangeEvent)
- */
-public void resourceChanged(final IResourceChangeEvent event) {
-	final IResourceDelta delta = event.getDelta();
-	Control ctrl = viewer.getControl();
-	if (ctrl != null && !ctrl.isDisposed()) {
-		// Do a sync exec, not an async exec, since the resource delta
-		// must be traversed in this method.  It is destroyed
-		// when this method returns.
-		ctrl.getDisplay().syncExec(new Runnable() {
-			public void run() {
-				processDelta(delta);
-			}
-		});
-	}
-}
 }
\ No newline at end of file
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/INavigatorTreeContentProvider.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/INavigatorTreeContentProvider.java
new file mode 100644
index 0000000..8b8c3a4
--- /dev/null
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/INavigatorTreeContentProvider.java
@@ -0,0 +1,19 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2003 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui;
+
+import org.eclipse.jface.viewers.ITreeContentProvider;
+
+/**
+ */
+public interface INavigatorTreeContentProvider extends ITreeContentProvider {
+	public Object getReplacementElement(Object parentElement, Object element);
+}
\ No newline at end of file
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/registry/NavigatorAbstractContentDescriptor.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/registry/NavigatorAbstractContentDescriptor.java
index b174764..16deb5a 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/registry/NavigatorAbstractContentDescriptor.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/registry/NavigatorAbstractContentDescriptor.java
@@ -14,7 +14,7 @@
 
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.ui.INavigatorTreeContentProvider;
 import org.eclipse.ui.WorkbenchException;
 import org.eclipse.ui.internal.WorkbenchPlugin;
 
@@ -32,6 +32,7 @@
 	private String className;
 	private IConfigurationElement configElement;
 	private ArrayList subContentDescriptors = new ArrayList();
+	private INavigatorTreeContentProvider contentProvider = null;
 	
 	/**
 	 * Creates a descriptor from a configuration element.
@@ -46,16 +47,16 @@
 	protected void addSubContentDescriptor(NavigatorContentDescriptor descriptor) {
 		subContentDescriptors.add(descriptor);
 	}
-	public ITreeContentProvider createContentProvider() {
-		Object contentProvider = null;
+	public INavigatorTreeContentProvider createContentProvider() {
+		if  (contentProvider != null) return contentProvider;
 
 		try {
-			contentProvider = WorkbenchPlugin.createExtension(configElement, ATT_CLASS);
+			contentProvider = (INavigatorTreeContentProvider)WorkbenchPlugin.createExtension(configElement, ATT_CLASS);
 		} catch (CoreException exception) {
 			WorkbenchPlugin.log("Unable to create content provider: " + //$NON-NLS-1$
 				className, exception.getStatus());
 		}
-		return (ITreeContentProvider) contentProvider;		
+		return contentProvider;		
 	}
 	/**
 	 */
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/registry/NavigatorDescriptor.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/registry/NavigatorDescriptor.java
index 65e6dc0..4bb3ab6 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/registry/NavigatorDescriptor.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/registry/NavigatorDescriptor.java
@@ -11,7 +11,7 @@
 package org.eclipse.ui.internal.registry;
 
 import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.ui.INavigatorTreeContentProvider;
 import org.eclipse.ui.WorkbenchException;
 
 /**
@@ -46,7 +46,7 @@
 public NavigatorRootContentDescriptor getRootContentDescriptor() {
 	return rootContentDescriptor;
 }
-public ITreeContentProvider getContentProvider() {
+public INavigatorTreeContentProvider getContentProvider() {
 	return contentDescriptor.createContentProvider();
 }
 /**
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/registry/NavigatorRegistry.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/registry/NavigatorRegistry.java
index 36e182a..39d78ae 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/registry/NavigatorRegistry.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/registry/NavigatorRegistry.java
@@ -10,9 +10,12 @@
  *******************************************************************************/
 package org.eclipse.ui.internal.registry;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
 
 import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.ui.INavigatorTreeContentProvider;
 
 /**
  */
@@ -47,27 +50,30 @@
 	if (rootDescriptor != null) return rootDescriptor.findContentDescriptor(contentProviderId);
 	return null;
 }
-public ITreeContentProvider getRootContentProvider(String partId) {
+public NavigatorRootContentDescriptor getRootContentDescriptor(String partId) {
+	return (NavigatorRootContentDescriptor) rootContentDescriptors.get(partId);
+}
+public INavigatorTreeContentProvider getRootContentProvider(String partId) {
 	NavigatorRootContentDescriptor rootDescriptor = (NavigatorRootContentDescriptor) rootContentDescriptors.get(partId);
 	if (rootDescriptor != null)
 		return rootDescriptor.createContentProvider();
 		
 	return null;
 }
-public ITreeContentProvider[] getSubContentProviders(String viewTargetId, String contentProviderId) {
+public INavigatorTreeContentProvider[] getSubContentProviders(String viewTargetId, String contentProviderId) {
 	NavigatorAbstractContentDescriptor contentDescriptor = findContentDescriptor(viewTargetId, contentProviderId);
 	return getSubContentProviders(contentDescriptor);
 }
-public ITreeContentProvider[] getSubContentProviders(String viewTargetId) {
+public INavigatorTreeContentProvider[] getSubContentProviders(String viewTargetId) {
 	NavigatorAbstractContentDescriptor rootContentDescriptor = (NavigatorAbstractContentDescriptor)rootContentDescriptors.get(viewTargetId);
 	return getSubContentProviders(rootContentDescriptor);
 }
-protected ITreeContentProvider[] getSubContentProviders(NavigatorAbstractContentDescriptor contentDescriptor) {
+protected INavigatorTreeContentProvider[] getSubContentProviders(NavigatorAbstractContentDescriptor contentDescriptor) {
 	ArrayList list = contentDescriptor.getSubContentDescriptors();
-	ITreeContentProvider[] providers = new ITreeContentProvider[list.size()];
+	INavigatorTreeContentProvider[] providers = new INavigatorTreeContentProvider[list.size()];
 	for (int i=0; i<list.size(); i++) {
 		NavigatorContentDescriptor descriptor = (NavigatorContentDescriptor)list.get(i);
-		ITreeContentProvider provider = descriptor.createContentProvider();
+		INavigatorTreeContentProvider provider = descriptor.createContentProvider();
 		providers[i] = provider;
 	}
 	return providers;