diff --git a/jOOQ/src/main/java/org/jooq/Traverser.java b/jOOQ/src/main/java/org/jooq/Traverser.java index cbc6a0eec3..88a43203f7 100644 --- a/jOOQ/src/main/java/org/jooq/Traverser.java +++ b/jOOQ/src/main/java/org/jooq/Traverser.java @@ -126,65 +126,37 @@ public interface Traverser { BiFunction after, Function finisher ) { + + // TODO: Perhaps we should accept only invariant functions? return new Traverser() { - - boolean supplied; - boolean aborted; - boolean finished; - - A a0; - R r0; - - private A a(A a) { - finished = false; - return a0 = a; - } - @Override public Supplier supplier() { - return () -> { - if (supplied) - return a0; - - supplied = true; - return a(supplier.get()); - }; + return supplier; } @Override public Predicate abort() { - return a -> { - if (aborted) - return true; - - return aborted = abort.test(a); - }; + return (Predicate) abort; } @Override public Predicate recurse() { - return recurse::test; + return (Predicate) recurse; } @Override public BiFunction before() { - return (a, p) -> a(before.apply(a, p)); + return (BiFunction) before; } @Override public BiFunction after() { - return (a, p) -> a(after.apply(a, p)); + return (BiFunction) after; } @Override public Function finisher() { - return a -> { - if (finished) - return r0; - - finished = true; - return r0 = finisher.apply(a); - }; + return (Function) finisher; } }; } @@ -222,20 +194,4 @@ public interface Traverser { * supplied by {@link #supplier()} into the final data structure. */ Function finisher(); - - /** - * A shortcut to {@link #supplier()} and then {@link Supplier#get()}, which - * can be cached by implementations. - */ - default A supplied() { - return supplier().get(); - } - - /** - * A shortcut to {@link #finisher()} and then - * {@link Function#apply(Object)}, which can be cached by implementations. - */ - default R finished() { - return finisher().apply(supplied()); - } } diff --git a/jOOQ/src/main/java/org/jooq/impl/QOM.java b/jOOQ/src/main/java/org/jooq/impl/QOM.java index 5f3f602f38..9e5fdfd0e3 100644 --- a/jOOQ/src/main/java/org/jooq/impl/QOM.java +++ b/jOOQ/src/main/java/org/jooq/impl/QOM.java @@ -49,7 +49,10 @@ import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.UUID; +import java.util.function.BiFunction; +import java.util.function.Function; import java.util.function.Predicate; +import java.util.function.Supplier; // ... import org.jooq.Catalog; @@ -7058,6 +7061,104 @@ public final class QOM { + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +