@NotNull
  @ApiStatus.Experimental
  public DefaultTreeModel build(boolean forcePrepareCaches) {
    TreeUtil.sort(myModel, BROWSER_NODE_COMPARATOR);
    collapseDirectories(myModel, myRoot);

    if (myProject != null && !ApplicationManager.getApplication().isDispatchThread()) {
      // Pre-fill background colors for small trees to reduce blinking
      if (!TreeUtil.hasManyNodes(myRoot, 1000) || forcePrepareCaches) {
        //noinspection deprecation
        ReadAction.nonBlocking(() -> {
          precalculateFileColors(myProject, myRoot);
        }).executeSynchronously();
      }
    }

    myRoot.traverse().forEach(node -> {
      for (Key<?> key : TEMP_CACHE_KEYS) {
        node.putUserData(key, null);
      }
    });

    myModel.nodeStructureChanged((TreeNode)myModel.getRoot());
    return myModel;
  }
@NotNull
  @ApiStatus.Experimental
  public DefaultTreeModel build(boolean forcePrepareCaches)