Prohibit callable references to suspend functions

#KT-15662 Fixed
This commit is contained in:
Denis Zharkov
2017-01-12 10:39:48 +03:00
parent 695b6d9e67
commit f12409504f
4 changed files with 62 additions and 0 deletions
@@ -50,6 +50,7 @@ import org.jetbrains.kotlin.resolve.source.toSourceElement
import org.jetbrains.kotlin.types.*
import org.jetbrains.kotlin.types.TypeUtils.NO_EXPECTED_TYPE
import org.jetbrains.kotlin.types.expressions.typeInfoFactory.createTypeInfo
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
import java.lang.UnsupportedOperationException
import java.util.*
import javax.inject.Inject
@@ -574,9 +575,22 @@ class DoubleColonExpressionResolver(
val resolutionResults =
resolveCallableReferenceRHS(expression, lhsResult, context, resolveArgumentsMode)
reportUnsupportedReferenceToSuspendFunction(resolutionResults, expression, context)
return lhsResult to resolutionResults
}
private fun reportUnsupportedReferenceToSuspendFunction(
resolutionResults: OverloadResolutionResults<CallableDescriptor>?,
expression: KtCallableReferenceExpression,
context: ExpressionTypingContext
) {
if (resolutionResults?.isSingleResult == true &&
resolutionResults.resultingDescriptor.safeAs<FunctionDescriptor>()?.isSuspend == true) {
context.trace.report(UNSUPPORTED.on(expression.callableReference, "Callable references to suspend functions"))
}
}
private fun tryResolveRHSWithReceiver(
traceTitle: String,
receiver: Receiver?,