private void doValidDrop(TreePath @NotNull [] sources, @NotNull TreePath target, @NotNull DropHandler handler) {
    record ValidDropContext(TreePath @Nullable [] sources, @Nullable TreePath target) { }
    ReadAction.nonBlocking(() -> {
        TreePath validTarget = getValidTarget(sources, target, handler);
        TreePath[] validSources = null;
        if (validTarget != null) {
          validSources = removeRedundant(sources, validTarget, handler);
        }
        return new ValidDropContext(validSources, validTarget);
      })
      .expireWith(myProject)
      .finishOnUiThread(
        ModalityState.defaultModalityState(),
        context -> {
          if (context.sources != null && context.sources.length != 0 && context.target != null) {
            handler.doDrop(context.sources, context.target);
          }
        })
      .submit(AppExecutorUtil.getAppExecutorService());
  }
private void doValidDrop(TreePath @NotNull [] sources, @NotNull TreePath target, @NotNull DropHandler handler)