K2: expand type before isSomeType checks properly

Related to KT-60229
This commit is contained in:
Mikhail Glukhikh
2023-07-13 14:27:48 +02:00
committed by Space Team
parent 51e8a72f47
commit 00b4ae6ae9
30 changed files with 140 additions and 73 deletions
@@ -96,12 +96,3 @@ val FirCallableSymbol<*>.isExtension: Boolean
is FirProperty -> fir.receiverParameter != null
is FirVariable -> false
}
fun FirSimpleFunction.isEquals(): Boolean {
if (name != OperatorNameConventions.EQUALS) return false
if (valueParameters.size != 1) return false
if (contextReceivers.isNotEmpty()) return false
if (receiverParameter != null) return false
val parameter = valueParameters.first()
return parameter.returnTypeRef.isNullableAny
}
@@ -34,15 +34,40 @@ val FirTypeRef.coneType: ConeKotlinType
val FirTypeRef.coneTypeOrNull: ConeKotlinType?
get() = coneTypeSafe()
@RequiresOptIn(
"This type check never expands type aliases. Use with care (probably Ok for expression & constructor types). " +
"Generally this.coneType.fullyExpandedType(session).isSomeType is better"
)
annotation class UnexpandedTypeCheck
@UnexpandedTypeCheck
val FirTypeRef.isAny: Boolean get() = isBuiltinType(StandardClassIds.Any, false)
@UnexpandedTypeCheck
val FirTypeRef.isNullableAny: Boolean get() = isBuiltinType(StandardClassIds.Any, true)
@UnexpandedTypeCheck
val FirTypeRef.isNothing: Boolean get() = isBuiltinType(StandardClassIds.Nothing, false)
@UnexpandedTypeCheck
val FirTypeRef.isNullableNothing: Boolean get() = isBuiltinType(StandardClassIds.Nothing, true)
@UnexpandedTypeCheck
val FirTypeRef.isUnit: Boolean get() = isBuiltinType(StandardClassIds.Unit, false)
@UnexpandedTypeCheck
val FirTypeRef.isBoolean: Boolean get() = isBuiltinType(StandardClassIds.Boolean, false)
@UnexpandedTypeCheck
val FirTypeRef.isInt: Boolean get() = isBuiltinType(StandardClassIds.Int, false)
@UnexpandedTypeCheck
val FirTypeRef.isString: Boolean get() = isBuiltinType(StandardClassIds.String, false)
@UnexpandedTypeCheck
val FirTypeRef.isEnum: Boolean get() = isBuiltinType(StandardClassIds.Enum, false)
@UnexpandedTypeCheck
val FirTypeRef.isArrayType: Boolean
get() =
isBuiltinType(StandardClassIds.Array, false)