From 73bb2e76f26387a25c117d31b53854e8fc28192b Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Fri, 11 Jun 2021 13:17:40 +0200 Subject: [PATCH] FIR IDE: introduce KtFirDefinitelyNotNullType --- .../kotlin/idea/frontend/api/types/KtType.kt | 6 ++++++ .../idea/frontend/api/fir/KtSymbolByFirBuilder.kt | 2 +- .../kotlin/idea/frontend/api/fir/types/FirKtType.kt | 13 +++++++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/types/KtType.kt b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/types/KtType.kt index d0abbc15148..7fcba07c89b 100644 --- a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/types/KtType.kt +++ b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/types/KtType.kt @@ -57,6 +57,12 @@ abstract class KtTypeParameterType : KtTypeWithNullability { abstract class KtCapturedType : KtType +abstract class KtDefinitelyNotNullType : KtType, KtTypeWithNullability { + abstract val original: KtType + + final override val nullability: KtTypeNullability get() = KtTypeNullability.NON_NULLABLE +} + abstract class KtFlexibleType : KtType { abstract val lowerBound: KtType abstract val upperBound: KtType diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/KtSymbolByFirBuilder.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/KtSymbolByFirBuilder.kt index bc598b8b5d2..700d3c3c388 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/KtSymbolByFirBuilder.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/KtSymbolByFirBuilder.kt @@ -319,7 +319,7 @@ internal class KtSymbolByFirBuilder private constructor( is ConeClassErrorType -> KtFirClassErrorType(coneType, token) is ConeFlexibleType -> KtFirFlexibleType(coneType, token, this@KtSymbolByFirBuilder) is ConeIntersectionType -> KtFirIntersectionType(coneType, token, this@KtSymbolByFirBuilder) - is ConeDefinitelyNotNullType -> buildKtType(coneType.original) + is ConeDefinitelyNotNullType -> KtFirDefinitelyNotNullType(coneType, token, this@KtSymbolByFirBuilder) is ConeCapturedType -> KtFirCapturedType(coneType, token) else -> throwUnexpectedElementError(coneType) } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/types/FirKtType.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/types/FirKtType.kt index 34f81a3e857..cd63fb4e6d8 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/types/FirKtType.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/types/FirKtType.kt @@ -109,6 +109,19 @@ internal class KtFirCapturedType( override fun asStringForDebugging(): String = withValidityAssertion { coneType.render() } } +internal class KtFirDefinitelyNotNullType( + coneType: ConeDefinitelyNotNullType, + override val token: ValidityToken, + private val firBuilder: KtSymbolByFirBuilder, +) : KtDefinitelyNotNullType(), KtFirType { + override val coneType by weakRef(coneType) + + override val original: KtType by cached { firBuilder.typeBuilder.buildKtType(this.coneType.original) } + + override fun asStringForDebugging(): String = withValidityAssertion { coneType.render() } +} + + internal class KtFirTypeParameterType( coneType: ConeTypeParameterType,