pluginId = config.getDeclaringExtension().getNamespace();
pluginId = config.getDeclaringExtension().getNamespaceIdentifier();
	public XmlConstraintDescriptor(IConfigurationElement config)			throws ConstraintExistsException {		this.config = config;		name = config.getAttribute(XmlConfig.A_NAME);		String statusCodeStr = config.getAttribute(XmlConfig.A_STATUS_CODE);		pluginId = config.getDeclaringExtension().getNamespace();				// constraint ID is required to start with contributing plugin ID		id = normalizedId(pluginId, config.getAttribute(XmlConfig.A_ID));				// ensure that I get my default enablement state		setEnabled(!EMFModelValidationPreferences.isConstraintDisabled(id));		int newStatusCode;		try {			newStatusCode = Integer.parseInt(statusCodeStr);		} catch (NumberFormatException nfe) {			newStatusCode = 1;		}		this.statusCode = newStatusCode;		try {			assertNotNull(id, RULE_ID);			assertNotNull(name, RULE_NAME);				parseDescription(config);				parseSeverity(config);			parseTargets(config);			parseMessagePattern(config);				setBody(config.getValue());						ConstraintRegistry.getInstance().register(this);						if (Trace.shouldTrace(EMFModelValidationDebugOptions.CONSTRAINTS)) {				Trace.trace("Initialized constraint " + id); //$NON-NLS-1$			}		} catch (CoreException e) {			Trace.catching(XmlConstraintDescriptor.class, "<init>", e); //$NON-NLS-1$						if (this.id == null) {				this.id = "$error." + System.identityHashCode(this); //$NON-NLS-1$			}						if (this.name == null) {				this.name = this.id;			}						this.statusCode = EMFModelValidationStatusCodes.CONSTRAINT_NOT_INITED;						setError(e);			setMessagePattern(e.getLocalizedMessage());						if (Trace.shouldTrace(EMFModelValidationDebugOptions.CONSTRAINTS)) {				Trace.trace("Initialized constraint " + id //$NON-NLS-1$						+ " as error constraint."); //$NON-NLS-1$			}		}	}