diff --git a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/MessageChain.kt b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/MessageChain.kt index 5bf5c490d..e460ad1d0 100644 --- a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/MessageChain.kt +++ b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/MessageChain.kt @@ -17,10 +17,7 @@ import net.mamoe.mirai.JavaFriendlyAPI import net.mamoe.mirai.message.MessageEvent import net.mamoe.mirai.utils.PlannedRemoval import kotlin.js.JsName -import kotlin.jvm.JvmMultifileClass -import kotlin.jvm.JvmName -import kotlin.jvm.JvmOverloads -import kotlin.jvm.JvmSynthetic +import kotlin.jvm.* import kotlin.reflect.KProperty /** @@ -222,7 +219,8 @@ inline operator fun MessageChain.getValue(thisRef: Any?, p * 可空的委托 * @see orNull */ -inline class OrNullDelegate(private val value: Any?) { +@Suppress("NON_PUBLIC_PRIMARY_CONSTRUCTOR_OF_INLINE_CLASS") +inline class OrNullDelegate @PublishedApi internal constructor(@JvmField @PublishedApi internal val value: Any?) { @Suppress("UNCHECKED_CAST") operator fun getValue(thisRef: Any?, property: KProperty<*>): R = value as R } @@ -257,10 +255,9 @@ inline fun MessageChain.orNull(): OrNullDelegate = */ @Suppress("RemoveExplicitTypeArguments") @JvmSynthetic -inline fun MessageChain.orElse( - lazyDefault: () -> T -): OrNullDelegate = - OrNullDelegate(this.firstIsInstanceOrNull() ?: lazyDefault()) +inline fun MessageChain.orElse( + lazyDefault: () -> R +): OrNullDelegate = OrNullDelegate(this.firstIsInstanceOrNull() ?: lazyDefault()) // endregion delegate diff --git a/mirai-core/src/commonTest/kotlin/net/mamoe/mirai/message.data/TestMessageChainDelegate.kt b/mirai-core/src/commonTest/kotlin/net/mamoe/mirai/message.data/TestMessageChainDelegate.kt new file mode 100644 index 000000000..26a53c23d --- /dev/null +++ b/mirai-core/src/commonTest/kotlin/net/mamoe/mirai/message.data/TestMessageChainDelegate.kt @@ -0,0 +1,43 @@ +/* + * Copyright 2020 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/master/LICENSE + */ + +package net.mamoe.mirai.message.data + +import kotlin.test.Test +import kotlin.test.assertEquals + +internal class TestMessageChainDelegate { + private val message = messageChainOf(AtAll, PlainText("test")) + + @Test + fun testGetValue() { + @Suppress("UNUSED_VARIABLE") + val atAll: AtAll by message + val plain: PlainText by message + assertEquals(plain.content, "test") + } + + @Test + fun testOrNull() { + @Suppress("UNUSED_VARIABLE") + val atAll: AtAll? by message.orNull() + val plain: PlainText? by message.orNull() + assertEquals(plain!!.content, "test") + } + + @Test + fun testOrElse() { + val message = messageChainOf() + + @Suppress("UNUSED_VARIABLE") + val plain: PlainText? by message.orElse { PlainText("test") } + assertEquals(plain!!.content, "test") + } + +} \ No newline at end of file