Render captured type parameters in verbose mode

This commit is contained in:
Denis Zharkov
2015-11-11 19:52:22 +03:00
parent 6ae653e5a1
commit e920ce709b
42 changed files with 84 additions and 72 deletions
@@ -574,14 +574,7 @@ internal class DescriptorRendererImpl(
if (!typeParameters.isEmpty()) {
builder.append(lt())
val iterator = typeParameters.iterator()
while (iterator.hasNext()) {
val typeParameterDescriptor = iterator.next()
renderTypeParameter(typeParameterDescriptor, builder, false)
if (iterator.hasNext()) {
builder.append(", ")
}
}
renderTypeParameterList(builder, typeParameters)
builder.append(gt())
if (withSpace) {
builder.append(" ")
@@ -589,6 +582,17 @@ internal class DescriptorRendererImpl(
}
}
private fun renderTypeParameterList(builder: StringBuilder, typeParameters: List<TypeParameterDescriptor>) {
val iterator = typeParameters.iterator()
while (iterator.hasNext()) {
val typeParameterDescriptor = iterator.next()
renderTypeParameter(typeParameterDescriptor, builder, false)
if (iterator.hasNext()) {
builder.append(", ")
}
}
}
/* FUNCTIONS */
private fun renderFunction(function: FunctionDescriptor, builder: StringBuilder) {
if (!startFromName) {
@@ -825,6 +829,14 @@ internal class DescriptorRendererImpl(
val typeParameters = klass.declaredTypeParameters
renderTypeParameters(typeParameters, builder, false)
if (verbose && klass.isInner && klass.typeConstructor.parameters.size > typeParameters.size) {
builder.append(" /*captured type parameters: ")
val constructorTypeParameters = klass.typeConstructor.parameters
renderTypeParameterList(
builder, constructorTypeParameters.subList(typeParameters.size, constructorTypeParameters.size))
builder.append("*/")
}
if (!klass.kind.isSingleton && classWithPrimaryConstructor) {
val primaryConstructor = klass.unsubstitutedPrimaryConstructor
if (primaryConstructor != null) {