[ULC] Add annotations for PsiTypes in UltraLight classes

WIP on KT-41148, KT-41406, KT-41420
This commit is contained in:
Igor Yakovlev
2020-09-04 11:58:32 +03:00
parent b82d8cd4f4
commit e08763f3dd
13 changed files with 224 additions and 24 deletions
@@ -14,8 +14,43 @@ import org.jetbrains.kotlin.load.kotlin.NON_EXISTENT_CLASS_NAME
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.Name
object PsiClassRenderer {
private fun PsiType.renderType() = getCanonicalText(true)
var extendedTypeRenderer = false
private fun PsiType.renderType() = StringBuffer().also { renderType(it) }.toString()
private fun PsiType.renderType(sb: StringBuffer) {
if (extendedTypeRenderer && annotations.isNotEmpty()) {
sb.append(annotations.joinToString(" ", postfix = " ") { it.renderAnnotation() })
}
when (this) {
is PsiClassType -> {
sb.append(PsiNameHelper.getQualifiedClassName(canonicalText, false))
if (parameterCount > 0) {
sb.append("<")
parameters.forEachIndexed { index, type ->
type.renderType(sb)
if (index < parameterCount - 1) sb.append(", ")
}
sb.append(">")
}
}
is PsiEllipsisType -> {
componentType.renderType(sb)
sb.append("...")
}
is PsiArrayType -> {
componentType.renderType(sb)
sb.append("[]")
}
else -> {
sb.append(canonicalText)
}
}
}
private fun PsiReferenceList?.renderRefList(keyword: String, sortReferences: Boolean = true): String {
if (this == null) return ""