[543221] Add cached Executor removal
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/PivotExecutorManager.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/PivotExecutorManager.java
index a6dc2bf..ea90d59 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/PivotExecutorManager.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/PivotExecutorManager.java
@@ -12,6 +12,7 @@
 
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.resource.Resource;
@@ -66,6 +67,24 @@
 		return null;
 	}
 
+	/**
+	 * Remove any OCL Executor from the ResourceSet containing an eObject. This may be necessary to prevent
+	 * re-use of the cached context of an earlier executor after a change to the models.
+	 *
+	 * @since 1.7
+	 */
+	public static void removeAdapter(@NonNull ResourceSet resourceSet) {
+		EList<org.eclipse.emf.common.notify.Adapter> eAdapters = resourceSet.eAdapters();
+		synchronized (eAdapters) {
+			for (int i = eAdapters.size(); --i >= 0; ) {		// Should be at most one, but code to handle more
+				org.eclipse.emf.common.notify.Adapter adapter = eAdapters.get(i);
+				if (adapter instanceof PivotExecutorManager) {
+					eAdapters.remove(i);
+				}
+			}
+		}
+	}
+
 	private static class Adapter extends PivotExecutorManager implements org.eclipse.emf.common.notify.Adapter
 	{
 		private @NonNull ResourceSet resourceSet;
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/PivotUtil.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/PivotUtil.java
index 51cfb8e..661b951 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/PivotUtil.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/PivotUtil.java
@@ -1144,7 +1144,7 @@
 	 *
 	 * @since 1.7
 	 */
-	public static @NonNull Executor getExecutor(@NonNull EObject eObject, @Nullable  Map<Object, Object> validationContext) {
+	public static @NonNull Executor getExecutor(@NonNull EObject eObject, @Nullable Map<Object, Object> validationContext) {
 		if (validationContext != null) {
 			Executor executor = (Executor) validationContext.get(Executor.class);
 			if (executor != null) {
@@ -1883,6 +1883,22 @@
 	}
 
 	/**
+	 * Remove any OCL Executor from the ResourceSet containing an eObject. This may be necessary to prevent
+	 * re-use of the cached context of an earlier executor after a change to the models.
+	 *
+	 * @since 1.7
+	 */
+	public static void removeExecutor(@NonNull EObject eObject) {
+		Resource eResource = eObject.eResource();
+		if (eResource != null) {
+			ResourceSet resourceSet = eResource.getResourceSet();
+			if (resourceSet != null) {
+				PivotExecutorManager.removeAdapter(resourceSet);
+			}
+		}
+	}
+
+	/**
 	 * Rewrite asTree and all its descendants to replace all "?." and "?->" navigations by their safe counterparts.
 	 * @since 1.3
 	 * @deprecated use PivotHelper