TargetMethodContainer (@NotNull PsiType type, @NotNull MethodSignature signature, @NotNull PsiType baseType) { PsiClass baseClass = PsiUtil.resolveClassInClassTypeOnly(baseType); if (baseClass == null) { return null; } PsiMethod method = getMethod(baseClass, signature); if (method == null) { return null; } MethodSignature emptyCommonSignature = method.getSignature(PsiSubstitutor.EMPTY); PsiClassType.ClassResolveResult classResolveResult = PsiUtil.resolveGenericsClassInType(type); PsiClass aClass = classResolveResult.getElement(); if (aClass == null) { return null; } PsiMethod methodBySignature = MethodSignatureUtil.findMethodBySignature(aClass, emptyCommonSignature, true); if (methodBySignature == null) { return null; } PsiMethod inheritor = MethodSignatureUtil.findMethodBySuperMethod(aClass, methodBySignature, true); if (inheritor == null) { return null; } return new TargetMethodContainer(methodBySignature, inheritor); }