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
import org.eclipse.jdt.ui.JavaUI;
import org.eclipse.jdt.internal.ui.JavaPlugin;
import org.eclipse.jdt.internal.ui.IJavaStatusConstants;
/**
 * Represents a custom filter which is provided by the
 * "org.eclipse.jdt.ui.javaElementFilters" extension point.
 * 
 * since 2.0
 */
public class FilterDescriptor implements Comparable {
	private static String PATTERN_FILTER_ID_PREFIX= "_patternFilterId_"; 
	private static final String EXTENSION_POINT_NAME= "javaElementFilters"; 
	private static final String FILTER_TAG= "filter"; 
	private static final String PATTERN_ATTRIBUTE= "pattern"; 	
	private static final String ID_ATTRIBUTE= "id"; 
	private static final String VIEW_ID_ATTRIBUTE= "viewId"; 
	private static final String CLASS_ATTRIBUTE= "class"; 
	private static final String NAME_ATTRIBUTE= "name"; 
	private static final String ENABLED_ATTRIBUTE= "enabled"; 
	private static final String DESCRIPTION_ATTRIBUTE= "description"; 	
	/**
	 * @deprecated	use "enabled" instead
	 */
	private static final String SELECTED_ATTRIBUTE= "selected"; 
	private static FilterDescriptor[] fgFilterDescriptors;
	private IConfigurationElement fElement;
	/**
	 * Returns all contributed Java element filters.
	 */
	public static FilterDescriptor[] getFilterDescriptors() {