From 072abe89cdb6470ec80384210de8fc62f91b67db Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Thu, 9 Jun 2016 13:54:40 +0300 Subject: [PATCH] Minor. Replace manual checkCoroutineBuilderCall with BuilderFunctionsCallChecker --- .../kotlin/resolve/TargetPlatform.kt | 3 ++- .../kotlin/resolve/calls/CallCompleter.kt | 2 -- .../calls/checkers/coroutineCallChecker.kt | 25 ++++++++++--------- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/TargetPlatform.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/TargetPlatform.kt index 0cec76a88d0..c60bbf4ca35 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/TargetPlatform.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/TargetPlatform.kt @@ -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() private val DEFAULT_VALIDATORS = listOf(DeprecatedSymbolValidator(), OperatorValidator(), InfixValidator()) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/CallCompleter.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/CallCompleter.kt index e0605e13b9b..6f7e38e31b3 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/CallCompleter.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/CallCompleter.kt @@ -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) { diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/checkers/coroutineCallChecker.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/checkers/coroutineCallChecker.kt index 7fdb47f5b29..b30dcb6537b 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/checkers/coroutineCallChecker.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/checkers/coroutineCallChecker.kt @@ -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)) + } } }