[FIR] Return error type from common super type if it present
This commit is contained in:
@@ -30,6 +30,8 @@ import kotlin.contracts.ExperimentalContracts
|
||||
import kotlin.contracts.contract
|
||||
|
||||
interface ClassicTypeSystemContext : TypeSystemInferenceExtensionContext, TypeSystemCommonBackendContext {
|
||||
override val isErrorTypeAllowed: Boolean get() = true
|
||||
|
||||
override fun TypeConstructorMarker.isDenotable(): Boolean {
|
||||
require(this is TypeConstructor, this::errorMessage)
|
||||
return this.isDenotable
|
||||
@@ -56,6 +58,10 @@ interface ClassicTypeSystemContext : TypeSystemInferenceExtensionContext, TypeSy
|
||||
return this.isError
|
||||
}
|
||||
|
||||
override fun TypeConstructorMarker.toErrorType(): SimpleTypeMarker {
|
||||
throw IllegalStateException("Should not be called")
|
||||
}
|
||||
|
||||
override fun KotlinTypeMarker.isUninferredParameter(): Boolean {
|
||||
require(this is KotlinType, this::errorMessage)
|
||||
return ErrorUtils.isUninferredParameter(this)
|
||||
@@ -469,6 +475,10 @@ interface ClassicTypeSystemContext : TypeSystemInferenceExtensionContext, TypeSy
|
||||
return IntegerLiteralTypeConstructor.findCommonSuperType(explicitSupertypes)
|
||||
}
|
||||
|
||||
override fun TypeConstructorMarker.isError(): Boolean {
|
||||
throw IllegalStateException("Should not be called")
|
||||
}
|
||||
|
||||
override fun TypeConstructorMarker.getApproximatedIntegerLiteralType(): KotlinTypeMarker {
|
||||
require(this is IntegerLiteralTypeConstructor, this::errorMessage)
|
||||
return this.getApproximatedType().unwrap()
|
||||
|
||||
@@ -67,6 +67,11 @@ interface TypeCheckerProviderContext {
|
||||
}
|
||||
|
||||
interface TypeSystemCommonSuperTypesContext : TypeSystemContext, TypeSystemTypeFactoryContext, TypeCheckerProviderContext {
|
||||
/*
|
||||
* If set in false then if there is an error type in input types list of `commonSuperType` it will be return
|
||||
* That flag is needed for FIR where there are a problems with recursive class hierarchies
|
||||
*/
|
||||
val isErrorTypeAllowed: Boolean
|
||||
|
||||
fun KotlinTypeMarker.anySuperTypeConstructor(predicate: (TypeConstructorMarker) -> Boolean) =
|
||||
newBaseTypeCheckerContext(false).anySupertype(lowerBoundIfFlexible(), {
|
||||
@@ -84,6 +89,12 @@ interface TypeSystemCommonSuperTypesContext : TypeSystemContext, TypeSystemTypeF
|
||||
}
|
||||
|
||||
fun findCommonIntegerLiteralTypesSuperType(explicitSupertypes: List<SimpleTypeMarker>): SimpleTypeMarker?
|
||||
|
||||
/*
|
||||
* Converts error type constructor to error type
|
||||
* Used only in FIR
|
||||
*/
|
||||
fun TypeConstructorMarker.toErrorType(): SimpleTypeMarker
|
||||
}
|
||||
|
||||
interface TypeSystemInferenceExtensionContextDelegate : TypeSystemInferenceExtensionContext
|
||||
@@ -151,6 +162,7 @@ interface TypeSystemContext : TypeSystemOptimizationContext {
|
||||
fun KotlinTypeMarker.asFlexibleType(): FlexibleTypeMarker?
|
||||
|
||||
fun KotlinTypeMarker.isError(): Boolean
|
||||
fun TypeConstructorMarker.isError(): Boolean
|
||||
fun KotlinTypeMarker.isUninferredParameter(): Boolean
|
||||
|
||||
fun FlexibleTypeMarker.asDynamicType(): DynamicTypeMarker?
|
||||
|
||||
Reference in New Issue
Block a user