diff --git a/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/config/EcoConfig.kt b/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/config/EcoConfig.kt index 52032965..1ec4de74 100644 --- a/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/config/EcoConfig.kt +++ b/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/config/EcoConfig.kt @@ -16,11 +16,16 @@ open class EcoConfig( private val values = ConcurrentHashMap() @Transient - var injections = ConcurrentHashMap() + private val injections = mutableMapOf() - fun init(values: Map) { + @Transient + private var injectionHash = 0 + + fun init(values: Map, injections: Map) { this.values.clear() this.values.putAll(values.normalizeToConfig(this.type)) + + this.addInjectablePlaceholder(injections.values) } override fun toPlaintext(): String { @@ -179,6 +184,7 @@ open class EcoConfig( override fun addInjectablePlaceholder(placeholders: Iterable) { for (placeholder in placeholders) { injections[placeholder.pattern.pattern()] = placeholder + injectionHash = injectionHash xor placeholder.hashCode() } } @@ -239,18 +245,6 @@ open class EcoConfig( } override fun hashCode(): Int { - /* - The keys are completely redundant, as they are only used to prevent - duplicate keys in the map. Therefore, we can ignore them and just - hash the actual placeholder values. - */ - - var injectionHash = 0 - - injections.forEachValue(5) { - injectionHash = injectionHash xor (it.hashCode() shl 5) - } - // hashCode() has to compute extremely quickly, so we're using bitwise, because why not? // Fucking filthy to use identityHashCode here, but it should be extremely fast val identityHash = System.identityHashCode(this) diff --git a/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/config/EcoConfigSection.kt b/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/config/EcoConfigSection.kt index e0b4c76f..f6c24e19 100644 --- a/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/config/EcoConfigSection.kt +++ b/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/config/EcoConfigSection.kt @@ -10,7 +10,6 @@ class EcoConfigSection( injections: Map = emptyMap() ) : EcoConfig(type) { init { - this.init(values) - this.injections = ConcurrentHashMap(injections) + this.init(values, injections) } } diff --git a/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/config/EcoLoadableConfig.kt b/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/config/EcoLoadableConfig.kt index 9809e7ae..eabe3e61 100644 --- a/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/config/EcoLoadableConfig.kt +++ b/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/config/EcoLoadableConfig.kt @@ -91,7 +91,7 @@ open class EcoLoadableConfig( protected fun init(reader: Reader) { val string = reader.readToString() makeHeader(string) - super.init(type.toMap(string)) + super.init(type.toMap(string), emptyMap()) } fun init(file: File) { diff --git a/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/config/EcoUpdatableConfig.kt b/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/config/EcoUpdatableConfig.kt index 463632a5..d31c4573 100644 --- a/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/config/EcoUpdatableConfig.kt +++ b/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/config/EcoUpdatableConfig.kt @@ -50,7 +50,7 @@ open class EcoUpdatableConfig( val reader = BufferedReader(InputStreamReader(newIn, StandardCharsets.UTF_8)) val config = EcoConfigSection(type, emptyMap()) - config.init(type.toMap(reader.readToString())) + config.init(type.toMap(reader.readToString()), emptyMap()) return config }