PSI2IR: Generate IMPLICIT_NOTNULL casts for platform type values

This commit is contained in:
Dmitry Petrov
2019-11-22 14:15:08 +03:00
parent dabf6376db
commit 20fb519f1a
25 changed files with 264 additions and 49 deletions
@@ -32,7 +32,6 @@ import org.jetbrains.kotlin.ir.types.IrType
import org.jetbrains.kotlin.ir.types.impl.originalKotlinType
import org.jetbrains.kotlin.ir.util.TypeTranslator
import org.jetbrains.kotlin.ir.util.coerceToUnitIfNeeded
import org.jetbrains.kotlin.ir.util.render
import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
import org.jetbrains.kotlin.psi2ir.containsNull
import org.jetbrains.kotlin.psi2ir.generators.GeneratorContext
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.ir.types.impl
import org.jetbrains.kotlin.ir.expressions.IrCall
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
import org.jetbrains.kotlin.ir.types.*
import org.jetbrains.kotlin.types.KotlinType
@@ -59,18 +59,18 @@ class TypeTranslator(
?: symbolTable.referenceTypeParameter(typeParameterDescriptor)
fun translateType(kotlinType: KotlinType): IrType =
translateType(kotlinType, Variance.INVARIANT).type
translateType(kotlinType, kotlinType, Variance.INVARIANT).type
private fun translateType(kotlinType: KotlinType, variance: Variance): IrTypeProjection {
private fun translateType(kotlinType: KotlinType, approximatedKotlinType: KotlinType, variance: Variance): IrTypeProjection {
val approximatedType = LegacyTypeApproximation().approximate(kotlinType)
when {
approximatedType.isError ->
return IrErrorTypeImpl(approximatedType, translateTypeAnnotations(approximatedType.annotations), variance)
return IrErrorTypeImpl(approximatedKotlinType, translateTypeAnnotations(approximatedType.annotations), variance)
approximatedType.isDynamic() ->
return IrDynamicTypeImpl(approximatedType, translateTypeAnnotations(approximatedType.annotations), variance)
return IrDynamicTypeImpl(approximatedKotlinType, translateTypeAnnotations(approximatedType.annotations), variance)
approximatedType.isFlexible() ->
return translateType(approximatedType.upperIfFlexible(), variance)
return translateType(approximatedType.upperIfFlexible(), approximatedType, variance)
}
val ktTypeConstructor = approximatedType.constructor
@@ -78,7 +78,7 @@ class TypeTranslator(
?: throw AssertionError("No descriptor for type $approximatedType")
return IrSimpleTypeBuilder().apply {
this.kotlinType = kotlinType
this.kotlinType = approximatedKotlinType
hasQuestionMark = approximatedType.isMarkedNullable
this.variance = variance
this.abbreviation = approximatedType.getAbbreviation()?.toIrTypeAbbreviation()
@@ -154,6 +154,6 @@ class TypeTranslator(
if (it.isStarProjection)
IrStarProjectionImpl
else
translateType(it.type, it.projectionKind)
translateType(it.type, it.type, it.projectionKind)
}
}