diff --git a/src/main/kotlin/app/revanced/patcher/patch/options/PatchOption.kt b/src/main/kotlin/app/revanced/patcher/patch/options/PatchOption.kt index ad0f6fe..518065b 100644 --- a/src/main/kotlin/app/revanced/patcher/patch/options/PatchOption.kt +++ b/src/main/kotlin/app/revanced/patcher/patch/options/PatchOption.kt @@ -80,6 +80,7 @@ open class PatchOption( if (!validator(value)) throw PatchOptionException.ValueValidationException(value, this) } + override fun toString() = value.toString() operator fun getValue( @@ -120,7 +121,7 @@ open class PatchOption( description: String? = null, required: Boolean = false, validator: PatchOption.(String?) -> Boolean = { true }, - ) = PatchOption( + ) = registerNewPatchOption( key, default, values, @@ -129,7 +130,7 @@ open class PatchOption( required, "String", validator, - ).also { registerOption(it) } + ) /** * Create a new [PatchOption] with an integer value and add it to the current [Patch]. @@ -154,7 +155,7 @@ open class PatchOption( description: String? = null, required: Boolean = false, validator: PatchOption.(Int?) -> Boolean = { true }, - ) = PatchOption( + ) = registerNewPatchOption( key, default, values, @@ -163,7 +164,7 @@ open class PatchOption( required, "Int", validator, - ).also { registerOption(it) } + ) /** * Create a new [PatchOption] with a boolean value and add it to the current [Patch]. @@ -188,9 +189,16 @@ open class PatchOption( description: String? = null, required: Boolean = false, validator: PatchOption.(Boolean?) -> Boolean = { true }, - ) = PatchOption(key, default, values, title, description, required, "Boolean", validator).also { - registerOption(it) - } + ) = registerNewPatchOption( + key, + default, + values, + title, + description, + required, + "Boolean", + validator, + ) /** * Create a new [PatchOption] with a float value and add it to the current [Patch]. @@ -215,7 +223,7 @@ open class PatchOption( description: String? = null, required: Boolean = false, validator: PatchOption.(Float?) -> Boolean = { true }, - ) = PatchOption( + ) = registerNewPatchOption( key, default, values, @@ -224,7 +232,7 @@ open class PatchOption( required, "Float", validator, - ).also { registerOption(it) } + ) /** * Create a new [PatchOption] with a long value and add it to the current [Patch]. @@ -249,7 +257,7 @@ open class PatchOption( description: String? = null, required: Boolean = false, validator: PatchOption.(Long?) -> Boolean = { true }, - ) = PatchOption( + ) = registerNewPatchOption( key, default, values, @@ -258,7 +266,7 @@ open class PatchOption( required, "Long", validator, - ).also { registerOption(it) } + ) /** * Create a new [PatchOption] with a string array value and add it to the current [Patch]. @@ -283,7 +291,7 @@ open class PatchOption( description: String? = null, required: Boolean = false, validator: PatchOption?>.(Array?) -> Boolean = { true }, - ) = PatchOption( + ) = registerNewPatchOption( key, default, values, @@ -292,7 +300,7 @@ open class PatchOption( required, "StringArray", validator, - ).also { registerOption(it) } + ) /** * Create a new [PatchOption] with an integer array value and add it to the current [Patch]. @@ -317,7 +325,7 @@ open class PatchOption( description: String? = null, required: Boolean = false, validator: PatchOption?>.(Array?) -> Boolean = { true }, - ) = PatchOption( + ) = registerNewPatchOption( key, default, values, @@ -326,7 +334,7 @@ open class PatchOption( required, "IntArray", validator, - ).also { registerOption(it) } + ) /** * Create a new [PatchOption] with a boolean array value and add it to the current [Patch]. @@ -351,7 +359,7 @@ open class PatchOption( description: String? = null, required: Boolean = false, validator: PatchOption?>.(Array?) -> Boolean = { true }, - ) = PatchOption( + ) = registerNewPatchOption( key, default, values, @@ -360,7 +368,7 @@ open class PatchOption( required, "BooleanArray", validator, - ).also { registerOption(it) } + ) /** * Create a new [PatchOption] with a float array value and add it to the current [Patch]. @@ -385,7 +393,7 @@ open class PatchOption( description: String? = null, required: Boolean = false, validator: PatchOption?>.(Array?) -> Boolean = { true }, - ) = PatchOption( + ) = registerNewPatchOption( key, default, values, @@ -394,7 +402,7 @@ open class PatchOption( required, "FloatArray", validator, - ).also { registerOption(it) } + ) /** * Create a new [PatchOption] with a long array value and add it to the current [Patch]. @@ -419,7 +427,7 @@ open class PatchOption( description: String? = null, required: Boolean = false, validator: PatchOption?>.(Array?) -> Boolean = { true }, - ) = PatchOption( + ) = registerNewPatchOption( key, default, values, @@ -428,8 +436,42 @@ open class PatchOption( required, "LongArray", validator, - ).also { registerOption(it) } + ) - private fun

> P.registerOption(option: PatchOption<*>) = option.also { options.register(it) } + /** + * Create a new [PatchOption] with a string set value and add it to the current [Patch]. + * + * @param key The identifier. + * @param default The default value. + * @param values The set of guaranteed valid values identified by their string representation. + * @param title The title. + * @param description A description. + * @param required Whether the option is required. + * @param valueType The type of the option value (to handle type erasure). + * @param validator The function to validate the option value. + * + * @return The created [PatchOption]. + * + * @see PatchOption + */ + private fun

, T> P.registerNewPatchOption( + key: String, + default: T? = null, + values: Map? = null, + title: String? = null, + description: String? = null, + required: Boolean = false, + valueType: String, + validator: PatchOption.(T?) -> Boolean = { true }, + ) = PatchOption( + key, + default, + values, + title, + description, + required, + valueType, + validator, + ).also(options::register) } }