When adding a bridge method (r4943), set up its override
field to reliably hold the transitive overrides in
addition to the immediate overrides.
Review by: scottb
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@4974 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaAST.java b/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaAST.java
index 6cf6fa2..10d0c95 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaAST.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaAST.java
@@ -2111,6 +2111,7 @@
for (JMethod over : overrides) {
if (!classHasMethodOverriding(clazz, over)) {
bridgeMethod.overrides.add(over);
+ bridgeMethod.overrides.addAll(over.overrides);
}
}
}
diff --git a/user/test/com/google/gwt/dev/jjs/test/CompilerTest.java b/user/test/com/google/gwt/dev/jjs/test/CompilerTest.java
index f6c41fd..8d77f0f 100644
--- a/user/test/com/google/gwt/dev/jjs/test/CompilerTest.java
+++ b/user/test/com/google/gwt/dev/jjs/test/CompilerTest.java
@@ -28,6 +28,12 @@
@SuppressWarnings("unused")
public class CompilerTest extends GWTTestCase {
+ interface Silly { }
+
+ interface SillyComparable<T extends Silly> extends Comparable<T> {
+ int compareTo(T obj);
+ }
+
private abstract static class AbstractSuper {
public static String foo() {
if (FALSE) {
@@ -296,6 +302,25 @@
assertEquals(5, obs.handleEvent(null));
}
+ /**
+ * When adding a bridge method, be sure to handle transitive overrides
+ * relationships.
+ */
+ public void testBridgeMethods3() {
+ class AbstractFoo implements Silly {
+ public int compareTo(AbstractFoo obj) {
+ if (FALSE) {
+ return compareTo(obj);
+ }
+ return 0;
+ }
+ }
+ class MyFoo extends AbstractFoo implements SillyComparable<AbstractFoo> {
+ }
+
+ assertEquals(0, new MyFoo().compareTo(new MyFoo()));
+ }
+
public void testCastOptimizer() {
Granny g = new Granny();
Apple a = g;