diff --git a/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/data/AbstractPluginData.kt b/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/data/AbstractPluginData.kt index 882e6bb02..ce55fae6c 100644 --- a/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/data/AbstractPluginData.kt +++ b/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/data/AbstractPluginData.kt @@ -14,6 +14,9 @@ package net.mamoe.mirai.console.data import kotlinx.serialization.KSerializer import net.mamoe.mirai.console.data.PluginData.ValueNode import net.mamoe.mirai.console.internal.data.PluginDataImpl +import net.mamoe.mirai.console.internal.data.getAnnotationListForValueSerialization +import net.mamoe.mirai.console.internal.data.valueName +import kotlin.reflect.KProperty /** * [PluginData] 的默认实现. 支持使用 `by value()` 等委托方法创建 [Value] 并跟踪其改动. @@ -36,6 +39,14 @@ public abstract class AbstractPluginData : PluginData, PluginDataImpl() { public override fun > T.track(valueName: String, annotations: List): T = apply { valueNodes.add(ValueNode(valueName, this, annotations, this.serializer)) } + /** + * 使用 `by value()` 时自动调用此方法, 添加对 [Value] 的值修改的跟踪, 并创建 [ValueNode] 加入 [valueNodes] + */ + public operator fun > T.provideDelegate( + thisRef: Any?, + property: KProperty<*>, + ): T = track(property.valueName, property.getAnnotationListForValueSerialization()) + /** * 所有 [valueNodes] 更新和保存序列化器. 仅供内部使用 */ @@ -45,5 +56,14 @@ public abstract class AbstractPluginData : PluginData, PluginDataImpl() { /** * 当所属于这个 [PluginData] 的 [Value] 的 [值][Value.value] 被修改时被调用. */ - public abstract override fun onValueChanged(value: Value<*>) + public override fun onValueChanged(value: Value<*>) { + // no-op by default + } + + /** + * 当这个 [PluginData] 被放入一个 [PluginDataStorage] 时调用 + */ + public override fun onInit(owner: PluginDataHolder, storage: PluginDataStorage) { + // no-op by default + } } \ No newline at end of file diff --git a/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/data/PluginData.kt b/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/data/PluginData.kt index 4e67fdad3..28f27c62c 100644 --- a/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/data/PluginData.kt +++ b/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/data/PluginData.kt @@ -155,14 +155,6 @@ public interface PluginData { val updaterSerializer: KSerializer ) - /** - * 使用 `by value()` 时自动调用此方法, 添加对 [Value] 的值修改的跟踪, 并创建 [ValueNode] 加入 [valueNodes] - */ - public operator fun > T.provideDelegate( - thisRef: Any?, - property: KProperty<*> - ): T = track(property.valueName, property.getAnnotationListForValueSerialization()) - /** * 供手动实现时值跟踪使用 (如 Java 用户). 一般 Kotlin 用户需使用 [provideDelegate] */