Bug 295803 [CommonNavigator] Source of Contribution set to lowest priority NCE, not the NCE providing the children
If two NCEs are triggered on the same object they are processed in order of priority, both NCEs are asked to contribute children for a given parent. In the case where they both contribute the same object, the second one will be recorded as the "source of contribution" for the object. This happens for example for a resource where there are two NCEs defined, the resource (or perhaps Java NCE that overrides the resource NCE) and another one possibly related to an RCP app. The source of the contribution is important because it is used first to determine which NCE is going to be selected to provide the label. The first NCE that provides a label wins. In 3.4 the behavior was the opposite, the higher priority NCE provided the label. There was no mechanism for overriding the label provider in 3.4, and the label was also not provided with regard to the source of contribution, it just picked the highest priority NCE to start with (which is what you would expect, in the absence of overrides). There is a benefit of using the source of contribution to provide the label, but then the source of contribution should be set to the NCE that actually provide the objects, not a subsequent NCE. We should consider fixing this for 3.5.2, and of course we need to make sure and test all of the usual things that depend on the CNF. (DTP, WST, CDT)
bundles/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/NavigatorContentExtension.java
overridingDescriptor = (NavigatorContentDescriptor) contentDescriptorsItr
					.next();
			if (contentService.isActive(overridingDescriptor.getId())
					&& contentService.isVisible(overridingDescriptor.getId())
					&& overridingDescriptor.isPossibleChild(anElement)) {
				overridingExtensions.add(contentService
						.getExtension(overridingDescriptor));
			}
		}
		if (overridingExtensions.size() == 0) {
			return NO_EXTENSIONS;
		}
		if (Policy.DEBUG_EXTENSION_SETUP) {
			System.out.println(this +  " overriding: "+
					"(poss child: " + anElement + "): " + overridingExtensions); 
		}
		return (NavigatorContentExtension[]) overridingExtensions
				.toArray(new NavigatorContentExtension[overridingExtensions
						.size()]);
	}
	/*
	 * (non-Javadoc)
	 * 
	 * @see java.lang.Object#toString()
	 */
	public String toString() {
		return descriptor.toString() + " Instance"; 
	}
}