From e1abc67989c199011901613093b507b101a30757 Mon Sep 17 00:00:00 2001 From: dfsek Date: Wed, 7 Jul 2021 20:38:16 -0700 Subject: [PATCH] clean up and annotate generic utils --- .../terra/api/util/generic/either/Either.java | 33 +++++++++++++++++-- .../api/util/generic/pair/ImmutablePair.java | 22 +++++++++++++ .../terra/api/util/generic/pair/Pair.java | 21 ++++++++++++ 3 files changed, 74 insertions(+), 2 deletions(-) diff --git a/common/api/src/main/java/com/dfsek/terra/api/util/generic/either/Either.java b/common/api/src/main/java/com/dfsek/terra/api/util/generic/either/Either.java index cad5d93bf..3c12ddbd6 100644 --- a/common/api/src/main/java/com/dfsek/terra/api/util/generic/either/Either.java +++ b/common/api/src/main/java/com/dfsek/terra/api/util/generic/either/Either.java @@ -1,5 +1,9 @@ package com.dfsek.terra.api.util.generic.either; +import org.jetbrains.annotations.Contract; +import org.jetbrains.annotations.NotNull; + +import java.util.Objects; import java.util.Optional; import java.util.function.Consumer; @@ -14,29 +18,39 @@ public final class Either { this.leftPresent = leftPresent; } + @NotNull + @Contract("_ -> new") public static Either left(L1 left) { - return new Either<>(left, null, true); + return new Either<>(Objects.requireNonNull(left), null, true); } + @NotNull + @Contract("_ -> new") public static Either right(R1 right) { - return new Either<>(null, right, false); + return new Either<>(null, Objects.requireNonNull(right), false); } + @NotNull public Optional getLeft() { if(leftPresent) return Optional.of(left); return Optional.empty(); } + @NotNull public Optional getRight() { if(!leftPresent) return Optional.of(right); return Optional.empty(); } + @NotNull + @Contract("_ -> this") public Either ifLeft(Consumer action) { if(leftPresent) action.accept(left); return this; } + @NotNull + @Contract("_ -> this") public Either ifRight(Consumer action) { if(!leftPresent) action.accept(right); return this; @@ -49,4 +63,19 @@ public final class Either { public boolean hasRight() { return !leftPresent; } + + @Override + public int hashCode() { + return Objects.hash(left, right); + } + + @Override + public boolean equals(Object obj) { + if(!(obj instanceof Either)) return false; + + Either that = (Either) obj; + + return (this.leftPresent && that.leftPresent && Objects.equals(this.left, that.left)) + || (!this.leftPresent && !that.leftPresent && Objects.equals(this.right, that.right)); + } } diff --git a/common/api/src/main/java/com/dfsek/terra/api/util/generic/pair/ImmutablePair.java b/common/api/src/main/java/com/dfsek/terra/api/util/generic/pair/ImmutablePair.java index 0ca0c0ad3..132196686 100644 --- a/common/api/src/main/java/com/dfsek/terra/api/util/generic/pair/ImmutablePair.java +++ b/common/api/src/main/java/com/dfsek/terra/api/util/generic/pair/ImmutablePair.java @@ -1,5 +1,10 @@ package com.dfsek.terra.api.util.generic.pair; +import org.jetbrains.annotations.Contract; +import org.jetbrains.annotations.NotNull; + +import java.util.Objects; + public final class ImmutablePair { private final L left; private final R right; @@ -11,6 +16,7 @@ public final class ImmutablePair { this.right = right; } + @Contract("_, _ -> new") public static ImmutablePair of(L1 left, R1 right) { return new ImmutablePair<>(left, right); } @@ -23,12 +29,28 @@ public final class ImmutablePair { return left; } + @Contract("-> new") @SuppressWarnings("unchecked") public static ImmutablePair ofNull() { return (ImmutablePair) NULL; } + @NotNull + @Contract("-> new") public Pair mutable() { return Pair.of(left, right); } + + @Override + public boolean equals(Object obj) { + if(!(obj instanceof ImmutablePair)) return false; + + ImmutablePair that = (ImmutablePair) obj; + return Objects.equals(this.left, that.left) && Objects.equals(this.right, that.right); + } + + @Override + public int hashCode() { + return Objects.hash(left, right); + } } diff --git a/common/api/src/main/java/com/dfsek/terra/api/util/generic/pair/Pair.java b/common/api/src/main/java/com/dfsek/terra/api/util/generic/pair/Pair.java index 5ec1ede8f..68052dfea 100644 --- a/common/api/src/main/java/com/dfsek/terra/api/util/generic/pair/Pair.java +++ b/common/api/src/main/java/com/dfsek/terra/api/util/generic/pair/Pair.java @@ -1,5 +1,10 @@ package com.dfsek.terra.api.util.generic.pair; +import org.jetbrains.annotations.Contract; +import org.jetbrains.annotations.NotNull; + +import java.util.Objects; + public class Pair { private L left; private R right; @@ -9,6 +14,8 @@ public class Pair { this.right = right; } + @NotNull + @Contract("_, _ -> new") public static Pair of(L1 left, R1 right) { return new Pair<>(left, right); } @@ -29,7 +36,21 @@ public class Pair { this.right = right; } + @Contract("-> new") public ImmutablePair immutable() { return ImmutablePair.of(left, right); } + + @Override + public boolean equals(Object obj) { + if(!(obj instanceof Pair)) return false; + + Pair that = (Pair) obj; + return Objects.equals(this.left, that.left) && Objects.equals(this.right, that.right); + } + + @Override + public int hashCode() { + return Objects.hash(left, right); + } }