K2: introduce even more readable renderer for types in messages

#KT-53343 Fixed
This commit is contained in:
Mikhail Glukhikh
2022-09-12 16:47:12 +02:00
committed by Space
parent 3848be596e
commit e36091b926
7 changed files with 148 additions and 79 deletions
@@ -48,3 +48,27 @@ fun renderFqName(pathSegments: List<Name>): String {
}
}
fun replacePrefixesInTypeRepresentations(
lowerRendered: String,
lowerPrefix: String,
upperRendered: String,
upperPrefix: String,
foldedPrefix: String
): String? {
if (lowerRendered.startsWith(lowerPrefix) && upperRendered.startsWith(upperPrefix)) {
val lowerWithoutPrefix = lowerRendered.substring(lowerPrefix.length)
val upperWithoutPrefix = upperRendered.substring(upperPrefix.length)
val flexibleCollectionName = foldedPrefix + lowerWithoutPrefix
if (lowerWithoutPrefix == upperWithoutPrefix) return flexibleCollectionName
if (typeStringsDifferOnlyInNullability(lowerWithoutPrefix, upperWithoutPrefix)) {
return "$flexibleCollectionName!"
}
}
return null
}
fun typeStringsDifferOnlyInNullability(lower: String, upper: String) =
lower == upper.replace("?", "") || upper.endsWith("?") && ("$lower?") == upper || "($lower)?" == upper