Bug 299207 [CommonNavigator] Refactor NavigatorContentServiceContentProvider
There are a number of things about this code that make it less clear that it needs to be: 1) The internalGetChildren() and getElements() are largely duplicated. 2) The pipelinedChildren() private method returns the localSet which is never modified. 3) A ContributorTrackingSet is used in internalGetChildren() and getElements() when it is not necessary (setContribution() is never called on this, it should be just a LinkedHashSet) 4) The synchronization of methods is inconsistent 5) There are obsolete and unnecessary Javadoc comments 6) The order of the methods makes it hard to understand This refactoring (to be attached) cleans up these issues making the code easier to understand. No functionality change nor bug fix is intended here (except possibly by making the synchronization consistent).
bundles/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorContentServiceContentProvider.java
/**
	 * Query each of <code>theOverridingExtensions</code> for elements, and
	 * then pipe them through the Pipeline content provider.
	 * 
	 * @param anInputElement
	 *            The input element in the tree
	 * @param theOverridingExtensions
	 *            The set of overriding extensions that should participate in
	 *            the pipeline chain
	 * @param theCurrentParent
	 *            The current elements to return to the viewer (should be
	 *            modifiable)
	 * @return The set of elements to return to the viewer
	 */
	private Object pipelineParent(Object anInputElement,
			NavigatorContentExtension[] theOverridingExtensions,
			Object theCurrentParent) {
		IPipelinedTreeContentProvider pipelinedContentProvider;
		NavigatorContentExtension[] overridingExtensions;
		Object aSuggestedParent = null;
		for (int i = 0; i < theOverridingExtensions.length; i++) {
			if (theOverridingExtensions[i].getContentProvider() instanceof IPipelinedTreeContentProvider) {
				pipelinedContentProvider = (IPipelinedTreeContentProvider) theOverridingExtensions[i]
						.getContentProvider();
				aSuggestedParent = pipelinedContentProvider.getPipelinedParent(
						anInputElement, aSuggestedParent);
				overridingExtensions = theOverridingExtensions[i]
						.getOverridingExtensionsForTriggerPoint(anInputElement);
				if (overridingExtensions.length > 0) {
					aSuggestedParent = pipelineParent(anInputElement,