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}"
 }