[551443] Clarify getEnvironmentFactory
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/utilities/PivotUtilInternal.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/utilities/PivotUtilInternal.java
index 01bd827..d19495c 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/utilities/PivotUtilInternal.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/utilities/PivotUtilInternal.java
@@ -71,14 +71,20 @@
import org.eclipse.ocl.pivot.internal.manager.MetamodelManagerInternal;
import org.eclipse.ocl.pivot.internal.manager.PivotExecutorManager;
import org.eclipse.ocl.pivot.internal.manager.PivotMetamodelManager;
+import org.eclipse.ocl.pivot.internal.resource.ASResourceFactoryRegistry;
import org.eclipse.ocl.pivot.internal.resource.EnvironmentFactoryAdapter;
import org.eclipse.ocl.pivot.internal.resource.OCLAdapter;
+import org.eclipse.ocl.pivot.internal.resource.ProjectMap;
import org.eclipse.ocl.pivot.internal.scoping.Attribution;
import org.eclipse.ocl.pivot.internal.scoping.NullAttribution;
import org.eclipse.ocl.pivot.library.LibraryFeature;
+import org.eclipse.ocl.pivot.resource.ASResource;
+import org.eclipse.ocl.pivot.resource.CSResource;
+import org.eclipse.ocl.pivot.resource.ProjectManager;
import org.eclipse.ocl.pivot.utilities.ClassUtil;
import org.eclipse.ocl.pivot.utilities.EnvironmentFactory;
import org.eclipse.ocl.pivot.utilities.NameUtil;
+import org.eclipse.ocl.pivot.utilities.OCL;
import org.eclipse.ocl.pivot.utilities.PivotConstants;
import org.eclipse.ocl.pivot.utilities.PivotHelper;
import org.eclipse.ocl.pivot.utilities.PivotUtil;
@@ -263,17 +269,29 @@
}
public static @NonNull EnvironmentFactoryInternal getEnvironmentFactory(@NonNull Resource resource) {
- EnvironmentFactoryInternal environmentFactory = PivotUtilInternal.findEnvironmentFactory(resource);
- if (environmentFactory == null) {
- ResourceSet resourceSet = resource.getResourceSet();
- if (resourceSet != null) {
- environmentFactory = OCLAdapter.createEnvironmentFactory(resourceSet);
+ if (resource instanceof ASResource) { // ASResource has a MetamodelManager adapting its ResourceSet
+ ResourceSet resourceSet = ClassUtil.nonNullState(resource.getResourceSet());
+ PivotMetamodelManager metamodelManager = PivotMetamodelManager.findAdapter(resourceSet);
+ if (metamodelManager != null) { // The metamodelManager may be missing if a *.oclas is opened by EMF
+ return metamodelManager.getEnvironmentFactory();
}
- else {
- environmentFactory = OCLAdapter.createEnvironmentFactory(resource);
+ ProjectManager projectManager = ProjectMap.findAdapter(resourceSet);
+ if (projectManager == null) {
+ projectManager = OCL.CLASS_PATH;
}
+ return ASResourceFactoryRegistry.INSTANCE.createEnvironmentFactory(projectManager, null, resourceSet);
}
- return environmentFactory;
+ else if (resource instanceof CSResource) { // CSResource has an EnvironmentFactoryAdapter adapting its ResourceSet
+ EnvironmentFactoryInternal environmentFactory = PivotUtilInternal.findEnvironmentFactory(resource);
+ if (environmentFactory != null) { // The environmentFactory may be missing for an Xtext ResourceSet
+ return environmentFactory;
+ }
+ ResourceSet resourceSet = ClassUtil.nonNullState(resource.getResourceSet());
+ return OCLAdapter.createEnvironmentFactory(resourceSet);
+ }
+ else { // other (e.g. ecore/genmodel) must have an EnvironmentFactoryAdapter adapting its ResourceSet
+ return ClassUtil.nonNullState(PivotUtilInternal.findEnvironmentFactory(resource));
+ }
}
/** @deprecated use getExecutor() */