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,