diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/utils/KtFe10TypeSystemCommonBackendContextForTypeMapping.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/utils/KtFe10TypeSystemCommonBackendContextForTypeMapping.kt index 762496a0dc7..3e4faaf9b9a 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/utils/KtFe10TypeSystemCommonBackendContextForTypeMapping.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/utils/KtFe10TypeSystemCommonBackendContextForTypeMapping.kt @@ -28,11 +28,19 @@ internal class KtFe10TypeSystemCommonBackendContextForTypeMapping( override fun TypeConstructorMarker.isTypeParameter(): Boolean { require(this is TypeConstructor) return when (this) { - is NewTypeVariableConstructor -> true + is NewTypeVariableConstructor -> originalTypeParameter != null else -> declarationDescriptor is TypeParameterDescriptor } } + override fun TypeConstructorMarker.asTypeParameter(): TypeParameterMarker { + require(this is TypeConstructor) + return when (this) { + is NewTypeVariableConstructor -> originalTypeParameter!! + else -> declarationDescriptor as TypeParameterDescriptor + } + } + override fun TypeConstructorMarker.defaultType(): KotlinTypeMarker { require(this is TypeConstructor) val declaration = declarationDescriptor ?: return ErrorUtils.createErrorType("Unresolved declaration descriptor ($this)") @@ -104,4 +112,4 @@ internal class KtFe10TypeSystemCommonBackendContextForTypeMapping( override fun functionNTypeConstructor(n: Int): TypeConstructorMarker { return builtIns.getKFunction(n).typeConstructor } -} \ No newline at end of file +} diff --git a/compiler/backend.common.jvm/src/org/jetbrains/kotlin/types/AbstractTypeMapper.kt b/compiler/backend.common.jvm/src/org/jetbrains/kotlin/types/AbstractTypeMapper.kt index b301c7d6f03..e82bc0c3f8f 100644 --- a/compiler/backend.common.jvm/src/org/jetbrains/kotlin/types/AbstractTypeMapper.kt +++ b/compiler/backend.common.jvm/src/org/jetbrains/kotlin/types/AbstractTypeMapper.kt @@ -122,7 +122,7 @@ object AbstractTypeMapper { } typeConstructor.isTypeParameter() -> { - val typeParameter = typeConstructor as TypeParameterMarker + val typeParameter = typeConstructor.asTypeParameter() return mapType(context, typeParameter.representativeUpperBound(), mode, null).also { asmType -> sw?.writeTypeVariable(typeParameter.getName(), asmType) } diff --git a/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmTypeMapper.kt b/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmTypeMapper.kt index 59896b3c163..b5d934acadb 100644 --- a/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmTypeMapper.kt +++ b/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmTypeMapper.kt @@ -207,6 +207,11 @@ class ConeTypeSystemCommonBackendContextForTypeMapping( return this is ConeTypeParameterLookupTag } + override fun TypeConstructorMarker.asTypeParameter(): TypeParameterMarker { + require(isTypeParameter()) + return this as ConeTypeParameterLookupTag + } + override fun TypeConstructorMarker.defaultType(): ConeSimpleKotlinType { require(this is ConeClassifierLookupTag) return when (this) { diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/IrTypeMapper.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/IrTypeMapper.kt index ade20ad096e..6d53e74ae8f 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/IrTypeMapper.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/IrTypeMapper.kt @@ -223,6 +223,11 @@ private class IrTypeCheckerContextForTypeMapping( return this is IrTypeParameterSymbol } + override fun TypeConstructorMarker.asTypeParameter(): TypeParameterMarker { + require(isTypeParameter()) + return this as IrTypeParameterSymbol + } + override fun TypeConstructorMarker.defaultType(): IrType { return when (this) { is IrClassSymbol -> owner.defaultType diff --git a/core/compiler.common/src/org/jetbrains/kotlin/types/TypeSystemCommonBackendContext.kt b/core/compiler.common/src/org/jetbrains/kotlin/types/TypeSystemCommonBackendContext.kt index fa89644aef7..c85a02391ad 100644 --- a/core/compiler.common/src/org/jetbrains/kotlin/types/TypeSystemCommonBackendContext.kt +++ b/core/compiler.common/src/org/jetbrains/kotlin/types/TypeSystemCommonBackendContext.kt @@ -53,6 +53,7 @@ interface TypeSystemCommonBackendContext : TypeSystemContext { interface TypeSystemCommonBackendContextForTypeMapping : TypeSystemCommonBackendContext { fun TypeConstructorMarker.isTypeParameter(): Boolean + fun TypeConstructorMarker.asTypeParameter(): TypeParameterMarker fun TypeConstructorMarker.defaultType(): KotlinTypeMarker fun TypeConstructorMarker.isScript(): Boolean