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;