Make MultiFilePluginDataStorageImpl.logger lazy init

This commit is contained in:
Karlatemp 2022-08-31 22:39:31 +08:00
parent a94c98d990
commit af2b38d476
No known key found for this signature in database
GPG Key ID: BA173CA2B9956C59
2 changed files with 30 additions and 1 deletions

View File

@ -15,6 +15,7 @@ import net.mamoe.mirai.console.data.MultiFilePluginDataStorage
import net.mamoe.mirai.console.data.PluginData
import net.mamoe.mirai.console.data.PluginDataHolder
import net.mamoe.mirai.console.data.PluginDataStorage
import net.mamoe.mirai.console.internal.logging.lazyInitMiraiLogger
import net.mamoe.mirai.console.util.ConsoleExperimentalApi
import net.mamoe.mirai.message.MessageSerializers
import net.mamoe.mirai.utils.MiraiLogger
@ -26,7 +27,7 @@ import java.nio.file.Path
@Suppress("RedundantVisibilityModifier") // might be public in the future
internal open class MultiFilePluginDataStorageImpl(
public final override val directoryPath: Path,
private val logger: MiraiLogger = MiraiLogger.Factory.create(MultiFilePluginDataStorageImpl::class),
private val logger: MiraiLogger = lazyInitMiraiLogger { MiraiLogger.Factory.create(MultiFilePluginDataStorageImpl::class) },
) : PluginDataStorage, MultiFilePluginDataStorage {
init {
directoryPath.mkdir()

View File

@ -0,0 +1,28 @@
/*
* Copyright 2019-2022 Mamoe Technologies and contributors.
*
* 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
* Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
*
* https://github.com/mamoe/mirai/blob/dev/LICENSE
*/
package net.mamoe.mirai.console.internal.logging
import me.him188.kotlin.dynamic.delegation.dynamicDelegation
import net.mamoe.mirai.utils.MiraiLogger
internal fun lazyInitMiraiLogger(block: () -> MiraiLogger): MiraiLogger {
return LazyInitMiraiLogger(lazy(block))
}
internal fun lazyInitMiraiLogger(block: Lazy<MiraiLogger>): MiraiLogger {
return LazyInitMiraiLogger(block)
}
internal class LazyInitMiraiLogger(
private val theLazy: Lazy<MiraiLogger>,
) : MiraiLogger by (dynamicDelegation(LazyInitMiraiLogger::logger)) {
private inline val logger: MiraiLogger get() = theLazy.value
}