diff --git a/src/test/java/com/benjiweber/recordmixins/RecordMixinsTest.java b/src/test/java/com/benjiweber/recordmixins/RecordMixinsTest.java index e614610..e2779d2 100644 --- a/src/test/java/com/benjiweber/recordmixins/RecordMixinsTest.java +++ b/src/test/java/com/benjiweber/recordmixins/RecordMixinsTest.java @@ -69,7 +69,12 @@ public record EnhancedList(List inner) implements ForwardingList, Mappable, Filterable>, - Groupable {} + Groupable { + @Override + public EnhancedList build(List ts) { + return new EnhancedList<>(ts); + } + } public interface Mappable extends Forwarding> { default List map(Function f) { @@ -77,9 +82,13 @@ default List map(Function f) { } } - public interface Filterable> extends ForwardingAllTheWayDown, R> { + public interface Buildable { + R build(T t); + } + + public interface Filterable> extends Forwarding>, Buildable, R> { default R where(Predicate p) { - return forwarding(inner().stream().filter(p).collect(toList())); + return build(inner().stream().filter(p).collect(toList())); } } @@ -94,24 +103,6 @@ interface Forwarding { T inner(); } - interface ForwardingAllTheWayDown extends Forwarding { - default R forwarding(T t) { - try { - return (R) compatibleConstructor(getClass().getConstructors(), t) - .newInstance(t); - } catch (Exception e) { - throw new IllegalStateException(e); - } - } - - default Constructor compatibleConstructor(Constructor[] constructors, T t) { - return Stream.of(constructors) - .filter(ctor -> ctor.getParameterCount() == 1) - .filter(ctor -> ctor.getParameters()[0].getType().isAssignableFrom(t.getClass())) - .findAny().orElseThrow(IllegalStateException::new); - } - } - interface ForwardingList extends List, Forwarding> { List inner();