Render type arguments by index
This commit is contained in:
@@ -16,6 +16,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.ir.util
|
||||
|
||||
import org.jetbrains.kotlin.descriptors.CallableDescriptor
|
||||
import org.jetbrains.kotlin.ir.IrElement
|
||||
import org.jetbrains.kotlin.ir.SourceManager
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
@@ -172,16 +173,29 @@ class DumpIrTreeVisitor(out: Appendable) : IrElementVisitor<Unit, String> {
|
||||
}
|
||||
|
||||
private fun dumpTypeArguments(expression: IrMemberAccessExpression) {
|
||||
for (typeParameter in expression.descriptor.original.typeParameters) {
|
||||
val renderedParameter = DescriptorRenderer.ONLY_NAMES_WITH_SHORT_TYPES.render(typeParameter)
|
||||
val typeArgument = expression.getTypeArgument(typeParameter)
|
||||
val renderedType = typeArgument?.let {
|
||||
DescriptorRenderer.ONLY_NAMES_WITH_SHORT_TYPES.renderType(typeArgument)
|
||||
} ?: "--- No type argument for $typeParameter declared in ${typeParameter.containingDeclaration}"
|
||||
printer.println("$renderedParameter: $renderedType")
|
||||
for (index in 0 until expression.typeArgumentsCount) {
|
||||
printer.println(
|
||||
"${expression.descriptor.renderTypeParameter(index)}: ${expression.renderTypeArgument(index)}"
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private fun CallableDescriptor.renderTypeParameter(index: Int): String {
|
||||
val typeParameter = original.typeParameters.getOrNull(index)
|
||||
return if (typeParameter != null)
|
||||
DescriptorRenderer.ONLY_NAMES_WITH_SHORT_TYPES.render(typeParameter)
|
||||
else
|
||||
"<`$index>"
|
||||
}
|
||||
|
||||
private fun IrMemberAccessExpression.renderTypeArgument(index: Int): String {
|
||||
val typeArgument = getTypeArgument(index)
|
||||
return if (typeArgument != null)
|
||||
DescriptorRenderer.ONLY_NAMES_WITH_SHORT_TYPES.renderType(typeArgument)
|
||||
else
|
||||
"<none>"
|
||||
}
|
||||
|
||||
override fun visitGetField(expression: IrGetField, data: String) {
|
||||
expression.dumpLabeledElementWith(data) {
|
||||
expression.receiver?.accept(this, "receiver")
|
||||
|
||||
Reference in New Issue
Block a user