Minor: generify check for sam conversions
This commit is contained in:
+11
-8
@@ -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
|
||||
}
|
||||
}
|
||||
+1
-3
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user