From 5b40f291bd3d1b477b282886dbb73789495617a5 Mon Sep 17 00:00:00 2001 From: Jinseong Jeon Date: Fri, 23 Jul 2021 00:01:39 -0700 Subject: [PATCH] FIR IDE: resolve KtTypeReference from super type entry to KtType which will be mapped to delegated constructor call where we can still find the referred type. --- .../idea/frontend/api/fir/components/KtFirTypeProvider.kt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirTypeProvider.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirTypeProvider.kt index 21b4a181906..edb238dc328 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirTypeProvider.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirTypeProvider.kt @@ -7,13 +7,13 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.components import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.expressions.FirCallableReferenceAccess +import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall import org.jetbrains.kotlin.fir.expressions.FirGetClassCall import org.jetbrains.kotlin.fir.typeContext import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl import org.jetbrains.kotlin.idea.fir.low.level.api.api.getOrBuildFir -import org.jetbrains.kotlin.idea.fir.low.level.api.api.getOrBuildFirOfType import org.jetbrains.kotlin.idea.fir.low.level.api.api.throwUnexpectedFirElementError import org.jetbrains.kotlin.idea.frontend.api.components.KtBuiltinTypes import org.jetbrains.kotlin.idea.frontend.api.components.KtTypeProvider @@ -67,7 +67,11 @@ internal class KtFirTypeProvider( } override fun getKtType(ktTypeReference: KtTypeReference): KtType = withValidityAssertion { - ktTypeReference.getOrBuildFirOfType(firResolveState).coneType.asKtType() + when (val fir = ktTypeReference.getOrBuildFir(firResolveState)) { + is FirResolvedTypeRef -> fir.coneType.asKtType() + is FirDelegatedConstructorCall -> fir.constructedTypeRef.coneType.asKtType() + else -> throwUnexpectedFirElementError(fir, ktTypeReference) + } } override fun getReceiverTypeForDoubleColonExpression(expression: KtDoubleColonExpression): KtType? = withValidityAssertion {