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.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)