Bug 397182 - Prepare OTDT for new (dynamic) weaver
- one more situation needing cast from IBoundBase to specific base
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/statemachine/transformer/SwitchOnBaseTypeGenerator.java b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/statemachine/transformer/SwitchOnBaseTypeGenerator.java
index c8fb868..ea75348 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/statemachine/transformer/SwitchOnBaseTypeGenerator.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/statemachine/transformer/SwitchOnBaseTypeGenerator.java
@@ -37,7 +37,6 @@
  * Creates an instanceof cascade as needed for lifting and for base predicate checks.
  *
  * @author stephan
- * @version $Id: SwitchOnBaseTypeGenerator.java 23417 2010-02-03 20:13:55Z stephan $
  */
 public abstract class SwitchOnBaseTypeGenerator implements IOTConstants {
 
@@ -96,11 +95,13 @@
 		
 		Statement[] stmts = new Statement[2];
 	    Expression baseArg = gen.singleNameReference(baseVarName());
+	    ReferenceBinding castType = null;
 	    if (staticRoleType.baseclass() instanceof WeakenedTypeBinding)
-	    	baseArg = gen.castExpression(
-	    						baseArg,
-	    						gen.typeReference(((WeakenedTypeBinding)staticRoleType.baseclass()).getStrongType()),
-	    						CastExpression.RAW);
+	    	castType = ((WeakenedTypeBinding)staticRoleType.baseclass()).getStrongType();
+    	else if (hasBindingAmbiguity)
+    		castType = staticBaseType;
+	    if (castType != null)
+	    	baseArg = gen.castExpression(baseArg, gen.typeReference(castType), CastExpression.RAW);
 	    char[] LOCAL_BASE_NAME = "_OT$local$base".toCharArray(); //$NON-NLS-1$
 		stmts[0] = gen.localVariable(LOCAL_BASE_NAME, gen.baseclassReference(staticBaseType), baseArg);