diff --git a/utbot-framework-api/src/main/kotlin/org/utbot/framework/UtSettings.kt b/utbot-framework-api/src/main/kotlin/org/utbot/framework/UtSettings.kt index 889280358f..7c45335439 100644 --- a/utbot-framework-api/src/main/kotlin/org/utbot/framework/UtSettings.kt +++ b/utbot-framework-api/src/main/kotlin/org/utbot/framework/UtSettings.kt @@ -21,13 +21,27 @@ internal val utbotHomePath = "${System.getProperty("user.home")}/.utbot" private val defaultSettingsPath = "$utbotHomePath/settings.properties" private const val defaultKeyForSettingsPath = "utbot.settings.path" -internal class SettingDelegate(val initializer: () -> T) { +/** + * Stores current values for each setting from [UtSettings]. + */ +private val settingsValues: MutableMap, Any?> = mutableMapOf() + +internal class SettingDelegate(val property: KProperty<*>, val initializer: () -> T) { private var value = initializer() + init { + updateSettingValue() + } + operator fun getValue(thisRef: Any?, property: KProperty<*>): T = value operator fun setValue(thisRef: Any?, property: KProperty<*>, value: T) { this.value = value + updateSettingValue() + } + + private fun updateSettingValue() { + settingsValues[property] = value } } @@ -55,15 +69,13 @@ object UtSettings { defaultValue: T, converter: (String) -> T ): PropertyDelegateProvider> { - return PropertyDelegateProvider { _, prop -> - SettingDelegate { + return PropertyDelegateProvider { _, property -> + SettingDelegate(property) { try { - properties.getProperty(prop.name)?.let(converter) ?: defaultValue + properties.getProperty(property.name)?.let(converter) ?: defaultValue } catch (e: Throwable) { logger.info(e) { e.message } defaultValue - } finally { - properties.putIfAbsent(prop.name, defaultValue.toString()) } } } @@ -76,7 +88,6 @@ object UtSettings { private inline fun > getEnumProperty(defaultValue: T) = getProperty(defaultValue) { enumValueOf(it) } - /** * Setting to disable coroutines debug explicitly. * @@ -381,9 +392,10 @@ object UtSettings { var skipTestGenerationForSyntheticMethods by getBooleanProperty(true) override fun toString(): String = - properties + settingsValues + .mapKeys { it.key.name } .entries - .sortedBy { it.key.toString() } + .sortedBy { it.key } .joinToString(separator = System.lineSeparator()) { "\t${it.key}=${it.value}" } }