From 8c5b14da770991542d3bd5dc164cbae34976cb4f Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Fri, 15 Sep 2017 15:29:28 +0700 Subject: [PATCH] StandardInstructionVisitor#findSpecificMethod: PsiUtil#canBeOverridden, JavaOverridingMethodsSearcher#findOverridingMethod used Review ID: IDEA-CR-24590 --- .../dataFlow/StandardInstructionVisitor.java | 10 ++++------ .../psi/impl/search/JavaOverridingMethodsSearcher.java | 8 ++++---- 2 files changed, 8 insertions(+), 10 deletions(-) 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 897515f55d12..f925ad9a9c88 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 @@ -20,10 +20,10 @@ import com.intellij.codeInspection.dataFlow.instructions.*; import com.intellij.codeInspection.dataFlow.rangeSet.LongRangeSet; import com.intellij.codeInspection.dataFlow.value.*; import com.intellij.codeInspection.dataFlow.value.DfaRelationValue.RelationType; -import com.intellij.lang.jvm.JvmModifier; 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.PsiTreeUtil; @@ -480,10 +480,7 @@ public class StandardInstructionVisitor extends InstructionVisitor { @NotNull private static PsiMethod findSpecificMethod(@NotNull PsiMethod method, @NotNull DfaMemoryState state, @Nullable DfaValue qualifier) { - if (qualifier == null || - method.hasModifier(JvmModifier.STATIC) || - method.hasModifier(JvmModifier.FINAL) || - method.hasModifier(JvmModifier.PRIVATE)) { + if (qualifier == null || !PsiUtil.canBeOverridden(method)) { return method; } TypeConstraint constraint = state.getValueFact(DfaFactType.TYPE_CONSTRAINT, qualifier); @@ -492,7 +489,8 @@ public class StandardInstructionVisitor extends InstructionVisitor { if (specificQualifierClass != null && qualifierClass != null && !specificQualifierClass.equals(qualifierClass) && InheritanceUtil.isInheritorOrSelf(specificQualifierClass, qualifierClass, true)) { - PsiMethod realMethod = specificQualifierClass.findMethodBySignature(method, true); + PsiMethod realMethod = + JavaOverridingMethodsSearcher.findOverridingMethod(method.getProject(), specificQualifierClass, method, qualifierClass); if (realMethod != null) { return realMethod; } 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 09eff7dbd55a..786401480ac4 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);