@Override
  public void dispose() {
    cancelAll(true, "PassExecutorService.dispose");
    // some workers could, although idle, still retain some thread references for some time causing leak hunter to frown
    // call it from BGT to avoid "calling daemon from EDT" assertion
    Future<?> future = ApplicationManager.getApplication().executeOnPooledThread(() -> {
      ForkJoinPool.commonPool().awaitQuiescence(1, TimeUnit.SECONDS);
    });
    try {
      future.get();
    }
    catch (InterruptedException | ExecutionException e) {
      throw new RuntimeException(e);
    }
    isDisposed = true;
  }
@Override
  public void dispose()