Minor. Replace manual checkCoroutineBuilderCall with BuilderFunctionsCallChecker
This commit is contained in:
@@ -68,7 +68,8 @@ private val DEFAULT_DECLARATION_CHECKERS = listOf(
|
||||
|
||||
private val DEFAULT_CALL_CHECKERS = listOf(CapturingInClosureChecker(), InlineCheckerWrapper(), ReifiedTypeParameterSubstitutionChecker(),
|
||||
SafeCallChecker(), InvokeConventionChecker(), CallReturnsArrayOfNothingChecker(),
|
||||
ConstructorHeaderCallChecker, ProtectedConstructorCallChecker, CoroutineSuspendCallChecker)
|
||||
ConstructorHeaderCallChecker, ProtectedConstructorCallChecker, CoroutineSuspendCallChecker,
|
||||
BuilderFunctionsCallChecker)
|
||||
private val DEFAULT_TYPE_CHECKERS = emptyList<AdditionalTypeChecker>()
|
||||
private val DEFAULT_VALIDATORS = listOf(DeprecatedSymbolValidator(), OperatorValidator(), InfixValidator())
|
||||
|
||||
|
||||
@@ -28,7 +28,6 @@ import org.jetbrains.kotlin.resolve.calls.callResolverUtil.ResolveArgumentsMode.
|
||||
import org.jetbrains.kotlin.resolve.calls.callResolverUtil.getEffectiveExpectedType
|
||||
import org.jetbrains.kotlin.resolve.calls.callResolverUtil.isInvokeCallOnVariable
|
||||
import org.jetbrains.kotlin.resolve.calls.checkers.CallChecker
|
||||
import org.jetbrains.kotlin.resolve.calls.checkers.checkCoroutineBuilderCall
|
||||
import org.jetbrains.kotlin.resolve.calls.context.BasicCallResolutionContext
|
||||
import org.jetbrains.kotlin.resolve.calls.context.CallCandidateResolutionContext
|
||||
import org.jetbrains.kotlin.resolve.calls.context.CallPosition
|
||||
@@ -95,7 +94,6 @@ class CallCompleter(
|
||||
symbolUsageValidator.validateCall(resolvedCall, resolvedCall.resultingDescriptor, context.trace, element!!)
|
||||
|
||||
resolveHandleResultCallForCoroutineLambdaExpressions(context, resolvedCall)
|
||||
checkCoroutineBuilderCall(resolvedCall, context, languageFeatureSettings)
|
||||
}
|
||||
|
||||
if (results.isSingleResult && results.resultingCall.status.isSuccess) {
|
||||
|
||||
+13
-12
@@ -40,17 +40,18 @@ object CoroutineSuspendCallChecker : SimpleCallChecker {
|
||||
}
|
||||
}
|
||||
|
||||
// It can't be another CallChecker implementation because of 3rd parameter
|
||||
fun checkCoroutineBuilderCall(
|
||||
resolvedCall: ResolvedCall<*>,
|
||||
context: BasicCallResolutionContext,
|
||||
languageFeatureSettings: LanguageFeatureSettings
|
||||
) {
|
||||
val descriptor = resolvedCall.candidateDescriptor as? FunctionDescriptor ?: return
|
||||
if (descriptor.valueParameters.any { it.isCoroutine }
|
||||
&& !languageFeatureSettings.supportsFeature(LanguageFeature.Coroutines)) {
|
||||
context.trace.report(
|
||||
Errors.UNSUPPORTED_FEATURE.on(
|
||||
resolvedCall.call.calleeExpression ?: resolvedCall.call.callElement, LanguageFeature.Coroutines))
|
||||
object BuilderFunctionsCallChecker : CallChecker {
|
||||
override fun check(
|
||||
resolvedCall: ResolvedCall<*>,
|
||||
context: BasicCallResolutionContext,
|
||||
languageFeatureSettings: LanguageFeatureSettings
|
||||
) {
|
||||
val descriptor = resolvedCall.candidateDescriptor as? FunctionDescriptor ?: return
|
||||
if (descriptor.valueParameters.any { it.isCoroutine }
|
||||
&& !languageFeatureSettings.supportsFeature(LanguageFeature.Coroutines)) {
|
||||
context.trace.report(
|
||||
Errors.UNSUPPORTED_FEATURE.on(
|
||||
resolvedCall.call.calleeExpression ?: resolvedCall.call.callElement, LanguageFeature.Coroutines))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user