From b4db9ebdb03b975de9ad6e8b8863b4cd1ca2e8dd Mon Sep 17 00:00:00 2001 From: Constantin Piber <59023762+cpiber@users.noreply.github.com> Date: Sat, 25 Oct 2025 00:37:58 +0200 Subject: [PATCH] Settings generator: Validate that protoNumber is unique (#1735) This makes specifying an already-used number a compile time error --- .../tachidesk/server/settings/generation/SettingsGenerator.kt | 2 ++ .../suwayomi/tachidesk/server/settings/SettingsRegistry.kt | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/server/server-config-generate/src/main/kotlin/suwayomi/tachidesk/server/settings/generation/SettingsGenerator.kt b/server/server-config-generate/src/main/kotlin/suwayomi/tachidesk/server/settings/generation/SettingsGenerator.kt index b4b713a8..1cf75a23 100644 --- a/server/server-config-generate/src/main/kotlin/suwayomi/tachidesk/server/settings/generation/SettingsGenerator.kt +++ b/server/server-config-generate/src/main/kotlin/suwayomi/tachidesk/server/settings/generation/SettingsGenerator.kt @@ -45,6 +45,8 @@ object SettingsGenerator { // Ignore errors during registration } } + } catch (e: IllegalStateException) { + throw e } catch (e: Exception) { // Registration failed, but we tried } diff --git a/server/server-config/src/main/kotlin/suwayomi/tachidesk/server/settings/SettingsRegistry.kt b/server/server-config/src/main/kotlin/suwayomi/tachidesk/server/settings/SettingsRegistry.kt index eb5e43e6..f6b0bb46 100644 --- a/server/server-config/src/main/kotlin/suwayomi/tachidesk/server/settings/SettingsRegistry.kt +++ b/server/server-config/src/main/kotlin/suwayomi/tachidesk/server/settings/SettingsRegistry.kt @@ -2,6 +2,7 @@ package suwayomi.tachidesk.server.settings import com.typesafe.config.ConfigValue import com.typesafe.config.parser.ConfigDocument +import kotlin.collections.find import kotlin.reflect.KClass /** @@ -78,6 +79,9 @@ object SettingsRegistry { private val settings = mutableMapOf() fun register(metadata: SettingMetadata) { + settings.values.find { it.protoNumber == metadata.protoNumber }?.let { + throw IllegalStateException("Setting ${metadata.name} uses protoNumber ${it.protoNumber} already used by ${it.name}") + } settings[metadata.name] = metadata }