Remove all type system dependent methods from TypeCheckerState

This commit is contained in:
Dmitriy Novozhilov
2021-08-25 13:43:01 +03:00
parent e07512a847
commit 3f6738c8bc
11 changed files with 71 additions and 69 deletions
@@ -22,22 +22,9 @@ open class IrTypeCheckerState(override val typeSystemContext: IrTypeSystemContex
val irBuiltIns: IrBuiltIns get() = typeSystemContext.irBuiltIns
override fun substitutionSupertypePolicy(type: SimpleTypeMarker): SupertypesPolicy.DoCustomTransform {
require(type is IrSimpleType)
val parameters = extractTypeParameters((type.classifier as IrClassSymbol).owner).map { it.symbol }
val typeSubstitutor = IrTypeSubstitutor(parameters, type.arguments, irBuiltIns)
return object : SupertypesPolicy.DoCustomTransform() {
override fun transformType(state: TypeCheckerState, type: KotlinTypeMarker): SimpleTypeMarker {
require(type is IrType)
return typeSubstitutor.substitute(type) as IrSimpleType
}
}
}
override val isErrorTypeEqualsToAnything get() = false
override val isStubTypeEqualsToAnything get() = false
override val KotlinTypeMarker.isAllowedTypeVariable: Boolean
override val allowedTypeVariable: Boolean
get() = false
}
@@ -528,6 +528,23 @@ interface IrTypeSystemContext : TypeSystemContext, TypeSystemCommonSuperTypesCon
override fun SimpleTypeMarker.makeSimpleTypeDefinitelyNotNullOrNotNull(): SimpleTypeMarker {
error("makeSimpleTypeDefinitelyNotNullOrNotNull is not yet supported in IR")
}
override fun substitutionSupertypePolicy(type: SimpleTypeMarker): TypeCheckerState.SupertypesPolicy {
require(type is IrSimpleType)
val parameters = extractTypeParameters((type.classifier as IrClassSymbol).owner).map { it.symbol }
val typeSubstitutor = IrTypeSubstitutor(parameters, type.arguments, irBuiltIns)
return object : TypeCheckerState.SupertypesPolicy.DoCustomTransform() {
override fun transformType(state: TypeCheckerState, type: KotlinTypeMarker): SimpleTypeMarker {
require(type is IrType)
return typeSubstitutor.substitute(type) as IrSimpleType
}
}
}
override fun KotlinTypeMarker.isTypeVariableType(): Boolean {
return false
}
}
fun extractTypeParameters(parent: IrDeclarationParent): List<IrTypeParameter> {