From 6c4f5ea9c9a3e667e2118a7138c2f7eb14fc99be Mon Sep 17 00:00:00 2001 From: Mikhail Zarechenskiy Date: Mon, 27 Jan 2020 10:01:20 +0300 Subject: [PATCH] Minor: generify check for sam conversions --- .../calls/components/ExternalComponents.kt | 19 +++++++++++-------- .../calls/components/ResolutionParts.kt | 4 +--- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/components/ExternalComponents.kt b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/components/ExternalComponents.kt index 6a349cbb27b..45507f7db41 100644 --- a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/components/ExternalComponents.kt +++ b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/components/ExternalComponents.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.resolve.calls.components import org.jetbrains.kotlin.builtins.KotlinBuiltIns +import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.container.DefaultImplementation import org.jetbrains.kotlin.descriptors.CallableDescriptor @@ -76,17 +77,19 @@ interface KotlinResolutionCallbacks { fun disableContractsIfNecessary(resolvedAtom: ResolvedCallAtom) } -@DefaultImplementation(impl = SamConversionOracle.Empty::class) +@DefaultImplementation(impl = SamConversionOracleDefault::class) interface SamConversionOracle { fun shouldRunSamConversionForFunction(candidate: CallableDescriptor): Boolean - fun isPossibleSamType(samType: KotlinType): Boolean +} - object Empty : SamConversionOracle { - override fun shouldRunSamConversionForFunction(candidate: CallableDescriptor): Boolean = false - override fun isPossibleSamType(samType: KotlinType): Boolean { - val descriptor = samType.constructor.declarationDescriptor - return descriptor is ClassDescriptor && descriptor.isFun - } +class SamConversionOracleDefault(private val languageVersionSettings: LanguageVersionSettings) : SamConversionOracle { + override fun shouldRunSamConversionForFunction(candidate: CallableDescriptor): Boolean { + return languageVersionSettings.supportsFeature(LanguageFeature.SamConversionForKotlinFunctions) + } + + override fun isPossibleSamType(samType: KotlinType): Boolean { + val descriptor = samType.constructor.declarationDescriptor + return descriptor is ClassDescriptor && descriptor.isFun } } \ No newline at end of file diff --git a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/components/ResolutionParts.kt b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/components/ResolutionParts.kt index 98e3b6c7cfd..0e799d1bd90 100644 --- a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/components/ResolutionParts.kt +++ b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/components/ResolutionParts.kt @@ -312,9 +312,7 @@ private fun KotlinResolutionCandidate.getExpectedTypeWithSAMConversion( !callComponents.languageVersionSettings.supportsFeature(LanguageFeature.ProhibitVarargAsArrayAfterSamArgument) if (generatingAdditionalSamCandidateIsEnabled) return null - if (!callComponents.languageVersionSettings.supportsFeature(LanguageFeature.SamConversionForKotlinFunctions)) { - if (!callComponents.samConversionOracle.shouldRunSamConversionForFunction(resolvedCall.candidateDescriptor)) return null - } + if (!callComponents.samConversionOracle.shouldRunSamConversionForFunction(resolvedCall.candidateDescriptor)) return null val argumentIsFunctional = when (argument) { is SimpleKotlinCallArgument -> argument.receiver.stableType.isFunctionType