@NotNull
  @Override
  public Collection<TreeElement> provideNodes(@NotNull TreeElement node) {
    if (!(node instanceof JavaClassTreeElement classNode)) return Collections.emptyList();

    final PsiClass aClass = classNode.getElement();
    if (aClass == null) return Collections.emptyList();

    Collection<PsiElement> inherited = new LinkedHashSet<>();
    Collection<PsiElement> ownChildren = JavaClassTreeElement.getOwnChildren(aClass);

    aClass.processDeclarations(new AddAllMembersProcessor(inherited, aClass), ResolveState.initial(), null, aClass);
    inherited.removeAll(ownChildren);
    if (aClass instanceof PsiAnonymousClass) {
      final PsiElement element = ((PsiAnonymousClass)aClass).getBaseClassReference().resolve();
      if (element instanceof PsiClass) {
        ContainerUtil.addAll(inherited, ((PsiClass)element).getInnerClasses());
      }
    }
    List<TreeElement> array = new ArrayList<>();
    for (PsiElement child : inherited) {
      if (!child.isValid()) continue;
      if (child instanceof PsiClass) {
        array.add(new JavaClassTreeElement((PsiClass)child, true));
      }
      else if (child instanceof PsiField) {
        array.add(new PsiFieldTreeElement((PsiField)child, true));
      }
      else if (child instanceof PsiMethod) {
        array.add(new PsiMethodTreeElement((PsiMethod)child, true));
      }
      else if (child instanceof PsiClassInitializer) {
        array.add(new ClassInitializerTreeElement((PsiClassInitializer)child));
      }
    }
    return array;
  }
@NotNull
  @Override
  public Collection<TreeElement> provideNodes(@NotNull TreeElement node)