Minor: generify check for sam conversions
This commit is contained in:
+11
-8
@@ -6,6 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.resolve.calls.components
|
package org.jetbrains.kotlin.resolve.calls.components
|
||||||
|
|
||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||||
|
import org.jetbrains.kotlin.config.LanguageFeature
|
||||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||||
import org.jetbrains.kotlin.container.DefaultImplementation
|
import org.jetbrains.kotlin.container.DefaultImplementation
|
||||||
import org.jetbrains.kotlin.descriptors.CallableDescriptor
|
import org.jetbrains.kotlin.descriptors.CallableDescriptor
|
||||||
@@ -76,17 +77,19 @@ interface KotlinResolutionCallbacks {
|
|||||||
fun disableContractsIfNecessary(resolvedAtom: ResolvedCallAtom)
|
fun disableContractsIfNecessary(resolvedAtom: ResolvedCallAtom)
|
||||||
}
|
}
|
||||||
|
|
||||||
@DefaultImplementation(impl = SamConversionOracle.Empty::class)
|
@DefaultImplementation(impl = SamConversionOracleDefault::class)
|
||||||
interface SamConversionOracle {
|
interface SamConversionOracle {
|
||||||
fun shouldRunSamConversionForFunction(candidate: CallableDescriptor): Boolean
|
fun shouldRunSamConversionForFunction(candidate: CallableDescriptor): Boolean
|
||||||
|
|
||||||
fun isPossibleSamType(samType: KotlinType): Boolean
|
fun isPossibleSamType(samType: KotlinType): Boolean
|
||||||
|
}
|
||||||
|
|
||||||
object Empty : SamConversionOracle {
|
class SamConversionOracleDefault(private val languageVersionSettings: LanguageVersionSettings) : SamConversionOracle {
|
||||||
override fun shouldRunSamConversionForFunction(candidate: CallableDescriptor): Boolean = false
|
override fun shouldRunSamConversionForFunction(candidate: CallableDescriptor): Boolean {
|
||||||
override fun isPossibleSamType(samType: KotlinType): Boolean {
|
return languageVersionSettings.supportsFeature(LanguageFeature.SamConversionForKotlinFunctions)
|
||||||
val descriptor = samType.constructor.declarationDescriptor
|
}
|
||||||
return descriptor is ClassDescriptor && descriptor.isFun
|
|
||||||
}
|
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)
|
!callComponents.languageVersionSettings.supportsFeature(LanguageFeature.ProhibitVarargAsArrayAfterSamArgument)
|
||||||
|
|
||||||
if (generatingAdditionalSamCandidateIsEnabled) return null
|
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) {
|
val argumentIsFunctional = when (argument) {
|
||||||
is SimpleKotlinCallArgument -> argument.receiver.stableType.isFunctionType
|
is SimpleKotlinCallArgument -> argument.receiver.stableType.isFunctionType
|
||||||
|
|||||||
Reference in New Issue
Block a user