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)
|
renderName(descriptor)
|
||||||
|
|
||||||
val upperBounds = descriptor.upperBounds.filterNot { it.isNullableAny() }
|
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) {
|
private fun KtFe10RendererConsumer.renderClass(descriptor: ClassDescriptor) {
|
||||||
@@ -187,6 +190,8 @@ internal class KtFe10Renderer(
|
|||||||
renderTypeParameters(descriptor.declaredTypeParameters)
|
renderTypeParameters(descriptor.declaredTypeParameters)
|
||||||
renderSupertypes(descriptor)
|
renderSupertypes(descriptor)
|
||||||
|
|
||||||
|
renderWhereSuffix(descriptor.declaredTypeParameters)
|
||||||
|
|
||||||
if (options.renderClassMembers) {
|
if (options.renderClassMembers) {
|
||||||
val (enumEntries, otherDeclarations) = descriptor.unsubstitutedMemberScope.getContributedDescriptors()
|
val (enumEntries, otherDeclarations) = descriptor.unsubstitutedMemberScope.getContributedDescriptors()
|
||||||
.filter { shouldRenderNestedDeclaration(descriptor, it) }
|
.filter { shouldRenderNestedDeclaration(descriptor, it) }
|
||||||
@@ -349,6 +354,7 @@ internal class KtFe10Renderer(
|
|||||||
renderName(descriptor)
|
renderName(descriptor)
|
||||||
append(": ")
|
append(": ")
|
||||||
renderType(descriptor.type, shouldApproximate = options.approximateTypes)
|
renderType(descriptor.type, shouldApproximate = options.approximateTypes)
|
||||||
|
renderWhereSuffix(descriptor.typeParameters)
|
||||||
|
|
||||||
if (options.renderClassMembers) {
|
if (options.renderClassMembers) {
|
||||||
fun shouldRenderAccessor(accessor: PropertyAccessorDescriptor): Boolean {
|
fun shouldRenderAccessor(accessor: PropertyAccessorDescriptor): Boolean {
|
||||||
@@ -416,6 +422,24 @@ internal class KtFe10Renderer(
|
|||||||
append(": ")
|
append(": ")
|
||||||
renderType(returnType, shouldApproximate = options.approximateTypes)
|
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>) {
|
private fun KtFe10RendererConsumer.renderValueParameters(valueParameters: List<ValueParameterDescriptor>) {
|
||||||
|
|||||||
-6
@@ -1,6 +0,0 @@
|
|||||||
interface A
|
|
||||||
|
|
||||||
interface B
|
|
||||||
|
|
||||||
class C<T : A & B>
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user