From 4a135275c6390454ca35d2c08c904c39d4a5cafc Mon Sep 17 00:00:00 2001 From: 4drian3d Date: Thu, 14 Apr 2022 15:08:04 -0500 Subject: [PATCH 1/5] fix: Fixed TagResolvers equality --- .../tag/resolver/CachingTagResolver.java | 21 +++++++++++++++++ .../tag/resolver/EmptyTagResolver.java | 5 ++++ .../tag/resolver/MapTagResolver.java | 21 +++++++++++++++++ .../tag/resolver/SequentialTagResolver.java | 21 +++++++++++++++++ .../text/minimessage/tag/TagResolverTest.java | 23 +++++++++++++++++++ 5 files changed, 91 insertions(+) diff --git a/text-minimessage/src/main/java/net/kyori/adventure/text/minimessage/tag/resolver/CachingTagResolver.java b/text-minimessage/src/main/java/net/kyori/adventure/text/minimessage/tag/resolver/CachingTagResolver.java index 66a28501c..faa9d6d1f 100644 --- a/text-minimessage/src/main/java/net/kyori/adventure/text/minimessage/tag/resolver/CachingTagResolver.java +++ b/text-minimessage/src/main/java/net/kyori/adventure/text/minimessage/tag/resolver/CachingTagResolver.java @@ -25,6 +25,7 @@ import java.util.HashMap; import java.util.Map; +import java.util.Objects; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.minimessage.internal.serializer.ClaimConsumer; import net.kyori.adventure.text.minimessage.internal.serializer.SerializableResolver; @@ -78,4 +79,24 @@ public void handle(final @NotNull Component serializable, final @NotNull ClaimCo ((SerializableResolver) this.resolver).handle(serializable, consumer); } } + + @Override + public boolean equals(final Object other) { + if (this == other) { + return true; + } + if (other == null) { + return false; + } + if (other.getClass() != CachingTagResolver.class) { + return false; + } + final CachingTagResolver that = (CachingTagResolver) other; + return Objects.equals(this.cache, that.cache); + } + + @Override + public int hashCode() { + return Objects.hash(this.cache, this.resolver); + } } diff --git a/text-minimessage/src/main/java/net/kyori/adventure/text/minimessage/tag/resolver/EmptyTagResolver.java b/text-minimessage/src/main/java/net/kyori/adventure/text/minimessage/tag/resolver/EmptyTagResolver.java index 0c4b1ab5c..0d36e190a 100644 --- a/text-minimessage/src/main/java/net/kyori/adventure/text/minimessage/tag/resolver/EmptyTagResolver.java +++ b/text-minimessage/src/main/java/net/kyori/adventure/text/minimessage/tag/resolver/EmptyTagResolver.java @@ -56,4 +56,9 @@ public boolean contributeToMap(final @NotNull Map map) { @Override public void handle(final @NotNull Component serializable, final @NotNull ClaimConsumer consumer) { } + + @Override + public boolean equals(final Object other) { + return EmptyTagResolver.INSTANCE == other; + } } diff --git a/text-minimessage/src/main/java/net/kyori/adventure/text/minimessage/tag/resolver/MapTagResolver.java b/text-minimessage/src/main/java/net/kyori/adventure/text/minimessage/tag/resolver/MapTagResolver.java index 2ec5a2dc0..f3dc157d3 100644 --- a/text-minimessage/src/main/java/net/kyori/adventure/text/minimessage/tag/resolver/MapTagResolver.java +++ b/text-minimessage/src/main/java/net/kyori/adventure/text/minimessage/tag/resolver/MapTagResolver.java @@ -24,6 +24,7 @@ package net.kyori.adventure.text.minimessage.tag.resolver; import java.util.Map; +import java.util.Objects; import net.kyori.adventure.text.minimessage.tag.Tag; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -45,4 +46,24 @@ public boolean contributeToMap(final @NotNull Map map) { map.putAll(this.tagMap); return true; } + + @Override + public boolean equals(final Object other) { + if (this == other) { + return true; + } + if (other == null) { + return false; + } + if (other.getClass() != MapTagResolver.class) { + return false; + } + final MapTagResolver that = (MapTagResolver) other; + return Objects.equals(this.tagMap, that.tagMap); + } + + @Override + public int hashCode() { + return Objects.hash(this.tagMap); + } } diff --git a/text-minimessage/src/main/java/net/kyori/adventure/text/minimessage/tag/resolver/SequentialTagResolver.java b/text-minimessage/src/main/java/net/kyori/adventure/text/minimessage/tag/resolver/SequentialTagResolver.java index 04bc5268a..04abbebae 100644 --- a/text-minimessage/src/main/java/net/kyori/adventure/text/minimessage/tag/resolver/SequentialTagResolver.java +++ b/text-minimessage/src/main/java/net/kyori/adventure/text/minimessage/tag/resolver/SequentialTagResolver.java @@ -23,6 +23,7 @@ */ package net.kyori.adventure.text.minimessage.tag.resolver; +import java.util.Arrays; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.minimessage.Context; import net.kyori.adventure.text.minimessage.ParsingException; @@ -89,4 +90,24 @@ public void handle(@NotNull final Component serializable, @NotNull final ClaimCo } } } + + @Override + public boolean equals(final Object other) { + if (other == this) { + return true; + } + if (other == null) { + return false; + } + if (other.getClass() != SequentialTagResolver.class) { + return false; + } + final SequentialTagResolver that = (SequentialTagResolver) other; + return Arrays.equals(this.resolvers, that.resolvers); + } + + @Override + public int hashCode() { + return Arrays.hashCode(this.resolvers); + } } diff --git a/text-minimessage/src/test/java/net/kyori/adventure/text/minimessage/tag/TagResolverTest.java b/text-minimessage/src/test/java/net/kyori/adventure/text/minimessage/tag/TagResolverTest.java index ac10c4f65..0ab255742 100644 --- a/text-minimessage/src/test/java/net/kyori/adventure/text/minimessage/tag/TagResolverTest.java +++ b/text-minimessage/src/test/java/net/kyori/adventure/text/minimessage/tag/TagResolverTest.java @@ -138,6 +138,29 @@ void testValidTagName() { assertDoesNotThrow(() -> TagResolver.resolver("v_9_v", Tag.preProcessParsed("something"))); } + @Test + void testTagResolverEquality() { + final TagResolver.Single first = Placeholder.unparsed("first", "firstreplace"); + final TagResolver.Single second = Placeholder.unparsed("second", "secondreplace"); + final TagResolver third = TagResolver.caching((name) -> null); + final TagResolver empty = TagResolver.empty(); + + assertEquals( + TagResolver.resolver( + first, + second, + third, + empty + ), + TagResolver.resolver( + first, + second, + third, + empty + ) + ); + } + private static @NotNull Tag resolveForTest(final TagResolver resolver, final String tag) { try { final Context ctx = AbstractTest.dummyContext("help i shouldn't be seen"); From 0f0e37df197d46ad2efb740cbe18552be15584d9 Mon Sep 17 00:00:00 2001 From: 4drian3d Date: Thu, 14 Apr 2022 22:38:42 +0000 Subject: [PATCH 2/5] Improved equality test --- .../text/minimessage/tag/TagResolverTest.java | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/text-minimessage/src/test/java/net/kyori/adventure/text/minimessage/tag/TagResolverTest.java b/text-minimessage/src/test/java/net/kyori/adventure/text/minimessage/tag/TagResolverTest.java index 0ab255742..b366550cb 100644 --- a/text-minimessage/src/test/java/net/kyori/adventure/text/minimessage/tag/TagResolverTest.java +++ b/text-minimessage/src/test/java/net/kyori/adventure/text/minimessage/tag/TagResolverTest.java @@ -140,23 +140,26 @@ void testValidTagName() { @Test void testTagResolverEquality() { - final TagResolver.Single first = Placeholder.unparsed("first", "firstreplace"); - final TagResolver.Single second = Placeholder.unparsed("second", "secondreplace"); - final TagResolver third = TagResolver.caching((name) -> null); + final TagResolver.Single single = Placeholder.unparsed("single", "replace"); + final TagResolver standard = TagResolver.standard(); + final TagResolver whitoutArguments = TagResolver.caching((name) -> null); + final TagResolver tag = TagResolver.resolver("tag", Tag.selfClosingInserting(Component.empty())); final TagResolver empty = TagResolver.empty(); assertEquals( TagResolver.resolver( - first, - second, - third, - empty + single, + standard, + whitoutArguments, + empty, + tag ), TagResolver.resolver( - first, - second, - third, - empty + single, + standard, + whitoutArguments, + empty, + tag ) ); } From b807aaa7ac86bb4c07627c2c545971230af00c64 Mon Sep 17 00:00:00 2001 From: 4drian3d Date: Fri, 15 Apr 2022 21:20:53 +0000 Subject: [PATCH 3/5] Apply suggestions review --- .../text/minimessage/tag/resolver/CachingTagResolver.java | 7 ++----- .../text/minimessage/tag/resolver/EmptyTagResolver.java | 5 ----- .../text/minimessage/tag/resolver/MapTagResolver.java | 7 ++----- .../minimessage/tag/resolver/SequentialTagResolver.java | 7 ++----- 4 files changed, 6 insertions(+), 20 deletions(-) diff --git a/text-minimessage/src/main/java/net/kyori/adventure/text/minimessage/tag/resolver/CachingTagResolver.java b/text-minimessage/src/main/java/net/kyori/adventure/text/minimessage/tag/resolver/CachingTagResolver.java index faa9d6d1f..5ba490a26 100644 --- a/text-minimessage/src/main/java/net/kyori/adventure/text/minimessage/tag/resolver/CachingTagResolver.java +++ b/text-minimessage/src/main/java/net/kyori/adventure/text/minimessage/tag/resolver/CachingTagResolver.java @@ -81,14 +81,11 @@ public void handle(final @NotNull Component serializable, final @NotNull ClaimCo } @Override - public boolean equals(final Object other) { + public boolean equals(final @Nullable Object other) { if (this == other) { return true; } - if (other == null) { - return false; - } - if (other.getClass() != CachingTagResolver.class) { + if (!(other instanceof CachingTagResolver)) { return false; } final CachingTagResolver that = (CachingTagResolver) other; diff --git a/text-minimessage/src/main/java/net/kyori/adventure/text/minimessage/tag/resolver/EmptyTagResolver.java b/text-minimessage/src/main/java/net/kyori/adventure/text/minimessage/tag/resolver/EmptyTagResolver.java index 0d36e190a..0c4b1ab5c 100644 --- a/text-minimessage/src/main/java/net/kyori/adventure/text/minimessage/tag/resolver/EmptyTagResolver.java +++ b/text-minimessage/src/main/java/net/kyori/adventure/text/minimessage/tag/resolver/EmptyTagResolver.java @@ -56,9 +56,4 @@ public boolean contributeToMap(final @NotNull Map map) { @Override public void handle(final @NotNull Component serializable, final @NotNull ClaimConsumer consumer) { } - - @Override - public boolean equals(final Object other) { - return EmptyTagResolver.INSTANCE == other; - } } diff --git a/text-minimessage/src/main/java/net/kyori/adventure/text/minimessage/tag/resolver/MapTagResolver.java b/text-minimessage/src/main/java/net/kyori/adventure/text/minimessage/tag/resolver/MapTagResolver.java index f3dc157d3..32696d844 100644 --- a/text-minimessage/src/main/java/net/kyori/adventure/text/minimessage/tag/resolver/MapTagResolver.java +++ b/text-minimessage/src/main/java/net/kyori/adventure/text/minimessage/tag/resolver/MapTagResolver.java @@ -48,14 +48,11 @@ public boolean contributeToMap(final @NotNull Map map) { } @Override - public boolean equals(final Object other) { + public boolean equals(final @Nullable Object other) { if (this == other) { return true; } - if (other == null) { - return false; - } - if (other.getClass() != MapTagResolver.class) { + if (!(other instanceof MapTagResolver)) { return false; } final MapTagResolver that = (MapTagResolver) other; diff --git a/text-minimessage/src/main/java/net/kyori/adventure/text/minimessage/tag/resolver/SequentialTagResolver.java b/text-minimessage/src/main/java/net/kyori/adventure/text/minimessage/tag/resolver/SequentialTagResolver.java index 04abbebae..7f30f6f55 100644 --- a/text-minimessage/src/main/java/net/kyori/adventure/text/minimessage/tag/resolver/SequentialTagResolver.java +++ b/text-minimessage/src/main/java/net/kyori/adventure/text/minimessage/tag/resolver/SequentialTagResolver.java @@ -92,14 +92,11 @@ public void handle(@NotNull final Component serializable, @NotNull final ClaimCo } @Override - public boolean equals(final Object other) { + public boolean equals(final @Nullable Object other) { if (other == this) { return true; } - if (other == null) { - return false; - } - if (other.getClass() != SequentialTagResolver.class) { + if (!(other instanceof SequentialTagResolver)) { return false; } final SequentialTagResolver that = (SequentialTagResolver) other; From fd4745f2f51c69b6820b3f051d5a3cdac4b49d76 Mon Sep 17 00:00:00 2001 From: 4drian3d Date: Wed, 20 Apr 2022 16:30:29 +0000 Subject: [PATCH 4/5] Implement CachingTagResolver test --- .../tag/resolver/CachingTagResolver.java | 3 +- .../text/minimessage/tag/TagResolverTest.java | 39 +++++++++---------- 2 files changed, 20 insertions(+), 22 deletions(-) diff --git a/text-minimessage/src/main/java/net/kyori/adventure/text/minimessage/tag/resolver/CachingTagResolver.java b/text-minimessage/src/main/java/net/kyori/adventure/text/minimessage/tag/resolver/CachingTagResolver.java index 5ba490a26..1563be6da 100644 --- a/text-minimessage/src/main/java/net/kyori/adventure/text/minimessage/tag/resolver/CachingTagResolver.java +++ b/text-minimessage/src/main/java/net/kyori/adventure/text/minimessage/tag/resolver/CachingTagResolver.java @@ -89,7 +89,8 @@ public boolean equals(final @Nullable Object other) { return false; } final CachingTagResolver that = (CachingTagResolver) other; - return Objects.equals(this.cache, that.cache); + return Objects.equals(this.resolver, that.resolver) + || Objects.equals(this.cache, that.cache); } @Override diff --git a/text-minimessage/src/test/java/net/kyori/adventure/text/minimessage/tag/TagResolverTest.java b/text-minimessage/src/test/java/net/kyori/adventure/text/minimessage/tag/TagResolverTest.java index b366550cb..18d042759 100644 --- a/text-minimessage/src/test/java/net/kyori/adventure/text/minimessage/tag/TagResolverTest.java +++ b/text-minimessage/src/test/java/net/kyori/adventure/text/minimessage/tag/TagResolverTest.java @@ -140,28 +140,25 @@ void testValidTagName() { @Test void testTagResolverEquality() { - final TagResolver.Single single = Placeholder.unparsed("single", "replace"); - final TagResolver standard = TagResolver.standard(); - final TagResolver whitoutArguments = TagResolver.caching((name) -> null); - final TagResolver tag = TagResolver.resolver("tag", Tag.selfClosingInserting(Component.empty())); - final TagResolver empty = TagResolver.empty(); - - assertEquals( - TagResolver.resolver( - single, - standard, - whitoutArguments, - empty, - tag - ), - TagResolver.resolver( - single, - standard, - whitoutArguments, - empty, - tag - ) + final TagResolver first = TagResolver.resolver( + Placeholder.unparsed("single", "replace"), + TagResolver.standard(), + TagResolver.caching((name) -> null), + TagResolver.empty(), + TagResolver.resolver("tag", Tag.selfClosingInserting(Component.empty())) + ); + final TagResolver second = TagResolver.resolver( + Placeholder.unparsed("single", "replace"), + TagResolver.standard(), + TagResolver.caching((name) -> null), + TagResolver.empty(), + TagResolver.resolver("tag", Tag.selfClosingInserting(Component.empty())) ); + + AbstractTest.dummyContext("equality test") + .deserialize("", first, second); + + assertEquals(first, second); } private static @NotNull Tag resolveForTest(final TagResolver resolver, final String tag) { From acb76be68bf89d628440d922e5e0af770ffaca1c Mon Sep 17 00:00:00 2001 From: 4drian3d Date: Tue, 26 Apr 2022 00:59:16 +0000 Subject: [PATCH 5/5] Removed cache equals check --- .../text/minimessage/tag/resolver/CachingTagResolver.java | 3 +-- .../kyori/adventure/text/minimessage/tag/TagResolverTest.java | 2 -- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/text-minimessage/src/main/java/net/kyori/adventure/text/minimessage/tag/resolver/CachingTagResolver.java b/text-minimessage/src/main/java/net/kyori/adventure/text/minimessage/tag/resolver/CachingTagResolver.java index 1563be6da..efcc12c13 100644 --- a/text-minimessage/src/main/java/net/kyori/adventure/text/minimessage/tag/resolver/CachingTagResolver.java +++ b/text-minimessage/src/main/java/net/kyori/adventure/text/minimessage/tag/resolver/CachingTagResolver.java @@ -89,8 +89,7 @@ public boolean equals(final @Nullable Object other) { return false; } final CachingTagResolver that = (CachingTagResolver) other; - return Objects.equals(this.resolver, that.resolver) - || Objects.equals(this.cache, that.cache); + return Objects.equals(this.resolver, that.resolver); } @Override diff --git a/text-minimessage/src/test/java/net/kyori/adventure/text/minimessage/tag/TagResolverTest.java b/text-minimessage/src/test/java/net/kyori/adventure/text/minimessage/tag/TagResolverTest.java index 18d042759..c3238b5a4 100644 --- a/text-minimessage/src/test/java/net/kyori/adventure/text/minimessage/tag/TagResolverTest.java +++ b/text-minimessage/src/test/java/net/kyori/adventure/text/minimessage/tag/TagResolverTest.java @@ -143,14 +143,12 @@ void testTagResolverEquality() { final TagResolver first = TagResolver.resolver( Placeholder.unparsed("single", "replace"), TagResolver.standard(), - TagResolver.caching((name) -> null), TagResolver.empty(), TagResolver.resolver("tag", Tag.selfClosingInserting(Component.empty())) ); final TagResolver second = TagResolver.resolver( Placeholder.unparsed("single", "replace"), TagResolver.standard(), - TagResolver.caching((name) -> null), TagResolver.empty(), TagResolver.resolver("tag", Tag.selfClosingInserting(Component.empty())) );