KtFe10TypeRenderer: fix reflection & suspend type rendering

After this commit, all
Fe10IdeNormalAnalysisSourceModuleFunctionClassKindTestGenerated pass
This commit is contained in:
Mikhail Glukhikh
2022-05-20 17:28:29 +02:00
committed by Space
parent 049cab5207
commit b1d9b79712
@@ -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.getKtNamedAnnotationArguments
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.maybeLocalClassId import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.maybeLocalClassId
import org.jetbrains.kotlin.analysis.utils.printer.PrettyPrinter 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.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.ClassifierDescriptorWithTypeParameters
import org.jetbrains.kotlin.descriptors.PossiblyInnerType import org.jetbrains.kotlin.descriptors.PossiblyInnerType
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
@@ -177,9 +175,21 @@ internal class KtFe10TypeRenderer(private val options: KtTypeRendererOptions, pr
} }
private fun KtFe10RendererConsumer.renderFunctionType(type: SimpleType) { private fun KtFe10RendererConsumer.renderFunctionType(type: SimpleType) {
val receiverType = type.getReceiverTypeFromFunctionType() if (type.isSuspendFunctionType || type.isKSuspendFunctionType) {
val valueParameters = type.getValueParameterTypesFromFunctionType() append("suspend ")
val returnType = type.getReturnTypeFromFunctionType() }
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) { if (receiverType != null) {
renderType(receiverType) renderType(receiverType)