Bug 37215 createExecutableExtension does not catch missing super class
Build R2.0 We have code that creates classes declared in the plugin.xml with the following API: IConfigurationElement.createExecutableExtension(String) We handle the cases where - there's a CoreException - there's a ClassCastException Given the API comment: * @exception CoreException if an instance of the executable extension * could not be created for any reason. we assumed that this also catches the case where the super class is missing, however this is not the case as can be seen in the following log: !ENTRY org.eclipse.jdt.ui 4 10001 Mai 05, 2003 16:19:07.813 !MESSAGE org.eclipse.jdt.internal.ui.filters.Non !STACK 0 java.lang.NoClassDefFoundError: org.eclipse.jdt.internal.ui.filters.Non at java.lang.Throwable.<init>(Throwable.java) at java.lang.Throwable.<init>(Throwable.java:75) at java.lang.NoClassDefFoundError.<init>(NoClassDefFoundError.java:51) at java.lang.ClassLoader.defineClassImpl(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java) at java.net.URLClassLoader.defineClass(URLClassLoader.java) at java.net.URLClassLoader.access$400(URLClassLoader.java) at java.net.URLClassLoader$ClassFinder.run(URLClassLoader.java) at java.security.AccessController.doPrivileged(AccessController.java:218) at java.net.URLClassLoader.findClass(URLClassLoader.java) at org.eclipse.core.internal.boot.DelegatingURLClassLoader.findClass(DelegatingURLClassLoader.java:922) at org.eclipse.core.internal.plugins.PluginClassLoader.internalFindClassParentsSelf(PluginClassLoader.java) at org.eclipse.core.internal.boot.DelegatingURLClassLoader.findClassParentsSelf(DelegatingURLClassLoader.java) at org.eclipse.core.internal.boot.DelegatingURLClassLoader.loadClass(DelegatingURLClassLoader.java) at org.eclipse.core.internal.boot.DelegatingURLClassLoader.loadClass(DelegatingURLClassLoader.java) at java.lang.ClassLoader.loadClass(ClassLoader.java) at org.eclipse.core.internal.plugins.PluginDescriptor.createExecutableExtension(PluginDescriptor.java:130) at org.eclipse.core.internal.plugins.PluginDescriptor.createExecutableExtension(PluginDescriptor.java:167) at org.eclipse.core.internal.plugins.ConfigurationElement.createExecutableExtension(ConfigurationElement.java:103) at org.eclipse.jdt.internal.ui.filters.FilterDescriptor.createViewerFilter(FilterDescriptor.java:118) at org.eclipse.jdt.ui.actions.CustomFiltersActionGroup.updateBuiltInFilters(CustomFiltersActionGroup.java:223) at org.eclipse.jdt.ui.actions.CustomFiltersActionGroup.updateViewerFilters(CustomFiltersActionGroup.java:193) at org.eclipse.jdt.ui.actions.CustomFiltersActionGroup.openDialog(CustomFiltersActionGroup.java:429) at org.eclipse.jdt.ui.actions.CustomFiltersActionGroup.access$0(CustomFiltersActionGroup.java:414) at org.eclipse.jdt.ui.actions.CustomFiltersActionGroup$ShowFilterDialogAction.run(CustomFiltersActionGroup.java:60) at org.eclipse.jface.action.Action.runWithEvent(Action.java:842) at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:526) at org.eclipse.jface.action.ActionContributionItem.access$4(ActionContributionItem.java:480) at org.eclipse.jface.action.ActionContributionItem$6.handleEvent(ActionContributionItem.java:452) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:848) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java) at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1402) at org.eclipse.ui.internal.Workbench.run(Workbench.java:1385) at org.eclipse.core.internal.boot.InternalBootLoader.run(InternalBootLoader.java:845) at org.eclipse.core.boot.BootLoader.run(BootLoader.java:461) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:61) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:40) at java.lang.reflect.Method.invoke(Method.java:335) at org.eclipse.core.launcher.Main.basicRun(Main.java:291) at org.eclipse.core.launcher.Main.run(Main.java:747) at org.eclipse.core.launcher.Main.main(Main.java:583)
org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/FilterDescriptor.java
*/ 
	public int compareTo(Object o) {
		if (o instanceof FilterDescriptor)
			return Collator.getInstance().compare(getName(), ((FilterDescriptor)o).getName());
		else
			return Integer.MIN_VALUE;
	}
	
	
	/**
	 * Creates the filter descriptors.
	 */
	private static FilterDescriptor[] createFilterDescriptors(IConfigurationElement[] elements) {
		List result= new ArrayList(5);
		Set descIds= new HashSet(5);
		for (int i= 0; i < elements.length; i++) {
			IConfigurationElement element= elements[i];
			if (FILTER_TAG.equals(element.getName())) {
				FilterDescriptor desc= new FilterDescriptor(element);
				if (!descIds.contains(desc.getId())) {
					result.add(desc);
					descIds.add(desc.getId());
				}
			}
		}
		Collections.sort(result);
		return (FilterDescriptor[])result.toArray(new FilterDescriptor[result.size()]);
	}
}