From a3db2e13b2fae9f87831de93f7b972e3faea11ce Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Mon, 30 May 2022 17:20:25 +0200 Subject: [PATCH] FE10 analysis API: render type parameter bounds as FIR does --- .../api/descriptors/utils/KtFe10Renderer.kt | 26 ++++++++++++++++++- .../where.descriptors.rendered | 6 ----- 2 files changed, 25 insertions(+), 7 deletions(-) delete mode 100644 analysis/analysis-api/testData/components/symbolDeclarationRenderer/renderDeclaration/where.descriptors.rendered diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/utils/KtFe10Renderer.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/utils/KtFe10Renderer.kt index 249a69e9242..25ab240320f 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/utils/KtFe10Renderer.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/utils/KtFe10Renderer.kt @@ -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) { + val upperBoundStrings = ArrayList(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) { diff --git a/analysis/analysis-api/testData/components/symbolDeclarationRenderer/renderDeclaration/where.descriptors.rendered b/analysis/analysis-api/testData/components/symbolDeclarationRenderer/renderDeclaration/where.descriptors.rendered deleted file mode 100644 index 8aebf651e6e..00000000000 --- a/analysis/analysis-api/testData/components/symbolDeclarationRenderer/renderDeclaration/where.descriptors.rendered +++ /dev/null @@ -1,6 +0,0 @@ -interface A - -interface B - -class C -