package org.dresdenocl.language.ocl.resource.ocl; public class OclReferenceResolveHelperProvider { private static IOclReferenceResolveHelper oclReferenceResolveHelper; static { if (org.eclipse.core.runtime.Platform.isRunning()) { // find default load option providers org.eclipse.core.runtime.IExtensionRegistry extensionRegistry = org.eclipse.core.runtime.Platform.getExtensionRegistry(); org.eclipse.core.runtime.IConfigurationElement configurationElements[] = extensionRegistry .getConfigurationElementsFor(org.dresdenocl.language.ocl.resource.ocl.mopp.OclPlugin.EP_DEFAULT_LOAD_OPTIONS_ID); for (org.eclipse.core.runtime.IConfigurationElement element : configurationElements) { try { org.dresdenocl.language.ocl.resource.ocl.IOclOptionProvider provider = (org.dresdenocl.language.ocl.resource.ocl.IOclOptionProvider) element .createExecutableExtension("class"); final java.util.Map<?, ?> options = provider.getOptions(); final java.util.Collection<?> keys = options.keySet(); for (java.lang.Object key : keys) { if (key.equals("ReferenceResolveHelper")) { oclReferenceResolveHelper = (IOclReferenceResolveHelper) options.get(key); } } } catch (org.eclipse.core.runtime.CoreException ce) { org.dresdenocl.language.ocl.resource.ocl.mopp.OclPlugin .logError("Exception while getting default options.", ce); throw new IllegalStateException( "An error occurred during loading the OclReferenceResolveHelper " + "from the registry. Static semantics analysis cannot be performed correctly.", ce); } } if (oclReferenceResolveHelper == null) throw new IllegalStateException( "An error occurred during loading the OclReferenceResolveHelper " + "from the registry. Static semantics analysis cannot be performed correctly."); } } public static IOclReferenceResolveHelper getOclReferenceResolveHelper() { if (oclReferenceResolveHelper == null) throw new IllegalStateException( "The oclReferenceResolveHelper must be set. If you are using a " + "standalone version of Dresden OCL make sure to call " + "OclReferenceResolveHelperProvider#" + "setOclReferenceResolverHelper(OclReferenceResolveHelper)"); return oclReferenceResolveHelper; } /** * This method is used in the standalone version of Dresden OCL as the * {@link OclReferenceResolveHelperProvider} cannot be set via the extension * registry. * * @param oclReferenceResolveHelper * the {@link OclReferenceResolveHelperProvider} to set */ public static void setOclReferenceResolveHelper( IOclReferenceResolveHelper oclReferenceResolveHelper) { OclReferenceResolveHelperProvider.oclReferenceResolveHelper = oclReferenceResolveHelper; } }