private static List<MemberInfo> collectMembers(PsiClass c, Set<PsiElement> selectedMembers) {
    List<MemberInfo> infos = MemberInfo.extractClassMembers(c, new MemberInfoBase.Filter<>() {
      @Override
      public boolean includeMember(PsiMember element) {
        if (element instanceof PsiMethod) {
          if (PsiUtil.isLanguageLevel9OrHigher(element)) {
            return true;
          }
          return element.hasModifierProperty(PsiModifier.PUBLIC)
                 && (PsiUtil.isAvailable(JavaFeature.STATIC_INTERFACE_CALLS, element) || !element.hasModifierProperty(PsiModifier.STATIC));
        }
        else if (element instanceof PsiField && !(element instanceof PsiEnumConstant)) {
          return element.hasModifierProperty(PsiModifier.FINAL)
                 && element.hasModifierProperty(PsiModifier.STATIC)
                 && element.hasModifierProperty(PsiModifier.PUBLIC);
        }
        else if (element instanceof PsiClass) {
          return ((PsiClass)element).isInterface() || element.hasModifierProperty(PsiModifier.STATIC);
        }
        return false;
      }
    }, true);
    for (MemberInfo info : infos) {
      if (selectedMembers.contains(info.getMember())) {
        info.setChecked(true);
      }
    }
    return infos;
  }
private static List<MemberInfo> collectMembers(PsiClass c, Set<PsiElement> selectedMembers)