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);