Remove all type system dependent methods from TypeCheckerState
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
+2
-2
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user