--- /dev/null
+public class Sub1 extends Super1 {
+ public Integer m() {return new Integer(42);}
+}
--- /dev/null
+public class Sub2 extends Super2 {
+}
--- /dev/null
+public class Sub3 extends Super3 {
+ public Integer m() {return new Integer(42);}
+}
--- /dev/null
+public class Super1 {
+ public Object m() { return null;}
+}
--- /dev/null
+public class Super2 {
+ public Object m() { return null;}
+}
--- /dev/null
+public class Super3 {
+}
public class Util {
- public static void dumpMethods(String clazzname,String[] expectedMethods) {
+ public static void checkMethods(String clazzname,String[] expectedMethods) {
List methodsFound = new ArrayList();
try {
java.lang.Class clz = Class.forName(clazzname);
--- /dev/null
+public aspect X1 {
+ public static void main(String []argv) {
+ Super1 s = new Sub1();
+ Integer i = (Integer)s.m();
+
+ Util.checkMethods("Sub1",
+ new String[]{
+ "java.lang.Object Sub1.m() [BridgeMethod]",
+ "java.lang.Integer Sub1.m()"});
+ }
+}
--- /dev/null
+public aspect X2 {
+ public Integer Sub2.m() {return new Integer(42);}
+
+ public static void main(String []argv) {
+ Super2 s = new Sub2();
+ Integer i = (Integer)s.m();
+
+ Util.checkMethods("Sub2",
+ new String[]{
+ "java.lang.Object Sub2.m() [BridgeMethod]",
+ "java.lang.Integer Sub2.m()"});
+ }
+}
\ No newline at end of file
--- /dev/null
+public aspect X3 {
+
+ public Object Super3.m() {return null;}
+
+ public static void main(String []argv) {
+ Super3 s = new Sub3();
+ Integer i = (Integer)s.m();
+
+ Util.checkMethods("Sub3",
+ new String[]{
+ "java.lang.Object Sub3.m() [BridgeMethod]",
+ "java.lang.Integer Sub3.m()"});
+ }
+}
--- /dev/null
+public aspect pr91381 {
+ public abstract Object A.foo();
+
+ public static void main(String[] args) {
+ A a = new B();
+ System.out.println(a.foo());
+ }
+}
+
+abstract class A {
+// abstract Object foo();
+}
+
+class B extends A {
+ @Override public Integer foo() { return new Integer(42); }
+}