FE10 analysis API: render type parameter bounds as FIR does

This commit is contained in:
Mikhail Glukhikh
2022-05-30 17:20:25 +02:00
committed by Space
parent d792c7b70c
commit a3db2e13b2
2 changed files with 25 additions and 7 deletions
@@ -152,7 +152,10 @@ internal class KtFe10Renderer(
renderName(descriptor)
val upperBounds = descriptor.upperBounds.filterNot { it.isNullableAny() }
printCollectionIfNotEmpty(upperBounds, separator = " & ", prefix = " : ") { renderType(it) }
if (upperBounds.isNotEmpty()) {
append(" : ")
renderType(upperBounds.first())
}
}
private fun KtFe10RendererConsumer.renderClass(descriptor: ClassDescriptor) {
@@ -187,6 +190,8 @@ internal class KtFe10Renderer(
renderTypeParameters(descriptor.declaredTypeParameters)
renderSupertypes(descriptor)
renderWhereSuffix(descriptor.declaredTypeParameters)
if (options.renderClassMembers) {
val (enumEntries, otherDeclarations) = descriptor.unsubstitutedMemberScope.getContributedDescriptors()
.filter { shouldRenderNestedDeclaration(descriptor, it) }
@@ -349,6 +354,7 @@ internal class KtFe10Renderer(
renderName(descriptor)
append(": ")
renderType(descriptor.type, shouldApproximate = options.approximateTypes)
renderWhereSuffix(descriptor.typeParameters)
if (options.renderClassMembers) {
fun shouldRenderAccessor(accessor: PropertyAccessorDescriptor): Boolean {
@@ -416,6 +422,24 @@ internal class KtFe10Renderer(
append(": ")
renderType(returnType, shouldApproximate = options.approximateTypes)
}
renderWhereSuffix(descriptor.typeParameters)
}
private fun KtFe10RendererConsumer.renderWhereSuffix(descriptors: List<TypeParameterDescriptor>) {
val upperBoundStrings = ArrayList<String>(0)
for (typeParameter in descriptors) {
typeParameter.upperBounds
.drop(1) // first parameter is rendered by renderTypeParameter
.mapTo(upperBoundStrings) { typeParameter.name.render() + " : " + prettyPrint { renderType(it) } }
}
if (upperBoundStrings.isNotEmpty()) {
append(" where ")
upperBoundStrings.joinTo(this, ", ")
append(' ')
}
}
private fun KtFe10RendererConsumer.renderValueParameters(valueParameters: List<ValueParameterDescriptor>) {