From 6c14e56e1f3581ac3a800bc574b5a00fdff3edc7 Mon Sep 17 00:00:00 2001 From: Andrew Steinborn Date: Sun, 31 Oct 2021 16:11:17 -0400 Subject: [PATCH 1/5] api: add TextDecoration#withState Fixes #431 --- .../adventure/text/format/TextDecoration.java | 26 +++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/api/src/main/java/net/kyori/adventure/text/format/TextDecoration.java b/api/src/main/java/net/kyori/adventure/text/format/TextDecoration.java index e5a7b830b..d9adad7a2 100644 --- a/api/src/main/java/net/kyori/adventure/text/format/TextDecoration.java +++ b/api/src/main/java/net/kyori/adventure/text/format/TextDecoration.java @@ -81,7 +81,7 @@ public enum TextDecoration implements StyleBuilderApplicable, TextFormat { } /** - * Creates a {@link TextDecorationAndState}. + * Creates a {@link TextDecorationAndState}, annotating this decoration with the given {@code state}. * * @param state the state * @return a {@link TextDecorationAndState} @@ -92,7 +92,7 @@ public enum TextDecoration implements StyleBuilderApplicable, TextFormat { } /** - * Creates a {@link TextDecorationAndState}. + * Creates a {@link TextDecorationAndState}, annotating this decoration with the given {@code state}. * * @param state the state * @return a {@link TextDecorationAndState} @@ -102,6 +102,28 @@ public enum TextDecoration implements StyleBuilderApplicable, TextFormat { return new TextDecorationAndStateImpl(this, state); } + /** + * An alias for {@link #as(boolean)}. + * + * @param state the state + * @return a {@link TextDecorationAndState} + * @since 4.8.0 + */ + public final @NotNull TextDecorationAndState withState(final boolean state) { + return this.as(State.byBoolean(state)); + } + + /** + * An alias for {@link #as(State)}. + * + * @param state the state + * @return a {@link TextDecorationAndState} + * @since 4.8.0 + */ + public final @NotNull TextDecorationAndState withState(final @NotNull State state) { + return this.as(state); + } + @Override public void styleApply(final Style.@NotNull Builder style) { style.decorate(this); From 16875d700dd41aa50a2315912c4d09e566ff9ef7 Mon Sep 17 00:00:00 2001 From: Andrew Steinborn Date: Sun, 31 Oct 2021 16:12:50 -0400 Subject: [PATCH 2/5] api: add missing null check TextDecoration#withState states --- .../adventure/text/format/TextDecorationAndStateImpl.java | 6 +++++- .../net/kyori/adventure/text/format/TextDecorationTest.java | 6 ++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/api/src/main/java/net/kyori/adventure/text/format/TextDecorationAndStateImpl.java b/api/src/main/java/net/kyori/adventure/text/format/TextDecorationAndStateImpl.java index 6a6c1662a..3318c8e75 100644 --- a/api/src/main/java/net/kyori/adventure/text/format/TextDecorationAndStateImpl.java +++ b/api/src/main/java/net/kyori/adventure/text/format/TextDecorationAndStateImpl.java @@ -27,13 +27,17 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import static java.util.Objects.requireNonNull; + final class TextDecorationAndStateImpl implements TextDecorationAndState { private final TextDecoration decoration; private final TextDecoration.State state; TextDecorationAndStateImpl(final TextDecoration decoration, final TextDecoration.State state) { + // no null check is required on the decoration since this constructor is always invoked in such a way that + // decoration is always non-null this.decoration = decoration; - this.state = state; + this.state = requireNonNull(state, "state"); } @Override diff --git a/api/src/test/java/net/kyori/adventure/text/format/TextDecorationTest.java b/api/src/test/java/net/kyori/adventure/text/format/TextDecorationTest.java index 3eabdb3d4..40ce292f0 100644 --- a/api/src/test/java/net/kyori/adventure/text/format/TextDecorationTest.java +++ b/api/src/test/java/net/kyori/adventure/text/format/TextDecorationTest.java @@ -38,6 +38,12 @@ void testByBoolean() { assertEquals(TextDecoration.State.FALSE, TextDecoration.State.byBoolean(false)); assertEquals(TextDecoration.State.TRUE, TextDecoration.State.byBoolean(true)); } + + @Test + void withStateOrAsThrowsOnNull() { + assertThrows(NullPointerException.class, () -> TextDecoration.BOLD.as(null)); + assertThrows(NullPointerException.class, () -> TextDecoration.BOLD.withState(null)); + } @Test void testByTristate() { From 505a4b67c04ac2d34e9bf601cb91fabfc4203773 Mon Sep 17 00:00:00 2001 From: Andrew Steinborn Date: Sun, 31 Oct 2021 16:19:46 -0400 Subject: [PATCH 3/5] api: fix since Javadoc tag --- .../java/net/kyori/adventure/text/format/TextDecoration.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/api/src/main/java/net/kyori/adventure/text/format/TextDecoration.java b/api/src/main/java/net/kyori/adventure/text/format/TextDecoration.java index d9adad7a2..778a3535d 100644 --- a/api/src/main/java/net/kyori/adventure/text/format/TextDecoration.java +++ b/api/src/main/java/net/kyori/adventure/text/format/TextDecoration.java @@ -107,7 +107,7 @@ public enum TextDecoration implements StyleBuilderApplicable, TextFormat { * * @param state the state * @return a {@link TextDecorationAndState} - * @since 4.8.0 + * @since 4.10.0 */ public final @NotNull TextDecorationAndState withState(final boolean state) { return this.as(State.byBoolean(state)); @@ -118,7 +118,7 @@ public enum TextDecoration implements StyleBuilderApplicable, TextFormat { * * @param state the state * @return a {@link TextDecorationAndState} - * @since 4.8.0 + * @since 4.10.0 */ public final @NotNull TextDecorationAndState withState(final @NotNull State state) { return this.as(state); From fe8203b4483693418af311d3d1a30cabfc9c631d Mon Sep 17 00:00:00 2001 From: zml Date: Sat, 11 Dec 2021 12:00:14 -0800 Subject: [PATCH 4/5] api: Favor withState over as --- .../adventure/text/format/TextDecoration.java | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/api/src/main/java/net/kyori/adventure/text/format/TextDecoration.java b/api/src/main/java/net/kyori/adventure/text/format/TextDecoration.java index 778a3535d..3a6db1b80 100644 --- a/api/src/main/java/net/kyori/adventure/text/format/TextDecoration.java +++ b/api/src/main/java/net/kyori/adventure/text/format/TextDecoration.java @@ -86,9 +86,11 @@ public enum TextDecoration implements StyleBuilderApplicable, TextFormat { * @param state the state * @return a {@link TextDecorationAndState} * @since 4.8.0 + * @deprecated for removal since 4.10.0, use {@link #withState(boolean)} instead */ + @Deprecated public final @NotNull TextDecorationAndState as(final boolean state) { - return this.as(State.byBoolean(state)); + return this.withState(state); } /** @@ -97,9 +99,11 @@ public enum TextDecoration implements StyleBuilderApplicable, TextFormat { * @param state the state * @return a {@link TextDecorationAndState} * @since 4.8.0 + * @deprecated for removal since 4.10.0, use {@link #withState(State)} instead */ + @Deprecated public final @NotNull TextDecorationAndState as(final @NotNull State state) { - return new TextDecorationAndStateImpl(this, state); + return this.withState(state); } /** @@ -110,7 +114,7 @@ public enum TextDecoration implements StyleBuilderApplicable, TextFormat { * @since 4.10.0 */ public final @NotNull TextDecorationAndState withState(final boolean state) { - return this.as(State.byBoolean(state)); + return new TextDecorationAndStateImpl(this, State.byBoolean(state)); } /** @@ -121,7 +125,18 @@ public enum TextDecoration implements StyleBuilderApplicable, TextFormat { * @since 4.10.0 */ public final @NotNull TextDecorationAndState withState(final @NotNull State state) { - return this.as(state); + return new TextDecorationAndStateImpl(this, state); + } + + /** + * An alias for {@link #as(State)}. + * + * @param state the state + * @return a {@link TextDecorationAndState} + * @since 4.10.0 + */ + public final @NotNull TextDecorationAndState withState(final @NotNull TriState state) { + return new TextDecorationAndStateImpl(this, State.byTriState(state)); } @Override From a76547a8e2b87a5909237db22bf26f4189af242a Mon Sep 17 00:00:00 2001 From: zml Date: Sat, 11 Dec 2021 12:12:20 -0800 Subject: [PATCH 5/5] api: fix tests --- .../kyori/adventure/text/format/StyleTest.java | 16 ++++++++-------- .../text/format/TextDecorationTest.java | 8 ++++---- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/api/src/test/java/net/kyori/adventure/text/format/StyleTest.java b/api/src/test/java/net/kyori/adventure/text/format/StyleTest.java index e42fe3caa..d3f3ae695 100644 --- a/api/src/test/java/net/kyori/adventure/text/format/StyleTest.java +++ b/api/src/test/java/net/kyori/adventure/text/format/StyleTest.java @@ -90,13 +90,13 @@ void testOfApplicables() { @Test void testOfTextDecorationAndState() { final Style s0 = Style.style( - TextDecoration.BOLD.as(TextDecoration.State.TRUE), - TextDecoration.ITALIC.as(TextDecoration.State.FALSE) + TextDecoration.BOLD.withState(TextDecoration.State.TRUE), + TextDecoration.ITALIC.withState(TextDecoration.State.FALSE) ); assertDecorations(s0, ImmutableSet.of(TextDecoration.BOLD), ImmutableSet.of(TextDecoration.ITALIC)); final Style s1 = Style.style( - TextDecoration.BOLD.as(true), - TextDecoration.ITALIC.as(false) + TextDecoration.BOLD.withState(true), + TextDecoration.ITALIC.withState(false) ); assertDecorations(s1, ImmutableSet.of(TextDecoration.BOLD), ImmutableSet.of(TextDecoration.ITALIC)); } @@ -104,13 +104,13 @@ void testOfTextDecorationAndState() { @Test void testOfTextDecorationAndStateOverridesWhenSame() { final Style s0 = Style.style( - TextDecoration.BOLD.as(TextDecoration.State.TRUE), - TextDecoration.BOLD.as(TextDecoration.State.FALSE) + TextDecoration.BOLD.withState(TextDecoration.State.TRUE), + TextDecoration.BOLD.withState(TextDecoration.State.FALSE) ); assertDecorations(s0, ImmutableSet.of(), ImmutableSet.of(TextDecoration.BOLD)); final Style s1 = Style.style( - TextDecoration.BOLD.as(true), - TextDecoration.BOLD.as(false) + TextDecoration.BOLD.withState(true), + TextDecoration.BOLD.withState(false) ); assertDecorations(s1, ImmutableSet.of(), ImmutableSet.of(TextDecoration.BOLD)); } diff --git a/api/src/test/java/net/kyori/adventure/text/format/TextDecorationTest.java b/api/src/test/java/net/kyori/adventure/text/format/TextDecorationTest.java index 40ce292f0..8b6f7055a 100644 --- a/api/src/test/java/net/kyori/adventure/text/format/TextDecorationTest.java +++ b/api/src/test/java/net/kyori/adventure/text/format/TextDecorationTest.java @@ -38,11 +38,11 @@ void testByBoolean() { assertEquals(TextDecoration.State.FALSE, TextDecoration.State.byBoolean(false)); assertEquals(TextDecoration.State.TRUE, TextDecoration.State.byBoolean(true)); } - + @Test - void withStateOrAsThrowsOnNull() { - assertThrows(NullPointerException.class, () -> TextDecoration.BOLD.as(null)); - assertThrows(NullPointerException.class, () -> TextDecoration.BOLD.withState(null)); + void testWithStateThrowsOnNull() { + assertThrows(NullPointerException.class, () -> TextDecoration.BOLD.withState((TextDecoration.State) null)); + assertThrows(NullPointerException.class, () -> TextDecoration.BOLD.withState((TriState) null)); } @Test