Remove all type system-specific inheritors of TypeCheckerState

This commit is contained in:
Dmitriy Novozhilov
2021-08-25 14:20:08 +03:00
parent 3f6738c8bc
commit 7e6e0a3dd6
22 changed files with 193 additions and 173 deletions
@@ -229,7 +229,7 @@ internal class CollectionStubMethodLowering(val context: JvmBackendContext) : Cl
}
private fun createTypeCheckerState(overrideFun: IrSimpleFunction, parentFun: IrSimpleFunction): TypeCheckerState =
IrTypeCheckerState(
createIrTypeCheckerState(
IrTypeSystemContextWithAdditionalAxioms(
context.typeSystem,
overrideFun.typeParameters,
@@ -438,14 +438,14 @@ class IrOverridingUtil(
return if (a == null || b == null) true else isVisibilityMoreSpecific(a, b)
}
private fun IrTypeCheckerState.isSubtypeOf(a: IrType, b: IrType) =
AbstractTypeChecker.isSubtypeOf(this as TypeCheckerState, a, b)
private fun TypeCheckerState.isSubtypeOf(a: IrType, b: IrType) =
AbstractTypeChecker.isSubtypeOf(this, a, b)
private fun IrTypeCheckerState.equalTypes(a: IrType, b: IrType) =
AbstractTypeChecker.equalTypes(this as TypeCheckerState, a, b)
private fun TypeCheckerState.equalTypes(a: IrType, b: IrType) =
AbstractTypeChecker.equalTypes(this, a, b)
private fun createTypeCheckerState(a: List<IrTypeParameter>, b: List<IrTypeParameter>) =
IrTypeCheckerState(IrTypeSystemContextWithAdditionalAxioms(typeSystem, a, b))
private fun createTypeCheckerState(a: List<IrTypeParameter>, b: List<IrTypeParameter>): TypeCheckerState =
createIrTypeCheckerState(IrTypeSystemContextWithAdditionalAxioms(typeSystem, a, b))
private fun isReturnTypeMoreSpecific(
a: IrOverridableMember,
@@ -453,8 +453,8 @@ class IrOverridingUtil(
b: IrOverridableMember,
bReturnType: IrType
): Boolean {
val typeCheckerContext = createTypeCheckerState(a.typeParameters, b.typeParameters)
return typeCheckerContext.isSubtypeOf(aReturnType, bReturnType)
val typeCheckerState = createTypeCheckerState(a.typeParameters, b.typeParameters)
return typeCheckerState.isSubtypeOf(aReturnType, bReturnType)
}
private fun isMoreSpecific(
@@ -674,7 +674,7 @@ class IrOverridingUtil(
}
val typeCheckerState =
IrTypeCheckerState(
createIrTypeCheckerState(
IrTypeSystemContextWithAdditionalAxioms(
typeSystem,
superTypeParameters,
@@ -697,7 +697,7 @@ class IrOverridingUtil(
superValueParameters.forEachIndexed { index, parameter ->
if (!AbstractTypeChecker.equalTypes(
typeCheckerState as TypeCheckerState,
typeCheckerState,
subValueParameters[index].type,
parameter.type
)
@@ -710,7 +710,7 @@ class IrOverridingUtil(
if (checkReturnType) {
if (!AbstractTypeChecker.isSubtypeOf(
typeCheckerState as TypeCheckerState,
typeCheckerState,
subMember.returnType,
superMember.returnType
)
@@ -5,26 +5,17 @@
package org.jetbrains.kotlin.ir.types
import org.jetbrains.kotlin.ir.IrBuiltIns
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
import org.jetbrains.kotlin.types.AbstractTypePreparator
import org.jetbrains.kotlin.types.AbstractTypeRefiner
import org.jetbrains.kotlin.types.TypeCheckerState
import org.jetbrains.kotlin.types.model.KotlinTypeMarker
import org.jetbrains.kotlin.types.model.SimpleTypeMarker
open class IrTypeCheckerState(override val typeSystemContext: IrTypeSystemContext): TypeCheckerState() {
override val kotlinTypePreparator: AbstractTypePreparator
get() = AbstractTypePreparator.Default
override val kotlinTypeRefiner: AbstractTypeRefiner
get() = AbstractTypeRefiner.Default
val irBuiltIns: IrBuiltIns get() = typeSystemContext.irBuiltIns
override val isErrorTypeEqualsToAnything get() = false
override val isStubTypeEqualsToAnything get() = false
override val allowedTypeVariable: Boolean
get() = false
fun createIrTypeCheckerState(typeSystemContext: IrTypeSystemContext): TypeCheckerState {
return TypeCheckerState(
isErrorTypeEqualsToAnything = false,
isStubTypeEqualsToAnything = false,
allowedTypeVariable = false,
typeSystemContext = typeSystemContext,
kotlinTypePreparator = AbstractTypePreparator.Default,
kotlinTypeRefiner = AbstractTypeRefiner.Default
)
}
@@ -504,7 +504,7 @@ interface IrTypeSystemContext : TypeSystemContext, TypeSystemCommonSuperTypesCon
override fun newTypeCheckerState(
errorTypesEqualToAnything: Boolean,
stubTypesEqualToAnything: Boolean
): TypeCheckerState = IrTypeCheckerState(this)
): TypeCheckerState = createIrTypeCheckerState(this)
override fun KotlinTypeMarker.isUninferredParameter(): Boolean = false
override fun KotlinTypeMarker.withNullability(nullable: Boolean): KotlinTypeMarker {
@@ -30,7 +30,7 @@ fun IrType.isSubtypeOfClass(superClass: IrClassSymbol): Boolean =
this is IrSimpleType && classifier.isSubtypeOfClass(superClass)
fun IrType.isSubtypeOf(superType: IrType, typeSystem: IrTypeSystemContext): Boolean =
AbstractTypeChecker.isSubtypeOf(IrTypeCheckerState(typeSystem), this, superType)
AbstractTypeChecker.isSubtypeOf(createIrTypeCheckerState(typeSystem), this, superType)
fun IrType.isNullable(): Boolean =
when (this) {