diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightMethodUtil.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightMethodUtil.java index 8d5dc904368b..93446c045b60 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightMethodUtil.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightMethodUtil.java @@ -1302,9 +1302,8 @@ public class HighlightMethodUtil { } if (currentMethod.getTypeParameters().length > 0 && JavaGenericsUtil.isRawToGeneric(currentType, otherSuperReturnType)) continue; } - return createIncompatibleReturnTypeMessage(currentMethod, otherSuperMethod, otherSuperReturnType, - currentType, JavaErrorMessages.message("unrelated.overriding.methods.return.types"), - TextRange.EMPTY_RANGE); + return createIncompatibleReturnTypeMessage(otherSuperMethod, currentMethod, currentType, otherSuperReturnType, + JavaErrorMessages.message("unrelated.overriding.methods.return.types"), TextRange.EMPTY_RANGE); } return null; } @@ -1327,7 +1326,7 @@ public class HighlightMethodUtil { HighlightInfo highlightInfo; if (allAbstracts) { superSignatures = new ArrayList(superSignatures); - superSignatures.add(signature); + superSignatures.add(0, signature); highlightInfo = checkInterfaceInheritedMethodsReturnTypes(superSignatures, languageLevel); } else { diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/ReturnTypeOverrideEquivalenceWithTypeHierarchy.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/ReturnTypeOverrideEquivalenceWithTypeHierarchy.java new file mode 100644 index 000000000000..d148f97e903f --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/ReturnTypeOverrideEquivalenceWithTypeHierarchy.java @@ -0,0 +1,12 @@ +abstract class Child implements Human {} +interface Human extends Mother, Father { + Human me(); +} + +interface Father { + Father me(); +} + +interface Mother { + Mother me(); +} diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java index 6ecf4443439b..d7a6f39eb842 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java @@ -555,6 +555,10 @@ public class GenericsHighlightingTest extends LightDaemonAnalyzerTestCase { doTest(LanguageLevel.JDK_1_7, JavaSdkVersion.JDK_1_7, false); } + public void testReturnTypeOverrideEquivalenceWithTypeHierarchy() throws Exception { + doTest(LanguageLevel.JDK_1_7, JavaSdkVersion.JDK_1_7, false); + } + public void testLeastUpperBoundWithRecursiveTypes() throws Exception { final PsiManager manager = getPsiManager(); final GlobalSearchScope scope = GlobalSearchScope.allScope(getProject());