bug 473392 - [compiler][otdre] ClassCastException when callin is
suppressed by base predicate but result lifting still happens 
- one more fix: avoid duplicate var "result"
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 374875e..1fc05d9 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
@@ -867,6 +867,7 @@
 		List<Statement> swStatements = new ArrayList<Statement>(); 
 		for (CallinMappingDeclaration mapping : callinDecls) {
 			int nLabels = 0;
+			char[] resultVar = RESULT;
 			for (MethodSpec baseSpec : mapping.baseMethodSpecs) {
 				List<Statement> caseBlockStats = new ArrayList<Statement>();
 				caseBlockStats.add(gen.caseStatement(gen.intLiteral(baseSpec.getCallinId(aTeam))));					// case baseSpecCallinId:
@@ -936,12 +937,13 @@
 											currentRole.baseclass(), currentRole, false)
 									// TODO: might want to extend the signature of callNext to pass the current role to avoid this lifting?
 						: genTeamThis(gen, returnTypes[0]);
-					caseBlockStats.add(gen.localVariable(RESULT, gen.qualifiedTypeReference(TypeConstants.JAVA_LANG_OBJECT), result));
+					resultVar = CharOperation.append(resultVar, '$');
+					caseBlockStats.add(gen.localVariable(resultVar, gen.qualifiedTypeReference(TypeConstants.JAVA_LANG_OBJECT), result));
 					caseBlockStats.add(gen.ifStatement(gen.singleNameReference(IS_BASE_CALL), 
-							gen.assignment(gen.singleNameReference(RESULT), 
+							gen.assignment(gen.singleNameReference(resultVar), 
 											Lifting.liftCall(mapping.scope,
 											  liftReceiver,
-											  gen.castExpression(gen.singleNameReference(RESULT),
+											  gen.castExpression(gen.singleNameReference(resultVar),
 													  			 gen.baseclassReference(returnTypes[1]),
 													  			 CastExpression.RAW),
 											  returnTypes[1],
@@ -949,7 +951,7 @@
 											  false,
 											  gen)),
 							null));
-					result = gen.singleNameReference(RESULT);
+					result = gen.singleNameReference(resultVar);
 				}
 				caseBlockStats.add(gen.returnStatement(result));