From: David ‘Bombe’ Roden Date: Tue, 7 Apr 2020 08:40:07 +0000 (+0200) Subject: 🎨 Replace default option with Kotlin version X-Git-Tag: v82^2~31 X-Git-Url: https://git.pterodactylus.net/?p=Sone.git;a=commitdiff_plain;h=80deddc6b581421556370b31aec51d1ae902fa14 🎨 Replace default option with Kotlin version --- diff --git a/src/main/java/net/pterodactylus/sone/utils/DefaultOption.java b/src/main/java/net/pterodactylus/sone/utils/DefaultOption.java deleted file mode 100644 index b46c58e..0000000 --- a/src/main/java/net/pterodactylus/sone/utils/DefaultOption.java +++ /dev/null @@ -1,83 +0,0 @@ -package net.pterodactylus.sone.utils; - -import java.util.function.Predicate; - -/** - * Basic implementation of an {@link Option}. - * - * @param - * The type of the option - */ -public class DefaultOption implements Option { - - /** The default value. */ - private final T defaultValue; - - /** The current value. */ - private volatile T value; - - /** The validator. */ - private Predicate validator; - - /** - * Creates a new default option. - * - * @param defaultValue - * The default value of the option - */ - public DefaultOption(T defaultValue) { - this(defaultValue, null); - } - - /** - * Creates a new default option. - * - * @param defaultValue - * The default value of the option - * @param validator - * The validator for value validation (may be {@code null}) - */ - public DefaultOption(T defaultValue, Predicate validator) { - this.defaultValue = defaultValue; - this.validator = validator; - } - - /** - * {@inheritDoc} - */ - @Override - public T get() { - return (value != null) ? value : defaultValue; - } - - /** - * Returns the real value of the option. This will also return an unset - * value (usually {@code null})! - * - * @return The real value of the option - */ - @Override - public T getReal() { - return value; - } - - /** - * {@inheritDoc} - */ - @Override - public boolean validate(T value) { - return (validator == null) || (value == null) || validator.test(value); - } - - /** - * {@inheritDoc} - */ - @Override - public void set(T value) { - if ((value != null) && (validator != null) && (!validator.test(value))) { - throw new IllegalArgumentException("New Value (" + value + ") could not be validated."); - } - this.value = value; - } - -} diff --git a/src/main/kotlin/net/pterodactylus/sone/utils/DefaultOption.kt b/src/main/kotlin/net/pterodactylus/sone/utils/DefaultOption.kt new file mode 100644 index 0000000..5f75e12 --- /dev/null +++ b/src/main/kotlin/net/pterodactylus/sone/utils/DefaultOption.kt @@ -0,0 +1,30 @@ +package net.pterodactylus.sone.utils + +import java.util.function.Predicate + +/** + * Basic implementation of an [Option]. + * + * @param The type of the option + */ +class DefaultOption @JvmOverloads constructor( + private val defaultValue: T, + private val validator: ((T) -> Boolean)? = null +) : Option { + + @Volatile + private var value: T? = null + + override fun get() = value ?: defaultValue + + override fun getReal(): T? = value + + override fun validate(value: T?): Boolean = + value == null || validator?.invoke(value) ?: true + + override fun set(value: T?) { + require(validate(value)) { "New Value ($value) could not be validated." } + this.value = value + } + +} diff --git a/src/test/kotlin/net/pterodactylus/sone/utils/DefaultOptionTest.kt b/src/test/kotlin/net/pterodactylus/sone/utils/DefaultOptionTest.kt index f7f4a49..e445b39 100644 --- a/src/test/kotlin/net/pterodactylus/sone/utils/DefaultOptionTest.kt +++ b/src/test/kotlin/net/pterodactylus/sone/utils/DefaultOptionTest.kt @@ -1,6 +1,5 @@ package net.pterodactylus.sone.utils -import com.google.common.base.Predicate import org.hamcrest.MatcherAssert.assertThat import org.hamcrest.Matchers.equalTo import org.hamcrest.Matchers.nullValue @@ -14,7 +13,7 @@ class DefaultOptionTest { private val defaultValue = Any() private val acceptedValue = Any() - private val matchesAcceptedValue = Predicate { it == acceptedValue } + private val matchesAcceptedValue = { it: Any -> it == acceptedValue } @Test fun `default option returns default value when unset`() {