diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/StandardInstructionVisitor.java b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/StandardInstructionVisitor.java index 12c02b78ebb6..e6fb61ae81c9 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/StandardInstructionVisitor.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/StandardInstructionVisitor.java @@ -23,9 +23,9 @@ import com.intellij.codeInspection.dataFlow.value.DfaRelationValue.RelationType; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.Pair; import com.intellij.psi.*; -import com.intellij.psi.impl.search.JavaOverridingMethodsSearcher; import com.intellij.psi.tree.IElementType; import com.intellij.psi.util.InheritanceUtil; +import com.intellij.psi.util.MethodSignatureUtil; import com.intellij.psi.util.PsiUtil; import com.intellij.psi.util.TypeConversionUtil; import com.intellij.util.ObjectUtils; @@ -486,8 +486,7 @@ public class StandardInstructionVisitor extends InstructionVisitor { if (specificQualifierClass != null && qualifierClass != null && !specificQualifierClass.equals(qualifierClass) && InheritanceUtil.isInheritorOrSelf(specificQualifierClass, qualifierClass, true)) { - PsiMethod realMethod = - JavaOverridingMethodsSearcher.findOverridingMethod(method.getProject(), specificQualifierClass, method, qualifierClass); + PsiMethod realMethod = MethodSignatureUtil.findMethodBySuperMethod(specificQualifierClass, method, true); if (realMethod != null) { return realMethod; } diff --git a/java/java-impl/src/com/intellij/codeInsight/JavaTargetElementEvaluator.java b/java/java-impl/src/com/intellij/codeInsight/JavaTargetElementEvaluator.java index 20be3f05a031..39bc3a9a8dd8 100644 --- a/java/java-impl/src/com/intellij/codeInsight/JavaTargetElementEvaluator.java +++ b/java/java-impl/src/com/intellij/codeInsight/JavaTargetElementEvaluator.java @@ -22,7 +22,6 @@ import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.util.Computable; import com.intellij.psi.*; -import com.intellij.psi.impl.search.JavaOverridingMethodsSearcher; import com.intellij.psi.javadoc.PsiDocTag; import com.intellij.psi.search.LocalSearchScope; import com.intellij.psi.search.SearchScope; @@ -105,7 +104,7 @@ public class JavaTargetElementEvaluator extends TargetElementEvaluatorEx2 implem !InheritanceUtil.isInheritorOrSelf(specificQualifierClass, qualifierClass, true)) { return null; } - return JavaOverridingMethodsSearcher.findOverridingMethod(method.getProject(), specificQualifierClass, method, qualifierClass); + return MethodSignatureUtil.findMethodBySuperMethod(specificQualifierClass, method, true); } @Override diff --git a/java/java-indexing-impl/src/com/intellij/psi/impl/search/JavaOverridingMethodsSearcher.java b/java/java-indexing-impl/src/com/intellij/psi/impl/search/JavaOverridingMethodsSearcher.java index 786401480ac4..09eff7dbd55a 100644 --- a/java/java-indexing-impl/src/com/intellij/psi/impl/search/JavaOverridingMethodsSearcher.java +++ b/java/java-indexing-impl/src/com/intellij/psi/impl/search/JavaOverridingMethodsSearcher.java @@ -147,10 +147,10 @@ public class JavaOverridingMethodsSearcher implements QueryExecutor 0) { PsiMethod found = MethodSignatureUtil.findMethodBySuperSignature(inheritor, getSuperSignature(inheritor, methodContainingClass, method), false); diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/CovariantReturn.java b/java/java-tests/testData/inspection/dataFlow/fixture/CovariantReturn.java index 76cff4cb724d..0d6dcaa045bb 100644 --- a/java/java-tests/testData/inspection/dataFlow/fixture/CovariantReturn.java +++ b/java/java-tests/testData/inspection/dataFlow/fixture/CovariantReturn.java @@ -17,6 +17,21 @@ class CovariantReturn { String baz(); } + public interface BaseGeneric { + T get(@Nullable T t); + } + + public static class DerivedGeneric implements BaseGeneric { + @Override + public Integer get(Integer integer) { + return integer == null ? 0 : integer+1; + } + } + + public static class DerivedGenericImpl extends DerivedGeneric { + + } + public static boolean bar(@NotNull String s) { return true; } @@ -33,4 +48,8 @@ class CovariantReturn { boolean testType(Base base) { return base instanceof Derived && base.baz() instanceof String; } + + boolean testTypeGeneric(BaseGeneric base) { + return base instanceof DerivedGenericImpl && base.get(null) instanceof Integer; + } } \ No newline at end of file