From e6c55e0955a784d4bb98152d6a2410d3ab95a622 Mon Sep 17 00:00:00 2001 From: Him188 Date: Sun, 29 Mar 2020 13:40:12 +0800 Subject: [PATCH] Add temp for MessageChain.toString --- .../net.mamoe.mirai/message/data/MessageChain.kt | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) 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 8c25df318..04f8d8afd 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 @@ -416,7 +416,10 @@ internal class MessageChainImplByIterable constructor( ) : Message, Iterable, MessageChain { override val size: Int by lazy { delegate.count() } override fun iterator(): Iterator = delegate.iterator() - override fun toString(): String = this.delegate.joinToString("") { it.toString() } + var toStringTemp: String? = null + override fun toString(): String = + toStringTemp ?: this.delegate.joinToString("") { it.toString() }.also { toStringTemp = it } + override operator fun contains(sub: String): Boolean = delegate.any { it.contains(sub) } } @@ -429,7 +432,10 @@ internal class MessageChainImplByCollection constructor( ) : Message, Iterable, MessageChain { override val size: Int get() = delegate.size override fun iterator(): Iterator = delegate.iterator() - override fun toString(): String = this.delegate.joinToString("") { it.toString() } + var toStringTemp: String? = null + override fun toString(): String = + toStringTemp ?: this.delegate.joinToString("") { it.toString() }.also { toStringTemp = it } + override operator fun contains(sub: String): Boolean = delegate.any { it.contains(sub) } } @@ -447,7 +453,10 @@ internal class MessageChainImplBySequence constructor( */ private val collected: List by lazy { delegate.toList() } override fun iterator(): Iterator = collected.iterator() - override fun toString(): String = this.collected.joinToString("") { it.toString() } + var toStringTemp: String? = null + override fun toString(): String = + toStringTemp ?: this.collected.joinToString("") { it.toString() }.also { toStringTemp = it } + override operator fun contains(sub: String): Boolean = collected.any { it.contains(sub) } }