private static boolean processQualifierType(final @NotNull PsiType type,
                                              final MethodsProcessor processor,
                                              PsiManager manager,
                                              PsiMethodCallExpression call) throws MethodProcessorSetupFailedException {
    PsiUtil.ensureValidType(type);
    if (type instanceof PsiClassType) {
      JavaResolveResult qualifierResult = ((PsiClassType)type).resolveGenerics();
      return processQualifierResult(qualifierResult, processor, call);
    }
    if (type instanceof PsiArrayType) {
      LanguageLevel languageLevel = PsiUtil.getLanguageLevel(call);
      PsiElementFactory factory = JavaPsiFacade.getElementFactory(manager.getProject());
      JavaResolveResult qualifierResult =
        factory.getArrayClassType(((PsiArrayType)type).getComponentType(), languageLevel).resolveGenerics();
      return processQualifierResult(qualifierResult, processor, call);
    }
    if (type instanceof PsiIntersectionType) {
      for (PsiType conjunct : ((PsiIntersectionType)type).getConjuncts()) {
        if (!processQualifierType(conjunct, processor, manager, call)) return false;
      }
    }

    return true;
  }
private static boolean processQualifierType(final @NotNull PsiType type,
                                              final MethodsProcessor processor,
                                              PsiManager manager,
                                              PsiMethodCallExpression call)