[PSI2IR] Support DefinitelyNotNull type translation in Psi2Ir

This commit is contained in:
Roman Artemev
2021-10-25 21:16:59 +03:00
committed by TeamCityServer
parent 101afded69
commit 29728efbf7
@@ -20,7 +20,6 @@ import org.jetbrains.kotlin.ir.types.IrType
import org.jetbrains.kotlin.ir.types.IrTypeAbbreviation
import org.jetbrains.kotlin.ir.types.IrTypeProjection
import org.jetbrains.kotlin.ir.types.impl.*
import org.jetbrains.kotlin.resolve.descriptorUtil.module
import org.jetbrains.kotlin.types.*
import org.jetbrains.kotlin.types.typeUtil.replaceArgumentsWithStarProjections
import org.jetbrains.kotlin.types.typesApproximation.approximateCapturedTypes
@@ -45,6 +44,8 @@ abstract class TypeTranslator(
private val erasureStack = Stack<PropertyDescriptor>()
private val supportDefinitelyNotNullTypes: Boolean = languageVersionSettings.supportsFeature(LanguageFeature.DefinitelyNonNullableTypes)
protected abstract fun isTypeAliasAccessibleHere(typeAliasDescriptor: TypeAliasDescriptor): Boolean
fun enterScope(irElement: IrTypeParametersContainer) {
@@ -86,17 +87,20 @@ abstract class TypeTranslator(
?: symbolTable.referenceTypeParameter(originalTypeParameter)
}
fun translateType(kotlinType: KotlinType): IrType =
translateType(kotlinType, Variance.INVARIANT).type
fun translateType(kotlinType: KotlinType): IrType {
return translateType(kotlinType, Variance.INVARIANT).type
}
private fun translateType(kotlinType: KotlinType, variance: Variance): IrTypeProjection {
val approximatedType = approximate(kotlinType)
val approximatedType = approximate(kotlinType.unwrap())
when {
approximatedType.isError ->
return IrErrorTypeImpl(approximatedType, translateTypeAnnotations(approximatedType), variance)
approximatedType.isDynamic() ->
return IrDynamicTypeImpl(approximatedType, translateTypeAnnotations(approximatedType), variance)
supportDefinitelyNotNullTypes && approximatedType is DefinitelyNotNullType ->
return makeTypeProjection(IrDefinitelyNotNullTypeImpl(approximatedType, translateType(approximatedType.original)), variance)
}
val upperType = approximatedType.upperIfFlexible()