From b40b681f8105e72b51ec7274f04d1086e6385322 Mon Sep 17 00:00:00 2001 From: Him188 Date: Sat, 15 Jan 2022 07:23:32 +0000 Subject: [PATCH] Deprecate `EmptyMessageChain` in favor of `emptyMessageChain()` --- .../mirai-console/src/command/CommandManager.kt | 2 +- .../resolve/BuiltInCommandCallResolver.kt | 6 +++--- .../android/api/android.api | 1 + .../compatibility-validation/jvm/api/jvm.api | 1 + .../kotlin/message/data/MessageChain.kt | 16 +++++++++++++++- .../src/commonMain/kotlin/message/data/impl.kt | 10 +++++----- .../kotlin/message.data/MessageUtilsTest.kt | 10 +++++----- 7 files changed, 31 insertions(+), 15 deletions(-) diff --git a/mirai-console/backend/mirai-console/src/command/CommandManager.kt b/mirai-console/backend/mirai-console/src/command/CommandManager.kt index a65fbe9c0..ea57ba55a 100644 --- a/mirai-console/backend/mirai-console/src/command/CommandManager.kt +++ b/mirai-console/backend/mirai-console/src/command/CommandManager.kt @@ -146,7 +146,7 @@ public interface CommandManager { public suspend fun executeCommand( sender: CommandSender, command: Command, - arguments: Message = EmptyMessageChain, + arguments: Message = emptyMessageChain(), checkPermission: Boolean = true, ): CommandExecuteResult { // TODO: 2020/10/18 net.mamoe.mirai.console.command.CommandManager.execute diff --git a/mirai-console/backend/mirai-console/src/command/resolve/BuiltInCommandCallResolver.kt b/mirai-console/backend/mirai-console/src/command/resolve/BuiltInCommandCallResolver.kt index 1c7d68636..b4849ef6e 100644 --- a/mirai-console/backend/mirai-console/src/command/resolve/BuiltInCommandCallResolver.kt +++ b/mirai-console/backend/mirai-console/src/command/resolve/BuiltInCommandCallResolver.kt @@ -19,7 +19,7 @@ import net.mamoe.mirai.console.extensions.CommandCallResolverProvider import net.mamoe.mirai.console.internal.data.classifierAsKClass import net.mamoe.mirai.console.util.ConsoleExperimentalApi import net.mamoe.mirai.console.util.safeCast -import net.mamoe.mirai.message.data.EmptyMessageChain +import net.mamoe.mirai.message.data.emptyMessageChain import net.mamoe.mirai.message.data.toMessageChain /** @@ -149,7 +149,7 @@ public object BuiltInCommandCallResolver : CommandCallResolver { // add default empty vararg argument val remainingVararg = remainingParameters.find { it.isVararg } if (remainingVararg != null) { - zipped.add(remainingVararg to DefaultCommandValueArgument(EmptyMessageChain)) + zipped.add(remainingVararg to DefaultCommandValueArgument(emptyMessageChain())) remainingParameters.remove(remainingVararg) } } @@ -195,7 +195,7 @@ public object BuiltInCommandCallResolver : CommandCallResolver { .also { list -> val candidates = list - .asSequence().filterIsInstance() + .asSequence() .flatMap { phase -> phase.argumentAcceptances.filter { it.acceptance is ArgumentAcceptance.Direct } .map { phase to it } diff --git a/mirai-core-api/compatibility-validation/android/api/android.api b/mirai-core-api/compatibility-validation/android/api/android.api index d91ff9c99..fde0458d7 100644 --- a/mirai-core-api/compatibility-validation/android/api/android.api +++ b/mirai-core-api/compatibility-validation/android/api/android.api @@ -4954,6 +4954,7 @@ public final class net/mamoe/mirai/message/data/MessageUtils { public static final fun contentsList (Lnet/mamoe/mirai/message/data/MessageChain;)Ljava/util/List; public static final synthetic fun contentsSequence (Lnet/mamoe/mirai/message/data/MessageChain;)Lkotlin/sequences/Sequence; public static final fun copySource (Lnet/mamoe/mirai/message/data/MessageSource;Lkotlin/jvm/functions/Function1;)Lnet/mamoe/mirai/message/data/OfflineMessageSource; + public static final fun emptyMessageChain ()Lnet/mamoe/mirai/message/data/MessageChain; public static final synthetic fun getBot (Lnet/mamoe/mirai/message/data/MessageChain;)Lnet/mamoe/mirai/Bot; public static final fun getBot (Lnet/mamoe/mirai/message/data/MessageSource;)Lnet/mamoe/mirai/Bot; public static final fun getBotOrNull (Lnet/mamoe/mirai/message/data/MessageSource;)Lnet/mamoe/mirai/Bot; diff --git a/mirai-core-api/compatibility-validation/jvm/api/jvm.api b/mirai-core-api/compatibility-validation/jvm/api/jvm.api index 4c79993ac..2c64e2113 100644 --- a/mirai-core-api/compatibility-validation/jvm/api/jvm.api +++ b/mirai-core-api/compatibility-validation/jvm/api/jvm.api @@ -4954,6 +4954,7 @@ public final class net/mamoe/mirai/message/data/MessageUtils { public static final fun contentsList (Lnet/mamoe/mirai/message/data/MessageChain;)Ljava/util/List; public static final synthetic fun contentsSequence (Lnet/mamoe/mirai/message/data/MessageChain;)Lkotlin/sequences/Sequence; public static final fun copySource (Lnet/mamoe/mirai/message/data/MessageSource;Lkotlin/jvm/functions/Function1;)Lnet/mamoe/mirai/message/data/OfflineMessageSource; + public static final fun emptyMessageChain ()Lnet/mamoe/mirai/message/data/MessageChain; public static final synthetic fun getBot (Lnet/mamoe/mirai/message/data/MessageChain;)Lnet/mamoe/mirai/Bot; public static final fun getBot (Lnet/mamoe/mirai/message/data/MessageSource;)Lnet/mamoe/mirai/Bot; public static final fun getBotOrNull (Lnet/mamoe/mirai/message/data/MessageSource;)Lnet/mamoe/mirai/Bot; diff --git a/mirai-core-api/src/commonMain/kotlin/message/data/MessageChain.kt b/mirai-core-api/src/commonMain/kotlin/message/data/MessageChain.kt index 60848850c..2fdad1a0a 100644 --- a/mirai-core-api/src/commonMain/kotlin/message/data/MessageChain.kt +++ b/mirai-core-api/src/commonMain/kotlin/message/data/MessageChain.kt @@ -347,9 +347,23 @@ public sealed interface MessageChain : } /** - * 不含任何元素的 [MessageChain]. + * 返回一个不含任何元素的 [MessageChain]. + * + * @since 2.11 + */ +// Java: MessageUtils.emptyMessageChain() +@Suppress("DEPRECATION") +public fun emptyMessageChain(): MessageChain = EmptyMessageChain + +/** + * 不含任何元素的 [MessageChain]. 已弃用, 请使用 [emptyMessageChain] */ //@Serializable(MessageChain.Serializer::class) +@Deprecated( + "Please use emptyMessageChain()", + replaceWith = ReplaceWith("emptyMessageChain()", "net.mamoe.mirai.message.data.emptyMessageChain") +) +@DeprecatedSinceMirai(warningSince = "2.11") public object EmptyMessageChain : MessageChain, List by emptyList() { override val size: Int get() = 0 diff --git a/mirai-core-api/src/commonMain/kotlin/message/data/impl.kt b/mirai-core-api/src/commonMain/kotlin/message/data/impl.kt index d852cc37f..24bf355f9 100644 --- a/mirai-core-api/src/commonMain/kotlin/message/data/impl.kt +++ b/mirai-core-api/src/commonMain/kotlin/message/data/impl.kt @@ -1,10 +1,10 @@ /* - * Copyright 2019-2021 Mamoe Technologies and contributors. + * 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. + * 此源代码的使用受 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 + * https://github.com/mamoe/mirai/blob/dev/LICENSE */ @file:Suppress("EXPERIMENTAL_API_USAGE") @@ -163,7 +163,7 @@ internal fun MessageChain.getImpl(key: MessageKey): M? { * @return [EmptyMessageChain] if [delegate] is empty, otherwise [MessageChainImpl] */ internal fun createMessageChainImplOptimized(delegate: List): MessageChain { - return if (delegate.isEmpty()) EmptyMessageChain + return if (delegate.isEmpty()) emptyMessageChain() else MessageChainImpl(delegate) } diff --git a/mirai-core-api/src/commonTest/kotlin/message.data/MessageUtilsTest.kt b/mirai-core-api/src/commonTest/kotlin/message.data/MessageUtilsTest.kt index 45ab6159b..fd0cc7574 100644 --- a/mirai-core-api/src/commonTest/kotlin/message.data/MessageUtilsTest.kt +++ b/mirai-core-api/src/commonTest/kotlin/message.data/MessageUtilsTest.kt @@ -1,10 +1,10 @@ /* - * Copyright 2019-2021 Mamoe Technologies and contributors. + * 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. + * 此源代码的使用受 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 + * https://github.com/mamoe/mirai/blob/dev/LICENSE */ package net.mamoe.mirai.message.data @@ -18,7 +18,7 @@ import kotlin.test.assertTrue internal class MessageUtilsTest { @Test fun testIsContentEmpty() { - assertTrue { EmptyMessageChain.isContentEmpty() } + assertTrue { emptyMessageChain().isContentEmpty() } assertTrue { buildMessageChain { }.isContentEmpty() } assertTrue { PlainText("").isContentEmpty() } assertTrue { (PlainText("") + PlainText("")).isContentEmpty() }