private static void collectMethodsToImplement(@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);
        }
      }
    }
  }
private static void collectMethodsToImplement(@NotNull PsiClass aClass,
                                                @NotNull Map<MethodSignature, PsiMethod> abstracts,
                                                @NotNull Map<MethodSignature, PsiMethod> finals,
                                                @NotNull Map<MethodSignature, PsiMethod> concretes,
                                                @NotNull Map<MethodSignature, CandidateInfo> result)