Bug 443575 - [otdre] compile error from code generated for a base
predicate
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 ea75348..80f5f7d 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
@@ -25,6 +25,7 @@
 import org.eclipse.jdt.internal.compiler.ast.Expression;
 import org.eclipse.jdt.internal.compiler.ast.IfStatement;
 import org.eclipse.jdt.internal.compiler.ast.Statement;
+import org.eclipse.jdt.internal.compiler.impl.CompilerOptions.WeavingScheme;
 import org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding;
 import org.eclipse.objectteams.otdt.core.compiler.IOTConstants;
 import org.eclipse.objectteams.otdt.internal.core.compiler.lookup.WeakenedTypeBinding;
@@ -98,7 +99,7 @@
 	    ReferenceBinding castType = null;
 	    if (staticRoleType.baseclass() instanceof WeakenedTypeBinding)
 	    	castType = ((WeakenedTypeBinding)staticRoleType.baseclass()).getStrongType();
-    	else if (hasBindingAmbiguity)
+    	else if (hasBindingAmbiguity || caseObjects[0].getWeavingScheme() == WeavingScheme.OTDRE)
     		castType = staticBaseType;
 	    if (castType != null)
 	    	baseArg = gen.castExpression(baseArg, gen.typeReference(castType), CastExpression.RAW);
diff --git a/testplugins/org.eclipse.objectteams.otdt.tests/otjld/org/eclipse/objectteams/otdt/tests/otjld/teamactivation/Predicates.java b/testplugins/org.eclipse.objectteams.otdt.tests/otjld/org/eclipse/objectteams/otdt/tests/otjld/teamactivation/Predicates.java
index 655eeef..b5523ab 100644
--- a/testplugins/org.eclipse.objectteams.otdt.tests/otjld/org/eclipse/objectteams/otdt/tests/otjld/teamactivation/Predicates.java
+++ b/testplugins/org.eclipse.objectteams.otdt.tests/otjld/org/eclipse/objectteams/otdt/tests/otjld/teamactivation/Predicates.java
@@ -3203,4 +3203,45 @@
             customOptions,
             null/*no custom requestor*/);
     }
+
+    public void testBugXYZ() {
+    	runConformTest(
+    		new String[] {
+    			"bugxyz/Main.java",
+    			"package bugxyz;\n" + 
+    			"\n" +
+    			"public class Main {\n" + 
+    			"	public static void main(String[] args) {\n" + 
+    			"		new T1().activate();\n" + 
+    			"		new B1().foo();\n" + 
+    			"	}\n" + 
+    			"}\n",
+    			"bugxzy/B1.java",
+    			"package bugxyz;\n" + 
+    			"\n" + 
+    			"public class B1 {\n" + 
+    			"	boolean test() { return true; }\n" + 
+    			"	void foo() { }\n" + 
+    			"}\n",
+    			"bugxzy/B2.java",
+    			"package bugxyz;\n" + 
+    			"\n" + 
+    			"public class B2 extends B1 {}\n",
+    			"bugxyz/T1.java",
+    			"package bugxyz;\n" + 
+    			"\n" + 
+    			"public team class T1 {\n" + 
+    			"	protected class R1 playedBy B1 {\n" + 
+    			"		bar <- before foo\n" + 
+    			"			base when (base.test());\n" + 
+    			"\n" + 
+    			"		private void bar() {\n" + 
+    			"			System.out.println(\"bar\");\n" + 
+    			"		}\n" + 
+    			"	}\n" + 
+    			"	protected class R2 extends R1 playedBy B2 { }\n" + 
+    			"}\n"
+    		},
+    		"bar");
+    }
 }