MethodSignatureUtil.findMethodBySuperMethod used to find super method

This commit is contained in:
Tagir Valeev
2017-09-21 11:23:24 +07:00
parent e7fb59bd32
commit 0b99eeb259
4 changed files with 26 additions and 9 deletions
@@ -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;
}
@@ -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
@@ -147,10 +147,10 @@ public class JavaOverridingMethodsSearcher implements QueryExecutor<PsiMethod, O
}
@Nullable
public static PsiMethod findOverridingMethod(@NotNull Project project,
@NotNull PsiClass inheritor,
@NotNull PsiMethod method,
@NotNull PsiClass methodContainingClass) {
static PsiMethod findOverridingMethod(@NotNull Project project,
@NotNull PsiClass inheritor,
@NotNull PsiMethod method,
@NotNull PsiClass methodContainingClass) {
String name = method.getName();
if (inheritor.findMethodsByName(name, false).length > 0) {
PsiMethod found = MethodSignatureUtil.findMethodBySuperSignature(inheritor, getSuperSignature(inheritor, methodContainingClass, method), false);
@@ -17,6 +17,21 @@ class CovariantReturn {
String baz();
}
public interface BaseGeneric<T> {
T get(@Nullable T t);
}
public static class DerivedGeneric implements BaseGeneric<Integer> {
@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 && <warning descr="Condition 'base.baz() instanceof String' is redundant and can be replaced with '!= null'">base.baz() instanceof String</warning>;
}
boolean testTypeGeneric(BaseGeneric<?> base) {
return base instanceof DerivedGenericImpl && <warning descr="Condition 'base.get(null) instanceof Integer' is redundant and can be replaced with '!= null'">base.get(null) instanceof Integer</warning>;
}
}