### Eclipse Workspace Patch 1.0 #P org.eclipse.jdt.core Index: compiler/org/eclipse/jdt/internal/compiler/lookup/MethodVerifier15.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/MethodVerifier15.java,v retrieving revision 1.88.2.1 diff -u -r1.88.2.1 MethodVerifier15.java --- compiler/org/eclipse/jdt/internal/compiler/lookup/MethodVerifier15.java 24 Jul 2008 19:38:29 -0000 1.88.2.1 +++ compiler/org/eclipse/jdt/internal/compiler/lookup/MethodVerifier15.java 6 Oct 2008 19:14:34 -0000 @@ -373,6 +373,9 @@ if (methods[m].declaringClass.id == TypeIds.T_JavaLangObject) continue nextMethod; // do not complain since the super interface already got blamed } else { + if (method.isAbstract() && method.declaringClass.isClass()) + if (areReturnTypesCompatible(methods[j], method)) + continue nextMethod; // return type of the superclass' inherited method is a supertype of the return type of the interface's method if (method.declaringClass.isClass() || !this.type.implementsInterface(method.declaringClass, false)) if (methods[j].declaringClass.isClass() || !this.type.implementsInterface(methods[j].declaringClass, false)) continue nextMethod; // do not complain since the superclass already got blamed #P org.eclipse.jdt.core.tests.compiler Index: src/org/eclipse/jdt/core/tests/compiler/regression/MethodVerifyTest.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/MethodVerifyTest.java,v retrieving revision 1.153.2.1 diff -u -r1.153.2.1 MethodVerifyTest.java --- src/org/eclipse/jdt/core/tests/compiler/regression/MethodVerifyTest.java 24 Jul 2008 19:38:28 -0000 1.153.2.1 +++ src/org/eclipse/jdt/core/tests/compiler/regression/MethodVerifyTest.java 6 Oct 2008 19:14:36 -0000 @@ -8763,4 +8763,24 @@ "----------\n" ); } +//https://bugs.eclipse.org/bugs/show_bug.cgi?id=249140 +public void test174() { + this.runNegativeTest( + new String[] { + "X.java", + "class X extends Y implements I { }\n" + + "abstract class Y { public abstract Object m(); }\n" + + "abstract class A implements I, J { }\n" + + "abstract class B implements J, I { }\n" + + "interface I { String m(); }\n" + + "interface J { Object m(); }\n" + }, + "----------\n" + + "1. ERROR in X.java (at line 1)\n" + + " class X extends Y implements I { }\n" + + " ^\n" + + "The type X must implement the inherited abstract method Y.m()\n" + + "----------\n" + ); +} } \ No newline at end of file