Collection.toString() should not throw if it contains itself
Merge-request: KT-MR-10591 Merged-by: Abduqodiri Qurbonzoda <abduqodiri.qurbonzoda@jetbrains.com>
This commit is contained in:
committed by
Space Team
parent
6fc02c3408
commit
f152fa537d
@@ -174,7 +174,7 @@ internal class ListBuilder<E> private constructor(
|
||||
}
|
||||
|
||||
override fun toString(): String {
|
||||
return array.subarrayContentToString(offset, length)
|
||||
return array.subarrayContentToString(offset, length, this)
|
||||
}
|
||||
|
||||
// ---------------------------- private ----------------------------
|
||||
@@ -359,13 +359,18 @@ internal fun <E> arrayOfUninitializedElements(size: Int): Array<E> {
|
||||
return arrayOfNulls<Any?>(size) as Array<E>
|
||||
}
|
||||
|
||||
private fun <T> Array<out T>.subarrayContentToString(offset: Int, length: Int): String {
|
||||
private fun <T> Array<out T>.subarrayContentToString(offset: Int, length: Int, thisCollection: Collection<T>): String {
|
||||
val sb = StringBuilder(2 + length * 3)
|
||||
sb.append("[")
|
||||
var i = 0
|
||||
while (i < length) {
|
||||
if (i > 0) sb.append(", ")
|
||||
sb.append(this[offset + i])
|
||||
val nextElement = this[offset + i]
|
||||
if (nextElement === thisCollection) {
|
||||
sb.append("(this Collection)")
|
||||
} else {
|
||||
sb.append(nextElement)
|
||||
}
|
||||
i++
|
||||
}
|
||||
sb.append("]")
|
||||
|
||||
@@ -571,10 +571,10 @@ internal class MapBuilder<K, V> private constructor(
|
||||
if (index >= map.length) throw NoSuchElementException()
|
||||
lastIndex = index++
|
||||
val key = map.keysArray[lastIndex]
|
||||
if (key == map) sb.append("(this Map)") else sb.append(key)
|
||||
if (key === map) sb.append("(this Map)") else sb.append(key)
|
||||
sb.append('=')
|
||||
val value = map.valuesArray!![lastIndex]
|
||||
if (value == map) sb.append("(this Map)") else sb.append(value)
|
||||
if (value === map) sb.append("(this Map)") else sb.append(value)
|
||||
initNext()
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user