@Override
  protected TreeModelListener createTreeModelListener() {
    // Can't just create a listener here because this function
    // is called from a base class constructor, so our class isn't initialized yet.
    return new TreeModelListener() {

      private @NotNull LazyInitializer.LazyValue<@NotNull TreeModelListener> delegate = LazyInitializer.create(() -> {
        if (expandImpl != null) {
          return expandImpl.createTreeModelListener();
        }
        else {
          return Tree.super.createTreeModelListener();
        }
      });

      private @NotNull TreeModelListener delegate() { return delegate.get();  }

      @Override
      public void treeNodesChanged(TreeModelEvent e) { delegate().treeNodesChanged(e); }

      @Override
      public void treeNodesInserted(TreeModelEvent e) { delegate().treeNodesInserted(e); }

      @Override
      public void treeNodesRemoved(TreeModelEvent e) { delegate().treeNodesRemoved(e); }

      @Override
      public void treeStructureChanged(TreeModelEvent e) { delegate().treeStructureChanged(e); }
    };
  }
@Override
  protected TreeModelListener createTreeModelListener()