diff options
author | isXander <xander@isxander.dev> | 2023-08-18 11:43:52 +0100 |
---|---|---|
committer | isXander <xander@isxander.dev> | 2023-08-18 11:43:52 +0100 |
commit | d7a9d31706a30c8b66dcd0587f6c82cf7c6118c9 (patch) | |
tree | 3464ddc568505ecd3095523bb7c8d2e70de00127 | |
parent | 39bc5b5d8b8e6d4369ea71a7787907521e11ad34 (diff) | |
download | YetAnotherConfigLib-d7a9d31706a30c8b66dcd0587f6c82cf7c6118c9.tar.gz YetAnotherConfigLib-d7a9d31706a30c8b66dcd0587f6c82cf7c6118c9.tar.bz2 YetAnotherConfigLib-d7a9d31706a30c8b66dcd0587f6c82cf7c6118c9.zip |
Enforce NotNull on bindings
8 files changed, 42 insertions, 9 deletions
diff --git a/common/src/main/java/dev/isxander/yacl3/api/Option.java b/common/src/main/java/dev/isxander/yacl3/api/Option.java index 31b7756..38bd8ca 100644 --- a/common/src/main/java/dev/isxander/yacl3/api/Option.java +++ b/common/src/main/java/dev/isxander/yacl3/api/Option.java @@ -72,7 +72,7 @@ public interface Option<T> { /** * Sets the pending value */ - void requestSet(T value); + void requestSet(@NotNull T value); /** * Applies the pending value to the bound value. diff --git a/common/src/main/java/dev/isxander/yacl3/impl/ButtonOptionImpl.java b/common/src/main/java/dev/isxander/yacl3/impl/ButtonOptionImpl.java index 7451f7c..170b8e0 100644 --- a/common/src/main/java/dev/isxander/yacl3/impl/ButtonOptionImpl.java +++ b/common/src/main/java/dev/isxander/yacl3/impl/ButtonOptionImpl.java @@ -93,7 +93,7 @@ public final class ButtonOptionImpl implements ButtonOption { } @Override - public void requestSet(BiConsumer<YACLScreen, ButtonOption> value) { + public void requestSet(@NotNull BiConsumer<YACLScreen, ButtonOption> value) { throw new UnsupportedOperationException(); } diff --git a/common/src/main/java/dev/isxander/yacl3/impl/HiddenNameListOptionEntry.java b/common/src/main/java/dev/isxander/yacl3/impl/HiddenNameListOptionEntry.java index 6ff2669..64588f2 100644 --- a/common/src/main/java/dev/isxander/yacl3/impl/HiddenNameListOptionEntry.java +++ b/common/src/main/java/dev/isxander/yacl3/impl/HiddenNameListOptionEntry.java @@ -71,7 +71,7 @@ public class HiddenNameListOptionEntry<T> implements ListOptionEntry<T> { } @Override - public void requestSet(T value) { + public void requestSet(@NotNull T value) { option.requestSet(value); } diff --git a/common/src/main/java/dev/isxander/yacl3/impl/LabelOptionImpl.java b/common/src/main/java/dev/isxander/yacl3/impl/LabelOptionImpl.java index c8287bd..2bd2e10 100644 --- a/common/src/main/java/dev/isxander/yacl3/impl/LabelOptionImpl.java +++ b/common/src/main/java/dev/isxander/yacl3/impl/LabelOptionImpl.java @@ -25,6 +25,8 @@ public final class LabelOptionImpl implements LabelOption { private final Binding<Component> binding; public LabelOptionImpl(Component label) { + Validate.notNull(label, "`label` must not be null"); + this.label = label; this.labelController = new LabelController(this); this.binding = Binding.immutable(label); @@ -89,7 +91,7 @@ public final class LabelOptionImpl implements LabelOption { } @Override - public void requestSet(Component value) { + public void requestSet(@NotNull Component value) { } diff --git a/common/src/main/java/dev/isxander/yacl3/impl/ListOptionEntryImpl.java b/common/src/main/java/dev/isxander/yacl3/impl/ListOptionEntryImpl.java index 72254cf..1cd5e55 100644 --- a/common/src/main/java/dev/isxander/yacl3/impl/ListOptionEntryImpl.java +++ b/common/src/main/java/dev/isxander/yacl3/impl/ListOptionEntryImpl.java @@ -79,7 +79,7 @@ public final class ListOptionEntryImpl<T> implements ListOptionEntry<T> { } @Override - public void requestSet(T value) { + public void requestSet(@NotNull T value) { binding.setValue(value); } diff --git a/common/src/main/java/dev/isxander/yacl3/impl/ListOptionImpl.java b/common/src/main/java/dev/isxander/yacl3/impl/ListOptionImpl.java index f45e368..c77d55f 100644 --- a/common/src/main/java/dev/isxander/yacl3/impl/ListOptionImpl.java +++ b/common/src/main/java/dev/isxander/yacl3/impl/ListOptionImpl.java @@ -39,7 +39,7 @@ public final class ListOptionImpl<T> implements ListOption<T> { public ListOptionImpl(@NotNull Component name, @NotNull OptionDescription description, @NotNull Binding<List<T>> binding, @NotNull Supplier<T> initialValue, @NotNull Function<ListOptionEntry<T>, Controller<T>> controllerFunction, ImmutableSet<OptionFlag> flags, boolean collapsed, boolean available, int minimumNumberOfEntries, int maximumNumberOfEntries, boolean insertEntriesAtEnd, Collection<BiConsumer<Option<List<T>>, List<T>>> listeners) { this.name = name; this.description = description; - this.binding = binding; + this.binding = new SafeBinding<>(binding); this.initialValue = initialValue; this.entryFactory = new EntryFactory(controllerFunction); this.entries = createEntries(binding().getValue()); @@ -131,7 +131,7 @@ public final class ListOptionImpl<T> implements ListOption<T> { } @Override - public void requestSet(List<T> value) { + public void requestSet(@NotNull List<T> value) { entries.clear(); entries.addAll(createEntries(value)); onRefresh(); diff --git a/common/src/main/java/dev/isxander/yacl3/impl/OptionImpl.java b/common/src/main/java/dev/isxander/yacl3/impl/OptionImpl.java index 165f38d..37a626b 100644 --- a/common/src/main/java/dev/isxander/yacl3/impl/OptionImpl.java +++ b/common/src/main/java/dev/isxander/yacl3/impl/OptionImpl.java @@ -41,7 +41,7 @@ public final class OptionImpl<T> implements Option<T> { @NotNull Collection<BiConsumer<Option<T>, T>> listeners ) { this.name = name; - this.binding = binding; + this.binding = new SafeBinding<>(binding); this.available = available; this.flags = flags; this.listeners = new ArrayList<>(listeners); @@ -108,7 +108,9 @@ public final class OptionImpl<T> implements Option<T> { } @Override - public void requestSet(T value) { + public void requestSet(@NotNull T value) { + Validate.notNull(value, "`value` cannot be null"); + pendingValue = value; this.triggerListeners(true); } diff --git a/common/src/main/java/dev/isxander/yacl3/impl/SafeBinding.java b/common/src/main/java/dev/isxander/yacl3/impl/SafeBinding.java new file mode 100644 index 0000000..c55d2be --- /dev/null +++ b/common/src/main/java/dev/isxander/yacl3/impl/SafeBinding.java @@ -0,0 +1,29 @@ +package dev.isxander.yacl3.impl; + +import dev.isxander.yacl3.api.Binding; +import org.jetbrains.annotations.NotNull; + +import java.util.Objects; + +public class SafeBinding<T> implements Binding<T> { + private final Binding<T> binding; + + public SafeBinding(Binding<T> binding) { + this.binding = binding; + } + + @Override + public @NotNull T getValue() { + return Objects.requireNonNull(binding.getValue()); + } + + @Override + public void setValue(@NotNull T value) { + binding.setValue(Objects.requireNonNull(value)); + } + + @Override + public @NotNull T defaultValue() { + return Objects.requireNonNull(binding.defaultValue()); + } +} |