void (@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; } } }