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
@@ -566,20 +566,8 @@ interface ConeTypeContext : TypeSystemContext, TypeSystemOptimizationContext, Ty
private fun TypeConstructorMarker.unknownConstructorError(): Nothing {
error("Unknown type constructor: ${this::class}")
}
}
class ConeTypeCheckerState(
override val isErrorTypeEqualsToAnything: Boolean,
override val isStubTypeEqualsToAnything: Boolean,
override val typeSystemContext: ConeInferenceContext,
override val kotlinTypePreparator: ConeTypePreparator = ConeTypePreparator(typeSystemContext.session),
) : TypeCheckerState() {
override val kotlinTypeRefiner: AbstractTypeRefiner
get() = AbstractTypeRefiner.Default
val session: FirSession = typeSystemContext.session
override fun substitutionSupertypePolicy(type: SimpleTypeMarker): SupertypesPolicy = with(typeSystemContext) {
override fun substitutionSupertypePolicy(type: SimpleTypeMarker): TypeCheckerState.SupertypesPolicy {
if (type.argumentsCount() == 0) return LowerIfFlexible
require(type is ConeKotlinType)
val declaration = when (type) {
@@ -607,6 +595,23 @@ class ConeTypeCheckerState(
}
}
override val KotlinTypeMarker.isAllowedTypeVariable: Boolean
get() = this is ConeKotlinType && this is ConeTypeVariableType
override fun KotlinTypeMarker.isTypeVariableType(): Boolean {
return this is ConeTypeVariableType
}
}
class ConeTypeCheckerState(
override val isErrorTypeEqualsToAnything: Boolean,
override val isStubTypeEqualsToAnything: Boolean,
override val typeSystemContext: ConeInferenceContext,
override val kotlinTypePreparator: ConeTypePreparator = ConeTypePreparator(typeSystemContext.session),
) : TypeCheckerState() {
override val kotlinTypeRefiner: AbstractTypeRefiner
get() = AbstractTypeRefiner.Default
val session: FirSession = typeSystemContext.session
override val allowedTypeVariable: Boolean
get() = true
}
@@ -44,7 +44,7 @@ class FirCorrespondingSupertypesCache(private val session: FirSession) : FirSess
if (type.typeArguments.isEmpty()) return resultTypes
val capturedType = captureType(type, typeCheckerState.typeSystemContext)
val substitutionSupertypePolicy = typeCheckerState.substitutionSupertypePolicy(capturedType)
val substitutionSupertypePolicy = typeCheckerState.typeSystemContext.substitutionSupertypePolicy(capturedType)
return resultTypes.map {
substitutionSupertypePolicy.transformType(typeCheckerState, it) as ConeClassLikeType
}
@@ -97,7 +97,7 @@ class FirCorrespondingSupertypesCache(private val session: FirSession) : FirSess
TypeCheckerState.SupertypesPolicy.LowerIfFlexible
}
else -> {
state.substitutionSupertypePolicy(captured)
state.typeSystemContext.substitutionSupertypePolicy(captured)
}
}
}