[K2] Disappeared UNSUPPORTED
Forbid callable reference to coroutineContext ^KT-59881
This commit is contained in:
committed by
Space Team
parent
daac8603d0
commit
7787b53b4a
+17
-1
@@ -44,7 +44,12 @@ object FirSuspendCallChecker : FirQualifiedAccessExpressionChecker() {
|
|||||||
) {
|
) {
|
||||||
checkSuspendModifierForm(expression, reference, symbol, context, reporter)
|
checkSuspendModifierForm(expression, reference, symbol, context, reporter)
|
||||||
}
|
}
|
||||||
if (reference is FirResolvedCallableReference) return
|
|
||||||
|
if (reference is FirResolvedCallableReference) {
|
||||||
|
checkCallableReference(expression, symbol, reporter, context)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
when (symbol) {
|
when (symbol) {
|
||||||
is FirNamedFunctionSymbol -> if (!symbol.isSuspend) return
|
is FirNamedFunctionSymbol -> if (!symbol.isSuspend) return
|
||||||
is FirPropertySymbol -> if (symbol.callableId != StandardClassIds.Callables.coroutineContext) return
|
is FirPropertySymbol -> if (symbol.callableId != StandardClassIds.Callables.coroutineContext) return
|
||||||
@@ -260,6 +265,17 @@ object FirSuspendCallChecker : FirQualifiedAccessExpressionChecker() {
|
|||||||
calledDeclarationSymbol.resolvedReceiverTypeRef?.coneType,
|
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 {
|
private enum class SuspendCallArgumentKind {
|
||||||
|
|||||||
-12
@@ -1,12 +0,0 @@
|
|||||||
// SKIP_TXT
|
|
||||||
import kotlin.coroutines.coroutineContext
|
|
||||||
|
|
||||||
val c = ::coroutineContext
|
|
||||||
|
|
||||||
fun test() {
|
|
||||||
c()
|
|
||||||
}
|
|
||||||
|
|
||||||
suspend fun test2() {
|
|
||||||
c()
|
|
||||||
}
|
|
||||||
+1
@@ -1,3 +1,4 @@
|
|||||||
|
// FIR_IDENTICAL
|
||||||
// SKIP_TXT
|
// SKIP_TXT
|
||||||
import kotlin.coroutines.coroutineContext
|
import kotlin.coroutines.coroutineContext
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user