FE10 analysis API: render type parameter bounds as FIR does
This commit is contained in:
+25
-1
@@ -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>) {
|
||||
|
||||
Reference in New Issue
Block a user