Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephan Herrmann2012-10-06 22:03:29 -0400
committerStephan Herrmann2012-10-06 22:03:29 -0400
commit89ecdad2393f5918986c1be79e6300429bb03ab5 (patch)
tree1f8489c10168051f7eef3147c435fa97793d0b70
parent5775ef0f065a3864d10c9a5576a4b2b6365b785d (diff)
downloadorg.eclipse.objectteams-89ecdad2393f5918986c1be79e6300429bb03ab5.tar.gz
org.eclipse.objectteams-89ecdad2393f5918986c1be79e6300429bb03ab5.tar.xz
org.eclipse.objectteams-89ecdad2393f5918986c1be79e6300429bb03ab5.zip
Bug 391290 - Internal compiler error/Corrupt byte code
-rw-r--r--org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/statemachine/transformer/StandardElementGenerator.java4
-rw-r--r--testplugins/org.eclipse.objectteams.otdt.tests/otjld/org/eclipse/objectteams/otdt/tests/otjld/roleplaying/LiftingAndLowering.java61
2 files changed, 65 insertions, 0 deletions
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/statemachine/transformer/StandardElementGenerator.java b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/statemachine/transformer/StandardElementGenerator.java
index 7bdca6277..6b9b49fbc 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/statemachine/transformer/StandardElementGenerator.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/statemachine/transformer/StandardElementGenerator.java
@@ -730,6 +730,10 @@ public class StandardElementGenerator {
getBase.typeParameters = new TypeParameter[]{methodParam};
AstEdit.addMethod(roleType, getBase);
+ for (ReferenceBinding tsuperRole : roleType.getRoleModel().getTSuperRoleBindings()) {
+ for (MethodBinding tsuperMethod : tsuperRole.getMethods(_OT_GETBASE))
+ getBase.binding.addOverriddenTSuper(tsuperMethod);
+ }
if (methodParam != null)
roleType.getRoleModel().unimplementedGetBase = getBase.binding;
diff --git a/testplugins/org.eclipse.objectteams.otdt.tests/otjld/org/eclipse/objectteams/otdt/tests/otjld/roleplaying/LiftingAndLowering.java b/testplugins/org.eclipse.objectteams.otdt.tests/otjld/org/eclipse/objectteams/otdt/tests/otjld/roleplaying/LiftingAndLowering.java
index 1b6ad6f05..d323f10a9 100644
--- a/testplugins/org.eclipse.objectteams.otdt.tests/otjld/org/eclipse/objectteams/otdt/tests/otjld/roleplaying/LiftingAndLowering.java
+++ b/testplugins/org.eclipse.objectteams.otdt.tests/otjld/org/eclipse/objectteams/otdt/tests/otjld/roleplaying/LiftingAndLowering.java
@@ -4861,6 +4861,67 @@ public class LiftingAndLowering extends AbstractOTJLDTest {
"OK");
}
+ // Bug 391290 - Internal compiler error/Corrupt byte code
+ // witness for "tsuper has corrupt byte code" regarding call to _OT$getBase()
+ public void test2229_explicitLowering4() {
+ runConformTest(
+ new String[] {
+ "Team2229el4_2.java",
+ "public team class Team2229el4_2 extends Team2229el4_1 {\n" +
+ " public static void main(String[] args) {\n" +
+ " new Team2229el4_2().test(new T2229el4());\n" +
+ " }\n" +
+ "}\n",
+ "Team2229el4_1.java",
+ "public team class Team2229el4_1 {\n" +
+ " protected class R implements ILowerable playedBy T2229el4 {\n" +
+ " protected void test() {\n" +
+ " this.lower().bar();\n" +
+ " }\n" +
+ " }\n" +
+ " void test(T2229el4 as R r) { r.test(); }\n" +
+ "}\n",
+ "T2229el4.java",
+ "public class T2229el4 {\n" +
+ " void bar() { System.out.print(\"OK\"); }\n" +
+ "}\n"
+ },
+ "OK");
+ }
+
+ // Bug 391290 - Internal compiler error/Corrupt byte code
+ // positive case involving copy-inherited call to _OT$getBase()
+ public void test2229_explicitLowering4b() {
+ runConformTest(
+ new String[] {
+ "Team2229el4b_2.java",
+ "public team class Team2229el4b_2 extends Team2229el4b_1 {\n" +
+ " public static void main(String[] args) {\n" +
+ " new Team2229el4b_2().test(new T2229el4b());\n" +
+ " }\n" +
+ "}\n",
+ "Team2229el4b_1.java",
+ "public team class Team2229el4b_1 {" +
+ " protected team class Mid {\n" +
+ " protected class R playedBy T2229el4b {\n" +
+ " }\n" +
+ " protected void test(T2229el4b as R r) { " +
+ " T2229el4b b = r;\n" +
+ " b.bar();\n" +
+ " }\n" +
+ " }\n" +
+ " public void test(T2229el4b b) {\n" +
+ " new Mid().test(b);\n" +
+ " }\n" +
+ "}\n",
+ "T2229el4b.java",
+ "public class T2229el4b {\n" +
+ " void bar() { System.out.print(\"OK\"); }\n" +
+ "}\n",
+ },
+ "OK");
+ }
+
// a static team method tries to lift its parameter
// 2.2.30-otjld-declared-lifting-in-static-method
public void test2230_declaredLiftingInStaticMethod() {

Back to the top