Fix regression re confined bound role: don't unresolve preset binding
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/MessageSend.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/MessageSend.java
index c91c8d6..7ada148 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/MessageSend.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/MessageSend.java
@@ -185,6 +185,7 @@
 	private boolean isDecapsulation = false;
 	// special case: the role method call in a method pushed out to the enclosing team needs special resolving
 	public boolean isPushedOutRoleMethodCall = false;
+	public boolean isGenerated = false;
 // SH}
 
 public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) {
@@ -838,6 +839,9 @@
 		argumentTypes = new TypeBinding[length];
 		for (int i = 0; i < length; i++){
 			Expression argument = this.arguments[i];
+//{ObjectTeams: keep pre-resolved binding inside generated code:
+		  if (!this.isGenerated)
+// SH}
 			if (this.arguments[i].resolvedType != null) 
 				this.arguments[i].unresolve(); // some cleanup before second attempt
 			if (argument instanceof CastExpression) {
@@ -845,10 +849,17 @@
 				argsContainCast = true;
 			}
 			argument.setExpressionContext(INVOCATION_CONTEXT);
-//{ObjectTeams: FIXME: stale: arguments might already be resolved, see e.g. CastExpression.createRoleCheck SH}
+//{ObjectTeams: arguments might already be resolved, see e.g. CastExpression.createRoleCheck
+		  if (argument.resolvedType != null) {
+			argumentTypes[i] = argument.resolvedType;
+		  } else {
+// orig:
 			if ((argumentTypes[i] = argument.resolveType(scope)) == null){
 				argHasError = true;
 			}
+// :giro
+		  }
+// SH}
 			if (sourceLevel >= ClassFileConstants.JDK1_8 && argument.isPolyExpression())
 				polyExpressionSeen = true;
 		}
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/util/AstGenerator.java b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/util/AstGenerator.java
index 653605d..85b4763 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/util/AstGenerator.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/util/AstGenerator.java
@@ -749,6 +749,7 @@
 
 	public MessageSend messageSend(Expression receiver, char[] selector, Expression[] parameters) {
 		MessageSend messageSend = new MessageSend();
+		messageSend.isGenerated = true;
 		messageSend.sourceStart = this.sourceStart;
 		messageSend.sourceEnd   = this.sourceEnd;
 		messageSend.statementEnd = this.sourceEnd;
@@ -790,6 +791,7 @@
 				return this.resolvedType;
 			}
 		};
+		messageSend.isGenerated = true;
 		messageSend.sourceStart = this.sourceStart;
 		messageSend.sourceEnd   = this.sourceEnd;
 		messageSend.statementEnd = this.sourceEnd;
@@ -809,6 +811,7 @@
 				return this.resolvedType = resolvedReturn;
 			}
 		};
+		messageSend.isGenerated = true;
 		messageSend.sourceStart = this.sourceStart;
 		messageSend.sourceEnd   = this.sourceEnd;
 		messageSend.statementEnd = this.sourceEnd;
@@ -836,6 +839,7 @@
 				return this.resolvedType = resolvedReturn;
 			}
 		};
+		messageSend.isGenerated = true;
 		messageSend.sourceStart = this.sourceStart;
 		messageSend.sourceEnd   = this.sourceEnd;
 		messageSend.statementEnd = this.sourceEnd;