@Nullable
  public static TargetMethodContainer getTargetMethod(@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);
  }
@Nullable
  public static TargetMethodContainer getTargetMethod(@NotNull PsiType type, @NotNull MethodSignature signature, @NotNull PsiType baseType)