@Override
  public @NotNull JavaResolveResult resolveMethodGenerics() {
    final PsiExpression processor = getProcessor();
    if (processor == null) return JavaResolveResult.EMPTY;
    final PsiType type = processor.getType();
    if (type == null) return JavaResolveResult.EMPTY;
    PsiMethod method = findBaseProcessMethod(type);
    if (method == null) return JavaResolveResult.EMPTY;
    for (PsiClassType classType : PsiTypesUtil.getClassTypeComponents(type)) {
      if (!TypeConversionUtil.isAssignable(type, classType)) continue;
      final PsiClassType.ClassResolveResult resolveResult = classType.resolveGenerics();
      final PsiClass aClass = resolveResult.getElement();
      if (aClass == null) continue;
      PsiMethod foundMethod = aClass.findMethodBySignature(method, true);
      if (foundMethod == null) continue;
      PsiClass methodContainingClass = foundMethod.getContainingClass();
      if (methodContainingClass == null) continue;
      final PsiSubstitutor substitutor = TypeConversionUtil.getClassSubstitutor(methodContainingClass, aClass, resolveResult.getSubstitutor());
      if (substitutor == null) continue;
      return new MethodCandidateInfo(foundMethod, substitutor, false, false, this, null, null, null);
    }
    return JavaResolveResult.EMPTY;
  }
@Override
  public @NotNull JavaResolveResult resolveMethodGenerics()