boolean removeEmptyNodesByFile(@NotNull List<VirtualFile> parts) {
    if (parts.isEmpty()) {
      return children.length == 0;
    }
    VirtualFile file = parts.remove(parts.size()-1);
    FilePartNode child = findChildByNameId(null, getNameId(file), false, (NewVirtualFileSystem)file.getFileSystem());
    if (child == null) {
      return false;
    }
    boolean toRemove = child.removeEmptyNodesByFile(parts);
    if (toRemove) {
      children = children.length == 1 ? EMPTY_ARRAY : ArrayUtil.remove(children, child);
      return children.length == 0 && leaves == null;
    }
    return false;
  }
boolean removeEmptyNodesByFile(@NotNull List<VirtualFile> parts)