protected void checkSpecifics(@NotNull List<CandidateInfo> conflicts,
                                @MethodCandidateInfo.ApplicabilityLevelConstant int applicabilityLevel,
                                Map<MethodCandidateInfo, PsiSubstitutor> map,
                                int offset) {
    final boolean applicable = applicabilityLevel > MethodCandidateInfo.ApplicabilityLevel.NOT_APPLICABLE;

    int conflictsCount = conflicts.size();
    // Specifics
    if (applicable) {
      final CandidateInfo[] newConflictsArray = conflicts.toArray(CandidateInfo.EMPTY_ARRAY);
      for (int i = 1; i < conflictsCount; i++) {
        final CandidateInfo method = newConflictsArray[i];
        for (int j = 0; j < i; j++) {
          ProgressManager.checkCanceled();
          final CandidateInfo conflict = newConflictsArray[j];
          if (nonComparable(method, conflict, applicabilityLevel == MethodCandidateInfo.ApplicabilityLevel.FIXED_ARITY)) continue;
          switch (isMoreSpecific((MethodCandidateInfo)method, (MethodCandidateInfo)conflict, applicabilityLevel, map, offset)) {
            case FIRST:
              conflicts.remove(conflict);
              break;
            case SECOND:
              conflicts.remove(method);
              break;
            case NEITHER:
              break;
          }
        }
      }
    }
  }
protected void checkSpecifics(@NotNull List<CandidateInfo> conflicts,
                                @MethodCandidateInfo.ApplicabilityLevelConstant int applicabilityLevel,
                                Map<MethodCandidateInfo, PsiSubstitutor> map,
                                int offset)