Delegate refineType and prepareType in TypeCheckerState to special services

This is needed to add ability to create type system independent TypeCheckerState
This commit is contained in:
Dmitriy Novozhilov
2021-08-25 13:14:04 +03:00
parent 8b5548df49
commit e07512a847
50 changed files with 89 additions and 102 deletions
@@ -10,10 +10,7 @@ import org.jetbrains.kotlin.config.LanguageVersionSettings
import org.jetbrains.kotlin.resolve.calls.inference.ConstraintSystemOperation
import org.jetbrains.kotlin.resolve.calls.inference.model.*
import org.jetbrains.kotlin.resolve.calls.inference.model.ConstraintKind.*
import org.jetbrains.kotlin.types.AbstractTypeApproximator
import org.jetbrains.kotlin.types.AbstractTypeChecker
import org.jetbrains.kotlin.types.TypeCheckerState
import org.jetbrains.kotlin.types.TypeApproximatorConfiguration
import org.jetbrains.kotlin.types.*
import org.jetbrains.kotlin.types.model.*
import org.jetbrains.kotlin.utils.SmartList
import kotlin.math.max
@@ -219,6 +216,12 @@ class ConstraintInjector(
private inner class TypeCheckerStateForConstraintInjector(val c: Context, val position: IncorporationConstraintPosition) :
TypeCheckerStateForConstraintSystem(c), ConstraintIncorporator.Context, TypeSystemInferenceExtensionContext by c {
override val kotlinTypePreparator: AbstractTypePreparator
get() = baseState.kotlinTypePreparator
override val kotlinTypeRefiner: AbstractTypeRefiner
get() = baseState.kotlinTypeRefiner
// We use `var` intentionally to avoid extra allocations as this property is quite "hot"
private var possibleNewConstraints: MutableList<Pair<TypeVariableMarker, Constraint>>? = null
@@ -251,14 +254,6 @@ class ConstraintInjector(
return baseState.substitutionSupertypePolicy(type)
}
override fun refineType(type: KotlinTypeMarker): KotlinTypeMarker {
return with(constraintIncorporator.utilContext) {
type.refineType()
}
}
override fun prepareType(type: KotlinTypeMarker) = baseState.prepareType(type)
fun runIsSubtypeOf(
lowerType: KotlinTypeMarker,
upperType: KotlinTypeMarker,