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;