Flag.kt
package com.hexagontk.shell
import com.hexagontk.shell.Option.Companion.optionRegex
import kotlin.reflect.KClass
class Flag(
override val names: Set<String>,
override val description: String? = null,
override val multiple: Boolean = false,
override val tag: String? = null,
override val values: List<Boolean> = emptyList(),
) : Property<Boolean> {
override val optional: Boolean = true
override val regex: Regex? = null
override val type: KClass<Boolean> = Boolean::class
constructor(
shortName: Char? = null,
name: String? = null,
description: String? = null,
multiple: Boolean = false,
) : this(setOfNotNull(shortName?.toString(), name), description, multiple)
init {
check("Flag", optionRegex)
}
@Suppress("UNCHECKED_CAST") // Types checked at runtime
override fun addValues(value: Property<*>): Property<Boolean> =
Flag(names, description, multiple, tag, values + value.values as List<Boolean>)
override fun addValue(value: String): Flag =
Flag(names, description, multiple, tag, values + true)
override fun clearValues(): Flag =
Flag(names, description, multiple, tag, emptyList())
// TODO Only used in tests
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (javaClass != other?.javaClass) return false
other as Flag
if (names != other.names) return false
if (description != other.description) return false
if (multiple != other.multiple) return false
if (tag != other.tag) return false
if (values != other.values) return false
return true
}
// TODO Only used in tests
override fun hashCode(): Int {
var result = names.hashCode()
result = 31 * result + (description?.hashCode() ?: 0)
result = 31 * result + multiple.hashCode()
result = 31 * result + (tag?.hashCode() ?: 0)
result = 31 * result + values.hashCode()
return result
}
}