From 40dd786f99df40fc4044a5e1daba6fbf9619df2c Mon Sep 17 00:00:00 2001 From: Him188 <Him188@mamoe.net> Date: Sat, 9 May 2020 16:54:28 +0800 Subject: [PATCH] Ignore empty string and arrays and 0s in `_miraiContentToString` --- .../mirai/qqandroid/utils/contentToString.kt | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/utils/contentToString.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/utils/contentToString.kt index 2897c8fa1..a4d61f495 100644 --- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/utils/contentToString.kt +++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/utils/contentToString.kt @@ -142,9 +142,19 @@ private val KProperty1<*, *>.isConst: Boolean private val KClass<*>.isData: Boolean get() = false // on JVM, it will be resolved to member function +private fun Any.canBeIgnored(): Boolean { + return when (this) { + is String -> this.isEmpty() + is ByteArray -> this.isEmpty() + is Array<*> -> this.isEmpty() + is Number -> this == 0 + else -> false + } +} + private fun Any.contentToStringReflectively( prefix: String, - filter: ((name: String, value: Any?) -> Boolean)? = null + filter: ((name: String, value: Any?) -> Boolean)? = null, ): String { val newPrefix = "$prefix " return (this::class.simpleName ?: "<UnnamedClass>") + "#" + this::class.hashCode() + " {\n" + @@ -165,10 +175,13 @@ private fun Any.contentToStringReflectively( .joinToStringPrefixed( prefix = newPrefix ) { (name: String, value: Any?) -> - "$name=" + kotlin.runCatching { - if (value == this) "<this>" - else value._miraiContentToString(newPrefix) - }.getOrElse { "<!>" } + if (value.canBeIgnored()) "" + else { + "$name=" + kotlin.runCatching { + if (value == this) "<this>" + else value._miraiContentToString(newPrefix) + }.getOrElse { "<!>" } + } } + "\n$prefix}" }