private void registerMember(@NotNull PsiClass containingClass,
                              @NotNull Collection<? extends T> members,
                              @NotNull List<Pair<T, ApplicableType>> list,
                              @NotNull List<T> applicableList) {
    String qualifiedName = containingClass.getQualifiedName();
    if (qualifiedName == null) {
      return;
    }

    Boolean alreadyMentioned = myPossibleClasses.get(qualifiedName);
    if (alreadyMentioned == Boolean.TRUE) return;
    if (alreadyMentioned == null) {
      myPossibleClasses.put(qualifiedName, false);
    }
    for (T member : members) {
      if (!member.hasModifierProperty(PsiModifier.STATIC)) {
        continue;
      }

      if (alreadyMentioned == null) {
        list.add(new Pair<>(member, ApplicableType.NONE));
        alreadyMentioned = Boolean.FALSE;
      }

      if (!PsiUtil.isAccessible(myPlace.getProject(), member, myPlace, containingClass)) {
        continue;
      }

      if (myAddStaticImport && !PsiUtil.isAccessible(myPlace.getProject(), member, myPlace.getContainingFile(), containingClass)) {
        continue;
      }

      ApplicableType type = isApplicable(member, myPlace);
      if (list.size() > 0) {
        Pair<T, ApplicableType> previousPair = list.get(list.size() - 1);
        if (previousPair.getFirst().getContainingClass() == containingClass &&
            previousPair.getSecond().ordinal() < type.ordinal()) {
          list.remove(list.size() - 1);
          list.add(new Pair<>(member, type));
        }
      }

      if (type == ApplicableType.APPLICABLE) {
        applicableList.add(member);
        myPossibleClasses.put(qualifiedName, true);
        break;
      }
    }
  }
private void registerMember(@NotNull PsiClass containingClass,
                              @NotNull Collection<? extends T> members,
                              @NotNull List<Pair<T, ApplicableType>> list,
                              @NotNull List<T> applicableList)