Bug 469204: [otdre] resolve error in generated _OT$callReplace
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/mappings/CallinImplementorDyn.java b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/mappings/CallinImplementorDyn.java
index 300b68f..2e821ac 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/mappings/CallinImplementorDyn.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/mappings/CallinImplementorDyn.java
@@ -187,7 +187,8 @@
MethodDeclaration wrapperDeclaration,
TypeBinding[] implParameters,
int idx,
- final MethodSpec sourceMethodSpec)
+ final MethodSpec sourceMethodSpec,
+ char[] roleVar)
{
final MethodSpec implementationMethodSpec = methodMapping.getImplementationMethodSpec();
@@ -229,7 +230,7 @@
{
// expectedType is a role of the current role(=team),
// use the role as the receiver for the lift call:
- receiver = gen.singleNameReference(ROLE_VAR_NAME);
+ receiver = gen.singleNameReference(roleVar);
}
if (sourceMethodSpec.hasSignature) {
if (sourceMethodSpec.argNeedsTranslation(srcIdx)) {
@@ -582,7 +583,8 @@
(MethodDeclaration) methodDecl,
callinDecl.getRoleMethod().parameters,
i+idx,
- baseSpec);
+ baseSpec,
+ roleVar);
if (arg == null) {
hasArgError = true;
continue; // keep going to find problems with other args, too.
diff --git a/testplugins/org.eclipse.objectteams.otdt.tests/otjld/org/eclipse/objectteams/otdt/tests/otjld/callinbinding/CallinParameterMapping_LiftingAndLowering.java b/testplugins/org.eclipse.objectteams.otdt.tests/otjld/org/eclipse/objectteams/otdt/tests/otjld/callinbinding/CallinParameterMapping_LiftingAndLowering.java
index 1b1ff54..489af32 100644
--- a/testplugins/org.eclipse.objectteams.otdt.tests/otjld/org/eclipse/objectteams/otdt/tests/otjld/callinbinding/CallinParameterMapping_LiftingAndLowering.java
+++ b/testplugins/org.eclipse.objectteams.otdt.tests/otjld/org/eclipse/objectteams/otdt/tests/otjld/callinbinding/CallinParameterMapping_LiftingAndLowering.java
@@ -2051,4 +2051,35 @@
},
"4.4(a)");
}
+
+ public void testBug469204() {
+ runConformTest(
+ new String[] {
+ "TBug469204.java",
+ "public class TBug469204 {\n" +
+ " public static void main(String... args) {\n" +
+ " new TeamBug469204().activate();\n" +
+ " new Base469204_2().bm(new Base469204_1());\n" +
+ " }\n" +
+ "}\n",
+ "TeamBug469204.java",
+ "public team class TeamBug469204 {\n" +
+ " protected team class Mid playedBy Base469204_2 {\n" +
+ " protected class Inner playedBy Base469204_1 {\n" +
+ " }\n" +
+ " callin void rm(Inner i) { System.out.print(i.getClass().getName()); }\n" +
+ " void rm(Inner i) <- replace void bm(Base469204_1 b) with {\n" +
+ " i <- b\n" +
+ " }\n" +
+ " }\n" +
+ "}\n",
+ "Base469204_1.java",
+ "public class Base469204_1 {}\n",
+ "Base469204_2.java",
+ "public class Base469204_2 {\n" +
+ " void bm(Base469204_1 b) {}\n" +
+ "}\n"
+ },
+ "TeamBug469204$__OT__Mid$__OT__Inner");
+ }
}