diff --git a/util/fp/build.gradle b/util/fp/build.gradle deleted file mode 100644 index 8c5c312..0000000 --- a/util/fp/build.gradle +++ /dev/null @@ -1,31 +0,0 @@ -plugins { - id 'groowt-conventions' - id 'groowt-publish' - id 'java-library' -} - -repositories { - mavenCentral() -} - -dependencies { - api libs.groovy - compileOnlyApi libs.jetbrains.anotations -} - -java { - withSourcesJar() -} - -jar { - archiveBaseName = 'groowt-util-fp' -} - -publishing { - publications { - create('fp', MavenPublication) { - artifactId = 'util-fp' - from components.java - } - } -} diff --git a/util/fp/src/main/java/groowt/util/fp/either/Either.java b/util/fp/src/main/java/groowt/util/fp/either/Either.java deleted file mode 100644 index 921c0e7..0000000 --- a/util/fp/src/main/java/groowt/util/fp/either/Either.java +++ /dev/null @@ -1,90 +0,0 @@ -package groowt.util.fp.either; - -import java.util.function.Function; - -public sealed interface Either { - - @SuppressWarnings("unchecked") - static Either left(E error) { - return (Either) new Left<>(error); - } - - @SuppressWarnings("unchecked") - static Either right(T item) { - return (Either) new Right<>(item); - } - - final class Left implements Either { - - private final E error; - - public Left(E error) { - this.error = error; - } - - public E get() { - return this.error; - } - - } - - final class Right implements Either { - - private final T item; - - public Right(T item) { - this.item = item; - } - - public T get() { - return this.item; - } - - } - - default boolean isLeft() { - return this instanceof Either.Left; - } - - default boolean isRight() { - return this instanceof Either.Right; - } - - @SuppressWarnings("unchecked") - default Left asLeft() { - return (Left) this; - } - - @SuppressWarnings("unchecked") - default Right asRight() { - return (Right) this; - } - - default E getLeft() { - return this.asLeft().get(); - } - - default T getRight() { - return this.asRight().get(); - } - - @SuppressWarnings("unchecked") - default Either mapLeft(Function onLeft) { - if (this.isLeft()) { - return (Either) new Right<>(onLeft.apply(this.getLeft())); - } else { - return this; - } - } - - @SuppressWarnings("unchecked") - default Either flatMapLeft(Function> onLeft) { - if (this.isLeft()) { - final var error = this.getLeft(); - return (Either) onLeft.apply(error); - } else { - return this; - } - } - -} diff --git a/util/fp/src/main/java/groowt/util/fp/hkt/Monoid.java b/util/fp/src/main/java/groowt/util/fp/hkt/Monoid.java deleted file mode 100644 index fd68ff3..0000000 --- a/util/fp/src/main/java/groowt/util/fp/hkt/Monoid.java +++ /dev/null @@ -1,31 +0,0 @@ -package groowt.util.fp.hkt; - -import java.util.Objects; - -public final class Monoid { - - private final SemiGroup semiGroup; - private final Zero zero; - - public Monoid(SemiGroup semiGroup, Zero zero) { - this.semiGroup = Objects.requireNonNull(semiGroup); - this.zero = Objects.requireNonNull(zero); - } - - public SemiGroup getSemiGroup() { - return this.semiGroup; - } - - public Zero getZero() { - return this.zero; - } - - public T concat(T left, T right) { - return this.semiGroup.concat(left, right); - } - - public T empty() { - return this.zero.getEmpty(); - } - -} diff --git a/util/fp/src/main/java/groowt/util/fp/hkt/SemiGroup.java b/util/fp/src/main/java/groowt/util/fp/hkt/SemiGroup.java deleted file mode 100644 index 0976caf..0000000 --- a/util/fp/src/main/java/groowt/util/fp/hkt/SemiGroup.java +++ /dev/null @@ -1,17 +0,0 @@ -package groowt.util.fp.hkt; - -import java.util.function.BinaryOperator; - -public final class SemiGroup { - - private final BinaryOperator concat; - - public SemiGroup(BinaryOperator concat) { - this.concat = concat; - } - - public T concat(T left, T right) { - return this.concat.apply(left, right); - } - -} diff --git a/util/fp/src/main/java/groowt/util/fp/hkt/Zero.java b/util/fp/src/main/java/groowt/util/fp/hkt/Zero.java deleted file mode 100644 index ce35d4b..0000000 --- a/util/fp/src/main/java/groowt/util/fp/hkt/Zero.java +++ /dev/null @@ -1,17 +0,0 @@ -package groowt.util.fp.hkt; - -import java.util.Objects; - -public final class Zero { - - private final T empty; - - public Zero(T empty) { - this.empty = Objects.requireNonNull(empty); - } - - public T getEmpty() { - return this.empty; - } - -} diff --git a/util/fp/src/main/java/groowt/util/fp/option/Option.java b/util/fp/src/main/java/groowt/util/fp/option/Option.java deleted file mode 100644 index 62d354f..0000000 --- a/util/fp/src/main/java/groowt/util/fp/option/Option.java +++ /dev/null @@ -1,159 +0,0 @@ -package groowt.util.fp.option; - -import groowt.util.fp.hkt.Monoid; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.Objects; -import java.util.function.Consumer; -import java.util.function.Function; -import java.util.function.Supplier; - -public abstract sealed class Option { - - private static EmptyOption emptyInstance; - - public static Option lift(T value) { - return new ValueOption<>(Objects.requireNonNull(value)); - } - - public static Option liftNullable(@Nullable T value) { - return value == null ? empty() : lift(value); - } - - public static Option liftLazy(Supplier valueSupplier) { - return new SupplierOption<>(Objects.requireNonNull(valueSupplier)); - } - - @SuppressWarnings("unchecked") - public static Option empty() { - if (emptyInstance == null) { - emptyInstance = new EmptyOption<>(); - } - return (Option) emptyInstance; - } - - private static final class EmptyOption extends Option { - - @Override - public T get() { - throw new NullPointerException("Cannot get() on EmptyOption"); - } - - @Override - public boolean isPresent() { - return false; - } - - } - - private static final class ValueOption extends Option { - - private final T value; - - public ValueOption(T value) { - this.value = value; - } - - @Override - public T get() { - return this.value; - } - - } - - private static final class SupplierOption extends Option { - - private final Supplier valueSupplier; - - public SupplierOption(Supplier valueSupplier) { - this.valueSupplier = valueSupplier::get; - } - - @Override - public T get() { - return Objects.requireNonNull( - this.valueSupplier.get(), - "Cannot get() when the given valueSupplier returns null." - ); - } - - } - - public abstract T get(); - - public boolean isPresent() { - return true; - } - - public @NotNull T getOrElse(T other) { - return this.isPresent() ? this.get() : Objects.requireNonNull(other); - } - - public @Nullable T getOrElseNull() { - return this.isPresent() ? this.get() : null; - } - - public Option orElseLift(T other) { - return this.isPresent() ? this : new ValueOption<>(Objects.requireNonNull(other)); - } - - public Option orElseLiftLazy(Supplier lazyOther) { - return this.isPresent() ? this : new SupplierOption<>(Objects.requireNonNull(lazyOther)); - } - - public Option map(Function mapper) { - return new SupplierOption<>(() -> mapper.apply(this.get())); - } - - public Option mapLazy(Function> lazyMapper) { - return new SupplierOption<>(() -> lazyMapper.apply(this.get()).get()); - } - - public Option flatMap(Function> mapper) { - return new SupplierOption<>(() -> mapper.apply(this.get()).get()); - } - - public Option flatMapLazy(Function>> lazyMapper) { - return new SupplierOption<>(() -> lazyMapper.apply(this.get()).get().get()); - } - - public void ifPresent(Consumer onPresent) { - if (this.isPresent()) { - onPresent.accept(this.get()); - } - } - - public void ifPresentOrElse(Consumer onPresent, Runnable orElse) { - if (this.isPresent()) { - onPresent.accept(this.get()); - } else { - orElse.run(); - } - } - - public R fold(Function onPresent, Supplier onEmpty) { - if (this.isPresent()) { - return onPresent.apply(this.get()); - } else { - return onEmpty.get(); - } - } - - public R foldMap(Monoid monoid, Function onPresent) { - if (this.isPresent()) { - return onPresent.apply(this.get()); - } else { - return monoid.empty(); - } - } - - public R foldFlatMap(Monoid monoid, Function> onPresent) { - if (this.isPresent()) { - return onPresent.apply(this.get()).get(); - } else { - return monoid.empty(); - } - } - -} diff --git a/util/fp/src/main/java/groowt/util/fp/property/DefaultListProperty.java b/util/fp/src/main/java/groowt/util/fp/property/DefaultListProperty.java deleted file mode 100644 index 558da9a..0000000 --- a/util/fp/src/main/java/groowt/util/fp/property/DefaultListProperty.java +++ /dev/null @@ -1,87 +0,0 @@ -package groowt.util.fp.property; - -import groowt.util.fp.provider.DefaultListProvider; -import groowt.util.fp.provider.DefaultProvider; -import groowt.util.fp.provider.ListProvider; -import groowt.util.fp.provider.Provider; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.function.Function; - -public class DefaultListProperty implements ListProperty { - - public static ListProperty ofType(Class type) { - return new DefaultListProperty<>(type); - } - - private final Class type; - private final List> elementProviders = new ArrayList<>(); - - protected DefaultListProperty(Class type) { - this.type = type; - } - - @Override - public Class getType() { - return this.type; - } - - @Override - public void addElement(T element) { - this.elementProviders.add(DefaultProvider.of(element)); - } - - @SuppressWarnings("unchecked") - @Override - public void addProvider(Provider elementProvider) { - this.elementProviders.add((Provider) elementProvider); - } - - @Override - public void addAllElements(Collection elements) { - elements.forEach(this::addElement); - } - - @Override - public void addAllProviders(Collection> elementProviders) { - elementProviders.forEach(this::addProvider); - } - - @Override - public ListProvider map(Class targetType, Function mapper) { - return DefaultListProvider.ofElementProviders(targetType, this.elementProviders.stream() - .map(elementProvider -> elementProvider.map(targetType, mapper)) - .toList() - ); - } - - @Override - public ListProvider flatMap( - Class targetType, - Function> flatMapper - ) { - return DefaultListProvider.ofElementProviders(targetType, this.elementProviders.stream() - .map(elementProvider -> elementProvider.flatMap(targetType, flatMapper)) - .toList() - ); - } - - @Override - public ListProvider withType(Class desiredType) { - return DefaultListProvider.ofElementProviders(desiredType, this.elementProviders.stream() - .filter(elementProvider -> desiredType.isAssignableFrom(elementProvider.getType())) - .map(elementProvider -> elementProvider.map(desiredType, desiredType::cast)) - .toList() - ); - } - - @Override - public List get() { - return this.elementProviders.stream() - .map(Provider::get) - .toList(); - } - -} diff --git a/util/fp/src/main/java/groowt/util/fp/property/DefaultProperty.java b/util/fp/src/main/java/groowt/util/fp/property/DefaultProperty.java deleted file mode 100644 index a228f0a..0000000 --- a/util/fp/src/main/java/groowt/util/fp/property/DefaultProperty.java +++ /dev/null @@ -1,114 +0,0 @@ -package groowt.util.fp.property; - -import groovy.lang.Closure; -import groowt.util.fp.provider.DefaultProvider; -import groowt.util.fp.provider.Provider; - -import java.util.ArrayList; -import java.util.List; -import java.util.function.Supplier; - -import static java.util.Objects.requireNonNull; - -public class DefaultProperty implements Property { - - public static Property empty(Class type) { - return new DefaultProperty<>(type); - } - - @SuppressWarnings("unchecked") - public static Property of(T t) { - final Property property = new DefaultProperty<>((Class) t.getClass()); - property.set(t); - return property; - } - - public static Property ofProvider(Class type, Provider tProvider) { - final Property property = new DefaultProperty<>(type); - property.set(tProvider); - return property; - } - - public static Property ofLazy(Class type, Supplier tSupplier) { - final Property property = new DefaultProperty<>(type); - property.set(DefaultProvider.ofLazy(type, tSupplier)); - return property; - } - - private final Class type; - private final List> configureClosures = new ArrayList<>(); - - private Provider provider; - private Provider convention; - - protected DefaultProperty(Class type) { - this.type = type; - } - - @Override - public Class getType() { - return this.type; - } - - @Override - public boolean isPresent() { - return this.provider != null || this.convention != null; - } - - @Override - public boolean isEmpty() { - return this.provider == null && this.convention == null; - } - - @Override - public void set(T t) { - requireNonNull(t); - this.provider = DefaultProvider.of(t); - } - - @Override - public void set(Provider tProvider) { - requireNonNull(tProvider); - this.provider = tProvider; - } - - @Override - public void setConvention(T convention) { - requireNonNull(convention); - this.convention = DefaultProvider.of(convention); - } - - @Override - public void setConvention(Provider convention) { - requireNonNull(convention); - this.convention = convention; - } - - @Override - public void configure(Closure configureClosure) { - this.configureClosures.add(configureClosure); - } - - private void doConfigures(T t) { - for (final var configureClosure : this.configureClosures) { - configureClosure.setDelegate(t); - configureClosure.call(t); - } - } - - @Override - public T get() { - if (!this.isPresent()) { - throw new NullPointerException("Cannot get() from an empty Property. Set the value or set the convention."); - } - final T t; - if (this.provider != null) { - t = this.provider.get(); - } else { - t = this.convention.get(); - } - this.doConfigures(t); - return t; - } - -} diff --git a/util/fp/src/main/java/groowt/util/fp/property/ListProperty.java b/util/fp/src/main/java/groowt/util/fp/property/ListProperty.java deleted file mode 100644 index 50bc26e..0000000 --- a/util/fp/src/main/java/groowt/util/fp/property/ListProperty.java +++ /dev/null @@ -1,36 +0,0 @@ -package groowt.util.fp.property; - -import groowt.util.fp.provider.ListProvider; -import groowt.util.fp.provider.Provider; - -import java.util.Collection; -import java.util.Objects; - -public interface ListProperty extends ListProvider { - - void addElement(T element); - void addProvider(Provider elementProvider); - void addAllElements(Collection elements); - void addAllProviders(Collection> elementProviders); - - @SuppressWarnings("unchecked") - default void leftShift(Object object) { - Objects.requireNonNull(object); - if (object instanceof Provider provider) { - if (!this.getType().isAssignableFrom(provider.getType())) { - throw new IllegalArgumentException( - "The type of the given Provider (" + provider.getType().getName() + ") is not compatible with" + - "the type of this ListProperty (" + this.getType().getName() + ")." - ); - } - this.addProvider((Provider) provider); - } else if (this.getType().isAssignableFrom(object.getClass())) { - this.addElement((T) object); - } else { - throw new IllegalArgumentException("The type of the given object (" + object.getClass().getName() + - ") is not compatible with the type of this ListProperty (" + this.getType().getName() + ")." - ); - } - } - -} diff --git a/util/fp/src/main/java/groowt/util/fp/property/Property.java b/util/fp/src/main/java/groowt/util/fp/property/Property.java deleted file mode 100644 index dd6c69b..0000000 --- a/util/fp/src/main/java/groowt/util/fp/property/Property.java +++ /dev/null @@ -1,42 +0,0 @@ -package groowt.util.fp.property; - -import groovy.lang.Closure; -import groovy.lang.DelegatesTo; -import groovy.transform.stc.ClosureParams; -import groovy.transform.stc.FromString; -import groowt.util.fp.provider.Provider; -import org.jetbrains.annotations.Nullable; - -public interface Property extends Provider { - - void set(T t); - void set(Provider tProvider); - void setConvention(T t); - void setConvention(Provider tProvider); - - void configure( - @DelegatesTo(type = "T") - @ClosureParams(value = FromString.class, options = "T") - Closure configureClosure - ); - - boolean isPresent(); - boolean isEmpty(); - - default T fold(@Nullable T onEmpty) { - if (this.isPresent()) { - return this.get(); - } else { - return onEmpty; - } - } - - default T fold(Provider onEmpty) { - if (this.isPresent()) { - return this.get(); - } else { - return onEmpty.get(); - } - } - -} diff --git a/util/fp/src/main/java/groowt/util/fp/provider/DefaultListProvider.java b/util/fp/src/main/java/groowt/util/fp/provider/DefaultListProvider.java deleted file mode 100644 index d4b5eaf..0000000 --- a/util/fp/src/main/java/groowt/util/fp/provider/DefaultListProvider.java +++ /dev/null @@ -1,74 +0,0 @@ -package groowt.util.fp.provider; - -import java.util.ArrayList; -import java.util.List; -import java.util.function.Function; - -public class DefaultListProvider implements ListProvider { - - public static ListProvider ofElements(Class elementType, List elements) { - return new DefaultListProvider<>( - elementType, - elements.stream() - .>map(DefaultProvider::of) - .toList() - ); - } - - public static ListProvider ofElementProviders( - Class elementType, - List> elementProviders - ) { - return new DefaultListProvider<>(elementType, elementProviders); - } - - private final Class elementType; - private final List> elementProviders; - - private DefaultListProvider(Class elementType, List> elementProviders) { - this.elementType = elementType; - this.elementProviders = new ArrayList<>(elementProviders); - } - - @Override - public Class getType() { - return this.elementType; - } - - @Override - public ListProvider map(Class targetType, Function mapper) { - final List> uProviders = this.elementProviders.stream() - .map(elementProvider -> elementProvider.map(targetType, mapper)) - .toList(); - return new DefaultListProvider<>(targetType, uProviders); - } - - @Override - public ListProvider flatMap( - Class targetType, - Function> flatMapper - ) { - final List> uProviders = this.elementProviders.stream() - .map(elementProvider -> elementProvider.flatMap(targetType, flatMapper)) - .toList(); - return new DefaultListProvider<>(targetType, uProviders); - } - - @Override - public ListProvider withType(Class desiredType) { - return new DefaultListProvider<>(desiredType, this.elementProviders.stream() - .filter(elementProvider -> desiredType.isAssignableFrom(elementProvider.getType())) - .map(elementProvider -> elementProvider.map(desiredType, desiredType::cast)) - .toList() - ); - } - - @Override - public List get() { - final List filtered = this.elementProviders.stream() - .map(Provider::get) - .toList(); - return new ArrayList<>(filtered); - } - -} diff --git a/util/fp/src/main/java/groowt/util/fp/provider/DefaultNamedProvider.java b/util/fp/src/main/java/groowt/util/fp/provider/DefaultNamedProvider.java deleted file mode 100644 index 362c4b7..0000000 --- a/util/fp/src/main/java/groowt/util/fp/provider/DefaultNamedProvider.java +++ /dev/null @@ -1,37 +0,0 @@ -package groowt.util.fp.provider; - -class DefaultNamedProvider implements NamedProvider { - - private final Class type; - private final String name; - private final Provider delegate; - - @SuppressWarnings("unchecked") - public DefaultNamedProvider(String name, T element) { - this.type = (Class) element.getClass(); - this.name = name; - this.delegate = DefaultProvider.of(element); - } - - public DefaultNamedProvider(Class type, String name, Provider delegate) { - this.type = type; - this.name = name; - this.delegate = delegate; - } - - @Override - public Class getType() { - return this.type; - } - - @Override - public String getName() { - return this.name; - } - - @Override - public T get() { - return this.delegate.get(); - } - -} diff --git a/util/fp/src/main/java/groowt/util/fp/provider/DefaultNamedSetProvider.java b/util/fp/src/main/java/groowt/util/fp/provider/DefaultNamedSetProvider.java deleted file mode 100644 index 67032e0..0000000 --- a/util/fp/src/main/java/groowt/util/fp/provider/DefaultNamedSetProvider.java +++ /dev/null @@ -1,53 +0,0 @@ -package groowt.util.fp.provider; - -import java.util.HashSet; -import java.util.Map; -import java.util.Set; -import java.util.function.Predicate; -import java.util.stream.Collectors; - -class DefaultNamedSetProvider extends DefaultSetProvider implements NamedSetProvider { - - public static NamedSetProvider ofElementsAndNames(Class type, Map namesAndElements) { - return new DefaultNamedSetProvider<>(type, namesAndElements.entrySet().stream() - .map(entry -> new DefaultNamedProvider<>(entry.getKey(), entry.getValue())) - .collect(Collectors.toSet()) - ); - } - - public static NamedSetProvider ofNamedProviders(Class type, Set> providers) { - return new DefaultNamedSetProvider<>(type, providers); - } - - protected DefaultNamedSetProvider(Class type, Set> elementProviders) { - super(type, elementProviders); - } - - @Override - public NamedSetProvider withNames(Predicate namePredicate) { - return new DefaultNamedSetProvider<>(this.getType(), this.getProviders().stream() - .map(provider -> (NamedProvider) provider) - .filter(namedProvider -> namePredicate.test(namedProvider.getName())) - .collect(Collectors.toSet()) - ); - } - - @Override - public NamedProvider withName(String name) { - return this.getProviders().stream() - .map(provider -> (NamedProvider) provider) - .filter(namedProvider -> name.equals(namedProvider.getName())) - .findFirst() - .orElseThrow(() -> new NullPointerException("There is no NamedProvider present with name " + name)); - } - - @SuppressWarnings("unchecked") - @Override - public NamedSetProvider zipWithNames(NamedSetProvider other) { - final Set> combined = new HashSet<>(); - this.getProviders().forEach(provider -> combined.add((NamedProvider) provider)); - other.getProviders().forEach(provider -> combined.add((NamedProvider) provider)); - return new DefaultNamedSetProvider<>(this.getType(), combined); - } - -} diff --git a/util/fp/src/main/java/groowt/util/fp/provider/DefaultProvider.java b/util/fp/src/main/java/groowt/util/fp/provider/DefaultProvider.java deleted file mode 100644 index b85e318..0000000 --- a/util/fp/src/main/java/groowt/util/fp/provider/DefaultProvider.java +++ /dev/null @@ -1,43 +0,0 @@ -package groowt.util.fp.provider; - -import java.util.Objects; -import java.util.function.Supplier; - -public class DefaultProvider implements Provider { - - public static Provider of(T t) { - Objects.requireNonNull(t); - return new DefaultProvider<>(t); - } - - public static Provider ofLazy(Class type, Supplier tSupplier) { - Objects.requireNonNull(type); - Objects.requireNonNull(tSupplier); - return new DefaultProvider<>(type, tSupplier); - } - - private final Class type; - private final Supplier tSupplier; - - @SuppressWarnings("unchecked") - protected DefaultProvider(T t) { - this.tSupplier = () -> t; - this.type = (Class) t.getClass(); - } - - protected DefaultProvider(Class type, Supplier tSupplier) { - this.type = type; - this.tSupplier = tSupplier::get; - } - - @Override - public Class getType() { - return this.type; - } - - @Override - public T get() { - return Objects.requireNonNull(this.tSupplier.get()); - } - -} diff --git a/util/fp/src/main/java/groowt/util/fp/provider/DefaultSetProvider.java b/util/fp/src/main/java/groowt/util/fp/provider/DefaultSetProvider.java deleted file mode 100644 index 13fb83a..0000000 --- a/util/fp/src/main/java/groowt/util/fp/provider/DefaultSetProvider.java +++ /dev/null @@ -1,78 +0,0 @@ -package groowt.util.fp.provider; - -import java.util.HashSet; -import java.util.Set; -import java.util.function.Function; -import java.util.stream.Collectors; - -public class DefaultSetProvider implements SetProvider { - - public static SetProvider ofElements(Class type, Set elements) { - return new DefaultSetProvider<>(type, elements.stream() - .>map(DefaultProvider::of) - .collect(Collectors.toSet()) - ); - } - - public static SetProvider ofElementProviders(Class type, Set> providers) { - return new DefaultSetProvider<>(type, providers); - } - - private final Class type; - private final Set> elementProviders; - - protected DefaultSetProvider(Class type, Set> elementProviders) { - this.type = type; - this.elementProviders = new HashSet<>(elementProviders); - } - - @Override - public Class getType() { - return this.type; - } - - @Override - public Set> getProviders() { - return this.elementProviders; - } - - @Override - public SetProvider map(Class targetType, Function mapper) { - return new DefaultSetProvider<>(targetType, this.elementProviders.stream() - .map(elementProvider -> elementProvider.map(targetType, mapper)) - .collect(Collectors.toSet()) - ); - } - - @Override - public SetProvider flatMap(Class targetType, Function> mapper) { - return new DefaultSetProvider<>(targetType, this.elementProviders.stream() - .map(elementProvider -> elementProvider.flatMap(targetType, mapper)) - .collect(Collectors.toSet()) - ); - } - - @Override - public SetProvider withType(Class desiredType) { - return new DefaultSetProvider<>(desiredType, this.elementProviders.stream() - .filter(elementProvider -> desiredType.isAssignableFrom(elementProvider.getType())) - .map(elementProvider -> elementProvider.map(desiredType, desiredType::cast)) - .collect(Collectors.toSet()) - ); - } - - @SuppressWarnings("unchecked") - @Override - public SetProvider zip(SetProvider other) { - final Set> combined = new HashSet<>(); - combined.addAll(this.elementProviders); - other.getProviders().forEach(provider -> combined.add((Provider) provider)); - return new DefaultSetProvider<>(this.getType(), combined); - } - - @Override - public Set get() { - return this.elementProviders.stream().map(Provider::get).collect(Collectors.toSet()); - } - -} diff --git a/util/fp/src/main/java/groowt/util/fp/provider/ListProvider.java b/util/fp/src/main/java/groowt/util/fp/provider/ListProvider.java deleted file mode 100644 index daa9ef3..0000000 --- a/util/fp/src/main/java/groowt/util/fp/provider/ListProvider.java +++ /dev/null @@ -1,17 +0,0 @@ -package groowt.util.fp.provider; - -import java.util.List; -import java.util.function.Function; - -public interface ListProvider { - - Class getType(); - - ListProvider map(Class targetType, Function mapper); - ListProvider flatMap(Class targetType, Function> flatMapper); - - ListProvider withType(Class desiredType); - - List get(); - -} diff --git a/util/fp/src/main/java/groowt/util/fp/provider/NamedProvider.java b/util/fp/src/main/java/groowt/util/fp/provider/NamedProvider.java deleted file mode 100644 index c590911..0000000 --- a/util/fp/src/main/java/groowt/util/fp/provider/NamedProvider.java +++ /dev/null @@ -1,21 +0,0 @@ -package groowt.util.fp.provider; - -import groowt.util.fp.hkt.SemiGroup; - -public interface NamedProvider extends Provider { - - String getName(); - - default NamedProvider zipWithNames( - SemiGroup tSemiGroup, - SemiGroup nameSemiGroup, - NamedProvider other - ) { - return new DefaultNamedProvider<>( - this.getType(), - nameSemiGroup.concat(this.getName(), other.getName()), - DefaultProvider.ofLazy(this.getType(), () -> tSemiGroup.concat(this.get(), other.get())) - ); - } - -} diff --git a/util/fp/src/main/java/groowt/util/fp/provider/NamedSetProvider.java b/util/fp/src/main/java/groowt/util/fp/provider/NamedSetProvider.java deleted file mode 100644 index 2bb254c..0000000 --- a/util/fp/src/main/java/groowt/util/fp/provider/NamedSetProvider.java +++ /dev/null @@ -1,12 +0,0 @@ -package groowt.util.fp.provider; - -import java.util.function.Predicate; - -public interface NamedSetProvider extends SetProvider { - - NamedSetProvider withNames(Predicate namePredicate); - NamedProvider withName(String name); - - NamedSetProvider zipWithNames(NamedSetProvider other); - -} diff --git a/util/fp/src/main/java/groowt/util/fp/provider/Provider.java b/util/fp/src/main/java/groowt/util/fp/provider/Provider.java deleted file mode 100644 index b499b0f..0000000 --- a/util/fp/src/main/java/groowt/util/fp/provider/Provider.java +++ /dev/null @@ -1,72 +0,0 @@ -package groowt.util.fp.provider; - -import groowt.util.fp.hkt.SemiGroup; - -import java.util.Objects; -import java.util.function.Function; -import java.util.function.Predicate; -import java.util.function.Supplier; - -/** - * @implSpec Must throw {@link NullPointerException} if the contained value is {@code null} - * when either created or when retrieved. - * - * @param The type of the value contained within. - */ -public interface Provider { - - Class getType(); - - /** - * @implSpec Must throw {@link NullPointerException} if the value is null. - * - * @throws NullPointerException if the value contained within this Provider is null. - * @return The value. - */ - T get(); - - default T get(Supplier onEmpty) { - try { - return this.get(); - } catch (NullPointerException nullPointerException) { - final RuntimeException onEmptyException = onEmpty.get(); - onEmptyException.initCause(nullPointerException); - throw onEmptyException; - } - } - - default Provider filter(Predicate filter) { - Objects.requireNonNull(filter); - return new DefaultProvider<>(this.getType(), () -> { - final T t = this.get(); - if (filter.test(t)) { - return t; - } else { - throw new NullPointerException("This Provider is empty (did not pass filter)."); - } - }); - } - - default Provider map(Class targetType, Function mapper) { - Objects.requireNonNull(mapper); - return new DefaultProvider<>(targetType, () -> mapper.apply(this.get())); - } - - default Provider flatMap( - Class targetType, - Function> flatMapper - ) { - Objects.requireNonNull(flatMapper); - return new DefaultProvider<>(targetType, () -> flatMapper.apply(this.get()).get()); - } - - default Provider zip( - SemiGroup semiGroup, - Provider other - ) { - Objects.requireNonNull(semiGroup); - Objects.requireNonNull(other); - return new DefaultProvider<>(this.getType(), () -> semiGroup.concat(this.get(), other.get())); - } - -} diff --git a/util/fp/src/main/java/groowt/util/fp/provider/SetProvider.java b/util/fp/src/main/java/groowt/util/fp/provider/SetProvider.java deleted file mode 100644 index 7797b54..0000000 --- a/util/fp/src/main/java/groowt/util/fp/provider/SetProvider.java +++ /dev/null @@ -1,22 +0,0 @@ -package groowt.util.fp.provider; - -import java.util.Set; -import java.util.function.Function; - -public interface SetProvider { - - Class getType(); - - Set> getProviders(); - - SetProvider map(Class targetType, Function mapper); - - SetProvider flatMap(Class targetType, Function> mapper); - - SetProvider withType(Class desiredType); - - Set get(); - - SetProvider zip(SetProvider other); - -} diff --git a/web-view-components-compiler/build.gradle b/web-view-components-compiler/build.gradle index 183770d..aef88d1 100644 --- a/web-view-components-compiler/build.gradle +++ b/web-view-components-compiler/build.gradle @@ -55,7 +55,6 @@ sourceSets { dependencies { api project(':web-view-components') api libs.antlr.runtime - api project(':fp') compileOnlyApi libs.jetbrains.anotations