🎨 Replace default option with Kotlin version
authorDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Tue, 7 Apr 2020 08:40:07 +0000 (10:40 +0200)
committerDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Tue, 7 Apr 2020 08:40:07 +0000 (10:40 +0200)
src/main/java/net/pterodactylus/sone/utils/DefaultOption.java [deleted file]
src/main/kotlin/net/pterodactylus/sone/utils/DefaultOption.kt [new file with mode: 0644]
src/test/kotlin/net/pterodactylus/sone/utils/DefaultOptionTest.kt

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 (file)
index b46c58e..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-package net.pterodactylus.sone.utils;
-
-import java.util.function.Predicate;
-
-/**
- * Basic implementation of an {@link Option}.
- *
- * @param <T>
- *            The type of the option
- */
-public class DefaultOption<T> implements Option<T> {
-
-       /** The default value. */
-       private final T defaultValue;
-
-       /** The current value. */
-       private volatile T value;
-
-       /** The validator. */
-       private Predicate<T> 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<T> 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 (file)
index 0000000..5f75e12
--- /dev/null
@@ -0,0 +1,30 @@
+package net.pterodactylus.sone.utils
+
+import java.util.function.Predicate
+
+/**
+ * Basic implementation of an [Option].
+ *
+ * @param <T> The type of the option
+ */
+class DefaultOption<T> @JvmOverloads constructor(
+               private val defaultValue: T,
+               private val validator: ((T) -> Boolean)? = null
+) : Option<T> {
+
+       @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
+       }
+
+}
index f7f4a49..e445b39 100644 (file)
@@ -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<Any?> { it == acceptedValue }
+       private val matchesAcceptedValue = { it: Any -> it == acceptedValue }
 
        @Test
        fun `default option returns default value when unset`() {