[K2] Disappeared UNSUPPORTED

Forbid callable reference to coroutineContext

^KT-59881
This commit is contained in:
Anastasia.Nekrasova
2023-11-23 14:56:42 +02:00
committed by Space Team
parent daac8603d0
commit 7787b53b4a
3 changed files with 18 additions and 13 deletions
@@ -44,7 +44,12 @@ object FirSuspendCallChecker : FirQualifiedAccessExpressionChecker() {
) {
checkSuspendModifierForm(expression, reference, symbol, context, reporter)
}
if (reference is FirResolvedCallableReference) return
if (reference is FirResolvedCallableReference) {
checkCallableReference(expression, symbol, reporter, context)
return
}
when (symbol) {
is FirNamedFunctionSymbol -> if (!symbol.isSuspend) return
is FirPropertySymbol -> if (symbol.callableId != StandardClassIds.Callables.coroutineContext) return
@@ -260,6 +265,17 @@ object FirSuspendCallChecker : FirQualifiedAccessExpressionChecker() {
calledDeclarationSymbol.resolvedReceiverTypeRef?.coneType,
)
}
private fun checkCallableReference(
expression: FirQualifiedAccessExpression,
symbol: FirCallableSymbol<*>,
reporter: DiagnosticReporter,
context: CheckerContext,
) {
if (symbol.callableId == StandardClassIds.Callables.coroutineContext) {
reporter.reportOn(expression.calleeReference.source, FirErrors.UNSUPPORTED, "Callable reference to suspend property", context)
}
}
}
private enum class SuspendCallArgumentKind {
@@ -1,12 +0,0 @@
// SKIP_TXT
import kotlin.coroutines.coroutineContext
val c = ::coroutineContext
fun test() {
c()
}
suspend fun test2() {
c()
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// SKIP_TXT
import kotlin.coroutines.coroutineContext