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");
+    }
 }