From b1d9b79712dd0f305773e9e2f922bede30b5baeb Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Fri, 20 May 2022 17:28:29 +0200 Subject: [PATCH] KtFe10TypeRenderer: fix reflection & suspend type rendering After this commit, all Fe10IdeNormalAnalysisSourceModuleFunctionClassKindTestGenerated pass --- .../descriptors/utils/KtFe10TypeRenderer.kt | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/utils/KtFe10TypeRenderer.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/utils/KtFe10TypeRenderer.kt index 05a060128a7..569189c73ab 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/utils/KtFe10TypeRenderer.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/utils/KtFe10TypeRenderer.kt @@ -11,10 +11,8 @@ import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.bas import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.getKtNamedAnnotationArguments import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.maybeLocalClassId import org.jetbrains.kotlin.analysis.utils.printer.PrettyPrinter +import org.jetbrains.kotlin.builtins.* import org.jetbrains.kotlin.builtins.functions.FunctionClassDescriptor -import org.jetbrains.kotlin.builtins.getReceiverTypeFromFunctionType -import org.jetbrains.kotlin.builtins.getReturnTypeFromFunctionType -import org.jetbrains.kotlin.builtins.getValueParameterTypesFromFunctionType import org.jetbrains.kotlin.descriptors.ClassifierDescriptorWithTypeParameters import org.jetbrains.kotlin.descriptors.PossiblyInnerType import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor @@ -177,9 +175,21 @@ internal class KtFe10TypeRenderer(private val options: KtTypeRendererOptions, pr } private fun KtFe10RendererConsumer.renderFunctionType(type: SimpleType) { - val receiverType = type.getReceiverTypeFromFunctionType() - val valueParameters = type.getValueParameterTypesFromFunctionType() - val returnType = type.getReturnTypeFromFunctionType() + if (type.isSuspendFunctionType || type.isKSuspendFunctionType) { + append("suspend ") + } + val (receiverType, valueParameters, returnType) = when { + type.isKFunctionType || type.isKSuspendFunctionType -> Triple( + null, + type.arguments.dropLast(1), + type.arguments.last().type, + ) + else -> Triple( + type.getReceiverTypeFromFunctionType(), + type.getValueParameterTypesFromFunctionType(), + type.getReturnTypeFromFunctionType() + ) + } if (receiverType != null) { renderType(receiverType)