| abstract class Super { |
| abstract SuperInner<?> a(); |
| |
| abstract static class SuperInner<T extends SuperInner<T>> { |
| abstract T b(); |
| |
| abstract Super c(); |
| } |
| } |
| |
| abstract class Sub extends Super { |
| // It is significant that this method specializes the |
| // return type. If this returns SuperInner, no crash happens. |
| @Override |
| abstract SubInner<?> a(); |
| |
| abstract static class SubInner<S extends SubInner<S>> extends Super.SuperInner<S> { |
| // Crashes with this overridden method and passes without it. |
| @Override |
| abstract Super c(); |
| } |
| } |