Bug 384992 - [java8] adopt grammar changes for Java 8 from JDT/Core
- adjust to new Map#remove(Object,Object)
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/statemachine/transformer/RoleMigrationImplementor.java b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/statemachine/transformer/RoleMigrationImplementor.java
index 838a9dd..b133889 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/statemachine/transformer/RoleMigrationImplementor.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/statemachine/transformer/RoleMigrationImplementor.java
@@ -307,7 +307,7 @@
 		FieldBinding baseField = roleBinding.getField(IOTConstants._OT_BASE, true);
 		// accessing the cache (using remove() and put()):
 		ReferenceBinding cacheTypeBinding = (ReferenceBinding) scope.getType(IOTConstants.WEAK_HASH_MAP, 3);
-		MethodBinding remove = cacheTypeBinding.getMethod(scope, "remove".toCharArray()); //$NON-NLS-1$
+		MethodBinding remove = getMethod(cacheTypeBinding, "remove".toCharArray(), 1); //$NON-NLS-1$
 		MethodBinding put    = cacheTypeBinding.getMethod(scope, "put".toCharArray()); //$NON-NLS-1$
 		// accessing the base object (using _OT$removeRole() and _OT$addRole()):
 		ReferenceBinding iboundBase = (ReferenceBinding) scope.getType(IOTConstants.ORG_OBJECTTEAMS_IBOUNDBASE, 3);
@@ -350,6 +350,21 @@
 
 		codeStream.return_();
 	}
+	
+	static MethodBinding getMethod(ReferenceBinding declaringClass, char[] selector, int numParams) {
+		MethodBinding[] methods = declaringClass.getMethods(selector);
+		MethodBinding found = null;
+		for (int i = 0; i < methods.length; i++) {
+			if (methods[i].parameters.length == numParams) {
+				if (found != null)
+					throw new IncompatibleClassChangeError("More than 1 "+String.valueOf(selector)+" method found"); //$NON-NLS-1$ //$NON-NLS-2$
+				found = methods[i];
+			}
+		}
+		if (found == null)
+			throw new IncompatibleClassChangeError("Required "+String.valueOf(selector)+" method not found"); //$NON-NLS-1$ //$NON-NLS-2$
+		return found;
+	}
 
 	// pre: call target (base) is on stack
 	static void genAddOrRemoveRole(CodeStream codeStream, Scope scope, ReferenceBinding iboundBase, boolean isAdding) {