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 58795f5619e..392f9108aca 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 @@ -19,11 +19,23 @@ interface KtType : ValidityTokenOwner { fun asStringForDebugging(): String } +interface KtTypeWithNullability : KtType { + val nullability: KtTypeNullability +} + +enum class KtTypeNullability { + NULLABLE, NON_NULLABLE; + + companion object { + fun create(isNullable: Boolean) = if (isNullable) NULLABLE else NON_NULLABLE + } +} + sealed class KtDenotableType : KtType { abstract fun asString(): String } -abstract class KtClassType : KtDenotableType() { +abstract class KtClassType : KtDenotableType(), KtTypeWithNullability { abstract val classId: ClassId abstract val classSymbol: KtClassLikeSymbol abstract val typeArguments: List @@ -33,7 +45,7 @@ abstract class KtErrorType : KtType { abstract val error: String } -abstract class KtTypeParameterType : KtDenotableType() { +abstract class KtTypeParameterType : KtDenotableType(), KtTypeWithNullability { abstract val name: Name abstract val symbol: KtTypeParameterSymbol } 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 0fe8cb193ba..6fd33f8a99c 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 @@ -65,6 +65,7 @@ internal class KtFirClassType( firBuilder.buildTypeArgument(typeArgument) } } + override val nullability: KtTypeNullability get() = withValidityAssertion { KtTypeNullability.create(coneType.isNullable) } override fun asString(): String = withValidityAssertion { coneType.render() //todo @@ -97,6 +98,8 @@ internal class KtFirTypeParameterType( ?: error("Type parameter ${coneType.lookupTag} was not found") } + override val nullability: KtTypeNullability get() = withValidityAssertion { KtTypeNullability.create(coneType.isNullable) } + override fun asString(): String = withValidityAssertion { coneType.render() //todo }