IrTypes: star projections
Initial implementation, mostly to avoid infinite recursion in cases such as 'Enum<*>'.
This commit is contained in:
@@ -20,10 +20,14 @@ interface IrDynamicType : IrType
|
|||||||
interface IrSimpleType : IrType {
|
interface IrSimpleType : IrType {
|
||||||
val classifier: IrClassifierSymbol
|
val classifier: IrClassifierSymbol
|
||||||
val hasQuestionMark: Boolean
|
val hasQuestionMark: Boolean
|
||||||
val arguments: List<IrTypeProjection>
|
val arguments: List<IrTypeArgument>
|
||||||
}
|
}
|
||||||
|
|
||||||
interface IrTypeProjection {
|
interface IrTypeArgument
|
||||||
|
|
||||||
|
interface IrStarProjection : IrTypeArgument
|
||||||
|
|
||||||
|
interface IrTypeProjection : IrTypeArgument {
|
||||||
val variance: Variance
|
val variance: Variance
|
||||||
val type: IrType
|
val type: IrType
|
||||||
}
|
}
|
||||||
@@ -16,7 +16,7 @@ class IrSimpleTypeImpl(
|
|||||||
kotlinType: KotlinType?,
|
kotlinType: KotlinType?,
|
||||||
override val classifier: IrClassifierSymbol,
|
override val classifier: IrClassifierSymbol,
|
||||||
override val hasQuestionMark: Boolean,
|
override val hasQuestionMark: Boolean,
|
||||||
override val arguments: List<IrTypeProjection>,
|
override val arguments: List<IrTypeArgument>,
|
||||||
annotations: List<IrCall>,
|
annotations: List<IrCall>,
|
||||||
variance: Variance
|
variance: Variance
|
||||||
) : IrTypeBase(kotlinType, annotations, variance), IrSimpleType, IrTypeProjection {
|
) : IrTypeBase(kotlinType, annotations, variance), IrSimpleType, IrTypeProjection {
|
||||||
@@ -24,7 +24,7 @@ class IrSimpleTypeImpl(
|
|||||||
constructor(
|
constructor(
|
||||||
classifier: IrClassifierSymbol,
|
classifier: IrClassifierSymbol,
|
||||||
hasQuestionMark: Boolean,
|
hasQuestionMark: Boolean,
|
||||||
arguments: List<IrTypeProjection>,
|
arguments: List<IrTypeArgument>,
|
||||||
annotations: List<IrCall>
|
annotations: List<IrCall>
|
||||||
) : this(null, classifier, hasQuestionMark, arguments, annotations, Variance.INVARIANT)
|
) : this(null, classifier, hasQuestionMark, arguments, annotations, Variance.INVARIANT)
|
||||||
|
|
||||||
@@ -32,7 +32,7 @@ class IrSimpleTypeImpl(
|
|||||||
kotlinType: KotlinType?,
|
kotlinType: KotlinType?,
|
||||||
classifier: IrClassifierSymbol,
|
classifier: IrClassifierSymbol,
|
||||||
hasQuestionMark: Boolean,
|
hasQuestionMark: Boolean,
|
||||||
arguments: List<IrTypeProjection>,
|
arguments: List<IrTypeArgument>,
|
||||||
annotations: List<IrCall>
|
annotations: List<IrCall>
|
||||||
) : this(kotlinType, classifier, hasQuestionMark, arguments, annotations, Variance.INVARIANT)
|
) : this(kotlinType, classifier, hasQuestionMark, arguments, annotations, Variance.INVARIANT)
|
||||||
|
|
||||||
|
|||||||
@@ -6,10 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.ir.types.impl
|
package org.jetbrains.kotlin.ir.types.impl
|
||||||
|
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrCall
|
import org.jetbrains.kotlin.ir.expressions.IrCall
|
||||||
import org.jetbrains.kotlin.ir.types.IrDynamicType
|
import org.jetbrains.kotlin.ir.types.*
|
||||||
import org.jetbrains.kotlin.ir.types.IrErrorType
|
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
|
||||||
import org.jetbrains.kotlin.ir.types.IrTypeProjection
|
|
||||||
import org.jetbrains.kotlin.types.KotlinType
|
import org.jetbrains.kotlin.types.KotlinType
|
||||||
import org.jetbrains.kotlin.types.Variance
|
import org.jetbrains.kotlin.types.Variance
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
||||||
@@ -38,4 +35,7 @@ class IrDynamicTypeImpl(
|
|||||||
|
|
||||||
|
|
||||||
val IrType.originalKotlinType: KotlinType?
|
val IrType.originalKotlinType: KotlinType?
|
||||||
get() = safeAs<IrTypeBase>()?.kotlinType
|
get() = safeAs<IrTypeBase>()?.kotlinType
|
||||||
|
|
||||||
|
|
||||||
|
object IrStarProjectionImpl : IrStarProjection
|
||||||
@@ -16,6 +16,7 @@ import org.jetbrains.kotlin.ir.types.IrTypeProjection
|
|||||||
import org.jetbrains.kotlin.ir.types.impl.IrDynamicTypeImpl
|
import org.jetbrains.kotlin.ir.types.impl.IrDynamicTypeImpl
|
||||||
import org.jetbrains.kotlin.ir.types.impl.IrErrorTypeImpl
|
import org.jetbrains.kotlin.ir.types.impl.IrErrorTypeImpl
|
||||||
import org.jetbrains.kotlin.ir.types.impl.IrSimpleTypeImpl
|
import org.jetbrains.kotlin.ir.types.impl.IrSimpleTypeImpl
|
||||||
|
import org.jetbrains.kotlin.ir.types.impl.IrStarProjectionImpl
|
||||||
import org.jetbrains.kotlin.types.*
|
import org.jetbrains.kotlin.types.*
|
||||||
import org.jetbrains.kotlin.types.typesApproximation.approximateCapturedTypes
|
import org.jetbrains.kotlin.types.typesApproximation.approximateCapturedTypes
|
||||||
|
|
||||||
@@ -89,8 +90,10 @@ class TypeTranslator(
|
|||||||
|
|
||||||
private fun translateTypeArguments(arguments: List<TypeProjection>) =
|
private fun translateTypeArguments(arguments: List<TypeProjection>) =
|
||||||
arguments.map {
|
arguments.map {
|
||||||
// TODO starProjection
|
if (it.isStarProjection)
|
||||||
translateType(it.type, it.projectionKind)
|
IrStarProjectionImpl
|
||||||
|
else
|
||||||
|
translateType(it.type, it.projectionKind)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user