result = registry.processExecutableExtension(contributorName, namespaceOwnerId, getNamespace(), className, initData, attributeName, this);
result = registry.processExecutableExtension(contributorName, contributorId, getNamespace(), className, initData, attributeName, this);
	protected Object createExecutableExtension(String attributeName) throws CoreException {		String prop = null;		String executable;		String contributorName = null;		String className = null;		Object initData = null;		int i;		if (attributeName != null)			prop = getAttribute(attributeName);		else {			// property not specified, try as element value			prop = getValue();			if (prop != null) {				prop = prop.trim();				if (prop.equals("")) //$NON-NLS-1$					prop = null;			}		}		if (prop == null) {			// property not defined, try as a child element			ConfigurationElement[] exec;			ConfigurationElement[] parms;			ConfigurationElement element;			Hashtable initParms;			String pname;			exec = getChildren(attributeName);			if (exec.length != 0) {				element = exec[0]; // assumes single definition				contributorName = element.getAttribute("plugin"); //$NON-NLS-1$				className = element.getAttribute("class"); //$NON-NLS-1$				parms = element.getChildren("parameter"); //$NON-NLS-1$				if (parms.length != 0) {					initParms = new Hashtable(parms.length + 1);					for (i = 0; i < parms.length; i++) {						pname = parms[i].getAttribute("name"); //$NON-NLS-1$						if (pname != null)							initParms.put(pname, parms[i].getAttribute("value")); //$NON-NLS-1$					}					if (!initParms.isEmpty())						initData = initParms;				}			} else {				// specified name is not a simple attribute nor child element				throwException(NLS.bind(RegistryMessages.exExt_extDefNotFound, attributeName), null);			}		} else {			// simple property or element value, parse it into its components			i = prop.indexOf(':');			if (i != -1) {				executable = prop.substring(0, i).trim();				initData = prop.substring(i + 1).trim();			} else				executable = prop;			i = executable.indexOf('/');			if (i != -1) {				contributorName = executable.substring(0, i).trim();				className = executable.substring(i + 1).trim();			} else				className = executable;		}		// create a new instance		Object result = null;		// check if alternative processing strategy is present 		result = registry.processExecutableExtension(contributorName, namespaceOwnerId, getNamespace(), className, initData, attributeName, this);		// Check if we have extension adapter and initialize;		// Make the call even if the initialization string is null		try {			// We need to take into account both "old" and "new" style executable extensions 			ConfigurationElementHandle confElementHandle = new ConfigurationElementHandle(registry.getObjectManager(), getObjectId());			if (result instanceof IExecutableExtension) {				((IExecutableExtension) result).setInitializationData(confElementHandle, attributeName, initData);			}			if (registry.compatibilityStrategy != null)				registry.compatibilityStrategy.setInitializationData(result, confElementHandle, attributeName, initData);		} catch (CoreException ce) {			// user code threw exception			throw ce;		} catch (Exception te) {			// user code caused exception			throwException(NLS.bind(RegistryMessages.plugin_initObjectError, getNamespace(), className), te);		}		// Deal with executable extension factories.		if (result instanceof IExecutableExtensionFactory) {			result = ((IExecutableExtensionFactory) result).create();		}		if (registry.compatibilityStrategy != null)			result = registry.compatibilityStrategy.create(result);		return result;	}