[544187] Instrument to confirm that global registries are not modified
when Eclipse is running
diff --git a/plugins/org.eclipse.ocl.pivot/.settings/.api_filters b/plugins/org.eclipse.ocl.pivot/.settings/.api_filters
index d2f2294..34a15e7 100644
--- a/plugins/org.eclipse.ocl.pivot/.settings/.api_filters
+++ b/plugins/org.eclipse.ocl.pivot/.settings/.api_filters
@@ -21127,6 +21127,12 @@
         </filter>
     </resource>
     <resource path="src/org/eclipse/ocl/pivot/internal/resource/StandaloneProjectMap.java" type="org.eclipse.ocl.pivot.internal.resource.StandaloneProjectMap">
+        <filter id="336658481">
+            <message_arguments>
+                <message_argument value="org.eclipse.ocl.pivot.internal.resource.StandaloneProjectMap"/>
+                <message_argument value="TEST_MAY_INITIALIZE_GLOBAL_FACILITIES"/>
+            </message_arguments>
+        </filter>
         <filter comment="Bug 512402 workaround" id="576725006">
             <message_arguments>
                 <message_argument value="ProjectManager"/>
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/resource/ProjectMap.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/resource/ProjectMap.java
index eb2f833..ada3088 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/resource/ProjectMap.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/resource/ProjectMap.java
@@ -186,6 +186,12 @@
 	}
 
 	@Override
+	public void initializeResourceSet(@Nullable ResourceSet resourceSet) {
+		assert (resourceSet != null) || !EMFPlugin.IS_ECLIPSE_RUNNING;		// Diagnosing for Bug 544187.
+		super.initializeResourceSet(resourceSet);
+	}
+
+	@Override
 	public synchronized void initializeURIMap(@Nullable ResourceSet resourceSet) {
 		super.initializeURIMap(resourceSet);
 		if (EMFPlugin.IS_ECLIPSE_RUNNING) {
@@ -289,6 +295,7 @@
 		boolean isOpen = project.isOpen();
 		if (wasOpen) {
 			if (!isOpen) {
+				@SuppressWarnings("unused")
 				IProjectDescriptor projectDescriptor = projectDescriptors.remove(projectName);
 				//	projectDescriptor.dispose();
 				System.out.println(NameUtil.debugSimpleName(this) + " closing " + projectName);
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/resource/StandaloneProjectMap.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/resource/StandaloneProjectMap.java
index 0ed30d3..5889981 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/resource/StandaloneProjectMap.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/resource/StandaloneProjectMap.java
@@ -229,6 +229,15 @@
 	public static final @NonNull TracingOption PROJECT_MAP_INSTALL = new TracingOption(PLUGIN_ID, "projectMap/install");
 	public static final @NonNull TracingOption PROJECT_MAP_RESOLVE = new TracingOption(PLUGIN_ID, "projectMap/resolve");
 
+	/**
+	 * Test flag that normally conforms that no attempt is made to intrerfere with global registries
+	 * when Eclipse is running. IT is automatically false when running standalone. It may be set false for testing.
+	 * See Bug 544187.
+	 *
+	 * @since 1.7
+	 */
+	public static boolean TEST_MAY_INITIALIZE_GLOBAL_FACILITIES = !EMFPlugin.IS_ECLIPSE_RUNNING;
+
 	{
 		//		PROJECT_MAP_ADD_EPACKAGE.setState(true);
 		//		PROJECT_MAP_ADD_GEN_MODEL.setState(true);
@@ -2268,6 +2277,7 @@
 	 * {@link org.eclipse.emf.ecore.EPackage.Registry#INSTANCE} if resourceSet is null.
 	 */
 	public static EPackage.@NonNull Registry getPackageRegistry(@Nullable ResourceSet resourceSet) {
+		assert (resourceSet != null) || TEST_MAY_INITIALIZE_GLOBAL_FACILITIES;
 		if (resourceSet == null) {
 			@SuppressWarnings("null") EPackage.@NonNull Registry globalRegistry = EPackage.Registry.INSTANCE;
 			return globalRegistry;
@@ -2282,6 +2292,7 @@
 	 * {@link org.eclipse.emf.ecore.resource.Resource.Factory.Registry#INSTANCE} if resourceSet is null.
 	 */
 	public static Resource.Factory.Registry getResourceFactoryRegistry(@Nullable ResourceSet resourceSet) {
+		assert (resourceSet != null) || TEST_MAY_INITIALIZE_GLOBAL_FACILITIES;
 		return resourceSet != null
 				? resourceSet.getResourceFactoryRegistry()
 					: Resource.Factory.Registry.INSTANCE;
@@ -2293,6 +2304,7 @@
 	 */
 	@SuppressWarnings("null")
 	public static @NonNull URIConverter getURIConverter(@Nullable ResourceSet resourceSet) {
+		assert (resourceSet != null) || TEST_MAY_INITIALIZE_GLOBAL_FACILITIES;
 		return resourceSet != null ? resourceSet.getURIConverter() : URIConverter.INSTANCE;
 	}
 
@@ -2302,6 +2314,7 @@
 	 */
 	@SuppressWarnings("null")
 	public static @NonNull Map<URI, URI> getURIMap(@Nullable ResourceSet resourceSet) {
+		assert (resourceSet != null) || TEST_MAY_INITIALIZE_GLOBAL_FACILITIES;
 		return resourceSet != null ? resourceSet.getURIConverter().getURIMap() : URIConverter.URI_MAP;
 	}
 
diff --git a/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/test/ecore/ProjectMapTest.java b/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/test/ecore/ProjectMapTest.java
index 6c55e80..de2d1a7 100644
--- a/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/test/ecore/ProjectMapTest.java
+++ b/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/test/ecore/ProjectMapTest.java
@@ -11,12 +11,14 @@
 
 package org.eclipse.ocl.examples.test.ecore;
 
+import org.eclipse.emf.common.EMFPlugin;
 import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.emf.ecore.EcorePackage;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.ocl.examples.xtext.tests.TestCaseAppender;
 import org.eclipse.ocl.expressions.ExpressionsPackage;
 import org.eclipse.ocl.pivot.PivotPackage;
+import org.eclipse.ocl.pivot.internal.resource.StandaloneProjectMap;
 
 /**
  */
@@ -34,6 +36,13 @@
 //		StandaloneProjectMap.PROJECT_MAP_RESOLVE.setState(true);
 		super.setUp();
     	TestCaseAppender.INSTANCE.install();
+    	StandaloneProjectMap.TEST_MAY_INITIALIZE_GLOBAL_FACILITIES = true;
+	}
+
+	@Override
+	protected void tearDown() throws Exception {
+    	StandaloneProjectMap.TEST_MAY_INITIALIZE_GLOBAL_FACILITIES = !EMFPlugin.IS_ECLIPSE_RUNNING;
+		super.tearDown();
 	}
 
 	public void testProjectMap_Ecore_LoadBoth() {					// Almost certainly a workspace project; always a project on Hudson
@@ -41,120 +50,120 @@
 		String modelPath = project + "/model/Ecore.ecore";
 		doTestProjectMap_LoadBoth(EcorePackage.eINSTANCE, project, modelPath, "/");
 	}
-	
+
 	public void testProjectMap_Ecore_LoadDefault() {					// Almost certainly a workspace project; always a project on Hudson
 		@SuppressWarnings("null")@NonNull String project = EcorePackage.class.getPackage().getName();
 		String modelPath = project + "/model/Ecore.ecore";
 		doTestProjectMap_LoadDefault(EcorePackage.eINSTANCE, project, modelPath, "/", true);
 	}
-	
+
 	public void testProjectMap_Ecore_LoadEPackage() {					// Almost certainly a workspace project; always a project on Hudson
 		@SuppressWarnings("null")@NonNull String project = EcorePackage.class.getPackage().getName();
 		String modelPath = project + "/model/Ecore.ecore";
 		doTestProjectMap_LoadEPackage(EcorePackage.eINSTANCE, project, modelPath, "/");
 	}
-	
+
 	public void testProjectMap_Ecore_LoadFirst() {					// Almost certainly a workspace project; always a project on Hudson
 		@SuppressWarnings("null")@NonNull String project = EcorePackage.class.getPackage().getName();
 		String modelPath = project + "/model/Ecore.ecore";
 		doTestProjectMap_LoadFirst(EcorePackage.eINSTANCE, project, modelPath, "/", true);
 	}
-	
+
 	public void testProjectMap_Ecore_LoadModel() {					// Almost certainly a workspace project; always a project on Hudson
 		@SuppressWarnings("null")@NonNull String project = EcorePackage.class.getPackage().getName();
 		String modelPath = project + "/model/Ecore.ecore";
 		doTestProjectMap_LoadModel(EcorePackage.eINSTANCE, project, modelPath, "/", true);
 	}
-	
+
 	public void testProjectMap_JavaVMTypes_LoadBoth() {					// Almost certainly a workspace project; always a project on Hudson
 		EPackage.Registry.INSTANCE.put(org.eclipse.xtext.common.types.TypesPackage.eNS_URI, org.eclipse.xtext.common.types.TypesPackage.eINSTANCE);
 		String project = "org.eclipse.xtext.common.types";
 		String modelPath = project + "/model/JavaVMTypes.ecore";
 		doTestProjectMap_LoadBoth(org.eclipse.xtext.common.types.TypesPackage.eINSTANCE, project, modelPath, "/");
 	}
-	
+
 	public void testProjectMap_JavaVMTypes_LoadDefault() {					// Almost certainly a workspace project; always a project on Hudson
 		EPackage.Registry.INSTANCE.put(org.eclipse.xtext.common.types.TypesPackage.eNS_URI, org.eclipse.xtext.common.types.TypesPackage.eINSTANCE);
 		String project = "org.eclipse.xtext.common.types";
 		String modelPath = project + "/model/JavaVMTypes.ecore";
 		doTestProjectMap_LoadDefault(org.eclipse.xtext.common.types.TypesPackage.eINSTANCE, project, modelPath, "/", false);
 	}
-	
+
 	public void testProjectMap_JavaVMTypes_LoadEPackage() {					// Almost certainly a workspace project; always a project on Hudson
 		EPackage.Registry.INSTANCE.put(org.eclipse.xtext.common.types.TypesPackage.eNS_URI, org.eclipse.xtext.common.types.TypesPackage.eINSTANCE);
 		String project = "org.eclipse.xtext.common.types";
 		String modelPath = project + "/model/JavaVMTypes.ecore";
 		doTestProjectMap_LoadEPackage(org.eclipse.xtext.common.types.TypesPackage.eINSTANCE, project, modelPath, "/");
 	}
-	
+
 	public void testProjectMap_JavaVMTypes_LoadFirst() {					// Almost certainly a workspace project; always a project on Hudson
 		EPackage.Registry.INSTANCE.put(org.eclipse.xtext.common.types.TypesPackage.eNS_URI, org.eclipse.xtext.common.types.TypesPackage.eINSTANCE);
 		String project = "org.eclipse.xtext.common.types";
 		String modelPath = project + "/model/JavaVMTypes.ecore";
 		doTestProjectMap_LoadFirst(org.eclipse.xtext.common.types.TypesPackage.eINSTANCE, project, modelPath, "/", false);
 	}
-	
+
 	public void testProjectMap_JavaVMTypes_LoadModel() {					// Almost certainly a workspace project; always a project on Hudson
 		EPackage.Registry.INSTANCE.put(org.eclipse.xtext.common.types.TypesPackage.eNS_URI, org.eclipse.xtext.common.types.TypesPackage.eINSTANCE);
 		String project = "org.eclipse.xtext.common.types";
 		String modelPath = project + "/model/JavaVMTypes.ecore";
 		doTestProjectMap_LoadModel(org.eclipse.xtext.common.types.TypesPackage.eINSTANCE, project, modelPath, "/", false);
 	}
-	
+
 	public void testProjectMap_Pivot_LoadBoth() {					// Almost certainly a workspace project; always a project on Hudson
 		String project = "org.eclipse.ocl.pivot";
 		String modelPath = project + "/model/Pivot.ecore";
 		doTestProjectMap_LoadBoth(PivotPackage.eINSTANCE, project, modelPath, "/");
 	}
-	
+
 	public void testProjectMap_Pivot_LoadDefault() {					// Almost certainly a workspace project; always a project on Hudson
 		String project = "org.eclipse.ocl.pivot";
 		String modelPath = project + "/model/Pivot.ecore";
 		doTestProjectMap_LoadDefault(PivotPackage.eINSTANCE, project, modelPath, "/", false);
 	}
-	
+
 	public void testProjectMap_Pivot_LoadEPackage() {					// Almost certainly a workspace project; always a project on Hudson
 		String project = "org.eclipse.ocl.pivot";
 		String modelPath = project + "/model/Pivot.ecore";
 		doTestProjectMap_LoadEPackage(PivotPackage.eINSTANCE, project, modelPath, "/");
 	}
-	
+
 	public void testProjectMap_Pivot_LoadFirst() {					// Almost certainly a workspace project; always a project on Hudson
 		String project = "org.eclipse.ocl.pivot";
 		String modelPath = project + "/model/Pivot.ecore";
 		doTestProjectMap_LoadFirst(PivotPackage.eINSTANCE, project, modelPath, "/", false);
 	}
-	
+
 	public void testProjectMap_Pivot_LoadModel() {					// Almost certainly a workspace project; always a project on Hudson
 		String project = "org.eclipse.ocl.pivot";
 		String modelPath = project + "/model/Pivot.ecore";
 		doTestProjectMap_LoadModel(PivotPackage.eINSTANCE, project, modelPath, "/", false);
 	}
-	
+
 	public void testProjectMap_OCL_LoadBoth() {					// Almost certainly a workspace project; always a project on Hudson
 		@SuppressWarnings("null")@NonNull String project = org.eclipse.ocl.OCL.class.getPackage().getName();
 		String modelPath = project + "/model/OCL.ecore";
 		doTestProjectMap_LoadBoth(ExpressionsPackage.eINSTANCE, project, modelPath, "//expressions");
 	}
-	
+
 	public void testProjectMap_OCL_LoadDefault() {					// Almost certainly a workspace project; always a project on Hudson
 		@SuppressWarnings("null")@NonNull String project = org.eclipse.ocl.OCL.class.getPackage().getName();
 		String modelPath = project + "/model/OCL.ecore";
 		doTestProjectMap_LoadDefault(ExpressionsPackage.eINSTANCE, project, modelPath, "//expressions", false);
 	}
-	
+
 	public void testProjectMap_OCL_LoadEPackage() {					// Almost certainly a workspace project; always a project on Hudson
 		@SuppressWarnings("null")@NonNull String project = org.eclipse.ocl.OCL.class.getPackage().getName();
 		String modelPath = project + "/model/OCL.ecore";
 		doTestProjectMap_LoadEPackage(ExpressionsPackage.eINSTANCE, project, modelPath, "//expressions");
 	}
-	
+
 	public void testProjectMap_OCL_LoadFirst() {					// Almost certainly a workspace project; always a project on Hudson
 		@SuppressWarnings("null")@NonNull String project = org.eclipse.ocl.OCL.class.getPackage().getName();
 		String modelPath = project + "/model/OCL.ecore";
 		doTestProjectMap_LoadFirst(ExpressionsPackage.eINSTANCE, project, modelPath, "//expressions", false);
 	}
-	
+
 	public void testProjectMap_OCL_LoadModel() {					// Almost certainly a workspace project; always a project on Hudson
 		@SuppressWarnings("null")@NonNull String project = org.eclipse.ocl.OCL.class.getPackage().getName();
 		String modelPath = project + "/model/OCL.ecore";