From d43211522e711b9ad8618ec2c130fec54072649d Mon Sep 17 00:00:00 2001 From: "jiahua.liu" <n@mamoe.net> Date: Fri, 14 Feb 2020 17:20:05 +0800 Subject: [PATCH] Thread safety --- .../net/mamoe/mirai/plugins/ConfigSection.kt | 40 +++++++++---------- 1 file changed, 18 insertions(+), 22 deletions(-) diff --git a/mirai-console/src/main/kotlin/net/mamoe/mirai/plugins/ConfigSection.kt b/mirai-console/src/main/kotlin/net/mamoe/mirai/plugins/ConfigSection.kt index 6304da337..41991dfb2 100644 --- a/mirai-console/src/main/kotlin/net/mamoe/mirai/plugins/ConfigSection.kt +++ b/mirai-console/src/main/kotlin/net/mamoe/mirai/plugins/ConfigSection.kt @@ -284,15 +284,8 @@ open class ConfigSectionImpl() : ConcurrentHashMap<String, Any>(), ConfigSection } } - -interface FileConfig : Config { - fun deserialize(content: String): ConfigSection - - fun serialize(config: ConfigSection): String -} - open class ConfigSectionDelegation( - val delegation: MutableMap<String, Any> + private val delegation: MutableMap<String, Any> ) : ConfigSection, MutableMap<String, Any> by delegation { override fun set(key: String, value: Any) { delegation.put(key, value) @@ -307,6 +300,14 @@ open class ConfigSectionDelegation( } } + +interface FileConfig : Config { + fun deserialize(content: String): ConfigSection + + fun serialize(config: ConfigSection): String +} + + abstract class FileConfigImpl internal constructor( private val file: File ) : FileConfig, ConfigSection { @@ -315,18 +316,10 @@ abstract class FileConfigImpl internal constructor( deserialize(file.readText()) } - override val size: Int - get() = content.size - - override val entries: MutableSet<MutableMap.MutableEntry<String, Any>> - get() = content.entries - - override val keys: MutableSet<String> - get() = content.keys - - override val values: MutableCollection<Any> - get() = content.values - + override val size: Int get() = content.size + override val entries: MutableSet<MutableMap.MutableEntry<String, Any>> get() = content.entries + override val keys: MutableSet<String> get() = content.keys + override val values: MutableCollection<Any> get() = content.values override fun containsKey(key: String): Boolean = content.containsKey(key) override fun containsValue(value: Any): Boolean = content.containsValue(value) override fun put(key: String, value: Any): Any? = content.put(key, value) @@ -335,7 +328,6 @@ abstract class FileConfigImpl internal constructor( override fun clear() = content.clear() override fun remove(key: String): Any? = content.remove(key) - override fun save() { if (!file.exists()) { file.createNewFile() @@ -401,7 +393,11 @@ class TomlConfig internal constructor(file: File) : FileConfigImpl(file) { if (content.isEmpty() || content.isBlank()) { return ConfigSectionImpl() } - return ConfigSectionDelegation(Toml().read(content).toMap()) + return ConfigSectionDelegation( + Collections.synchronizedMap( + Toml().read(content).toMap() + ) + ) } override fun serialize(config: ConfigSection): String {