protected @NotNull Action visit(@NotNull TreePath path, @NotNull AbstractTreeNode node, @NotNull T element) {
    if (matches(node, element)) {
      LOG.debug("found ", path);
      if (predicate == null) return Action.INTERRUPT;
      if (predicate.test(path)) return Action.CONTINUE;
    }
    else if (contains(node, element)) {
      LOG.debug("visit ", path);
      return Action.CONTINUE;
    }
    return Action.SKIP_CHILDREN;
  }
protected @NotNull Action visit(@NotNull TreePath path, @NotNull AbstractTreeNode node, @NotNull T element)