code: @Nonnull
    @ReturnsOriginal
    @SuppressWarnings("ResultOfMethodCallIgnored")
    public NodeProject asyncReloadProject(@Nonnull final NodeProject project, @Nullable final Runnable... invokeLater) {
      assertSwingThread();
  
      LOGGER.info("Starting asyncronous loading of " + project.toString());
  
      project.initLoading(Mono.just(project)
              .publishOn(PARALLEL_SCHEDULER)
              .map(proj -> {
                SwingUtilities.invokeLater(() -> ProjectLoadingIconAnimationController.getInstance().registerLoadingProject(this.explorerTree.getProjectTree(), proj));
                return proj;
              })
              .flatMap(proj -> proj.readSubtree(PrefUtils.isShowHiddenFilesAndFolders()))
              .doOnError(error -> {
                LOGGER.error("Can't open project", error);
                SwingUtilities.invokeLater(() -> {
                  JOptionPane.showMessageDialog(rootPane, "Can't open project : " + error.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
                });
              })
              .doOnTerminate(() -> {
                ProjectLoadingIconAnimationController.getInstance().unregisterLoadingProject(project);
                if (invokeLater != null && invokeLater.length > 0) {
                  for (final Runnable r : invokeLater) {
                    SwingUtilities.invokeLater(r);
                  }
                }
              }).subscribe());
      return project;
    }
docs: GEN-LAST:event_menuOpenProjectActionPerformed