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
@@ -31,6 +31,7 @@ import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.FqNameUnsafe
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.name.StandardClassIds
import org.jetbrains.kotlin.types.AbstractTypeRefiner
import org.jetbrains.kotlin.types.TypeCheckerState
import org.jetbrains.kotlin.types.TypeCheckerState.SupertypesPolicy.DoCustomTransform
import org.jetbrains.kotlin.types.TypeCheckerState.SupertypesPolicy.LowerIfFlexible
@@ -571,8 +572,10 @@ class ConeTypeCheckerState(
override val isErrorTypeEqualsToAnything: Boolean,
override val isStubTypeEqualsToAnything: Boolean,
override val typeSystemContext: ConeInferenceContext,
val kotlinTypePreparator: ConeTypePreparator = ConeTypePreparator.getDefault(typeSystemContext.session),
override val kotlinTypePreparator: ConeTypePreparator = ConeTypePreparator(typeSystemContext.session),
) : TypeCheckerState() {
override val kotlinTypeRefiner: AbstractTypeRefiner
get() = AbstractTypeRefiner.Default
val session: FirSession = typeSystemContext.session
@@ -604,14 +607,6 @@ class ConeTypeCheckerState(
}
}
override fun refineType(type: KotlinTypeMarker): KotlinTypeMarker {
return kotlinTypePreparator.prepareType(type)
}
override fun prepareType(type: KotlinTypeMarker): KotlinTypeMarker {
return kotlinTypePreparator.prepareType(type)
}
override val KotlinTypeMarker.isAllowedTypeVariable: Boolean
get() = this is ConeKotlinType && this is ConeTypeVariableType
}
@@ -10,7 +10,7 @@ import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
import org.jetbrains.kotlin.types.AbstractTypePreparator
import org.jetbrains.kotlin.types.model.KotlinTypeMarker
abstract class ConeTypePreparator(val session: FirSession) : AbstractTypePreparator {
class ConeTypePreparator(val session: FirSession) : AbstractTypePreparator() {
override fun prepareType(type: KotlinTypeMarker): KotlinTypeMarker {
return when (type) {
is ConeClassLikeType -> type.fullyExpandedType(session)
@@ -26,8 +26,4 @@ abstract class ConeTypePreparator(val session: FirSession) : AbstractTypePrepara
else -> type
}
}
companion object {
fun getDefault(session: FirSession) = object : ConeTypePreparator(session) {}
}
}
}