void (@NotNull PsiClass aClass, @NotNull Map<MethodSignature, PsiMethod> abstracts, @NotNull Map<MethodSignature, PsiMethod> finals, @NotNull Map<MethodSignature, PsiMethod> concretes, @NotNull Map<MethodSignature, CandidateInfo> result) { for (Map.Entry<MethodSignature, PsiMethod> entry : abstracts.entrySet()) { MethodSignature signature = entry.getKey(); PsiMethod abstractOne = entry.getValue(); PsiMethod concrete = concretes.get(signature); if (concrete == null || PsiUtil.getAccessLevel(concrete.getModifierList()) < PsiUtil.getAccessLevel(abstractOne.getModifierList()) || !abstractOne.getContainingClass().isInterface() && abstractOne.getContainingClass().isInheritor(concrete.getContainingClass(), true) || shouldAppearInOverrideList(aClass, abstractOne)) { if (finals.get(signature) == null) { PsiSubstitutor subst = correctSubstitutor(abstractOne, signature.getSubstitutor()); CandidateInfo info = new CandidateInfo(abstractOne, subst); result.put(signature, info); } } } MemberImplementorExplorersProvider explorersProvider = ourExplorerProvider.getValue(); if (explorersProvider != null) { for (final MemberImplementorExplorer implementor : explorersProvider.getExplorers()) { for (final PsiMethod method : implementor.getMethodsToImplement(aClass)) { MethodSignature signature = MethodSignatureBackedByPsiMethod.create(method, PsiSubstitutor.EMPTY); CandidateInfo info = new CandidateInfo(method, PsiSubstitutor.EMPTY); result.put(signature, info); } } } }