Use descriptors for building SAM constructors
It helps to get rid of semantics duplicating and fixes known bugs - SOE in OnlyAbstractMethodFinder.find - type enhancement for SAM constructors #KT-11287 Fixed #KT-11322 Fixed EA-77989 Fixed
This commit is contained in:
+2
-8
@@ -21,24 +21,18 @@ import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
||||
import org.jetbrains.kotlin.load.java.descriptors.JavaClassDescriptor
|
||||
import org.jetbrains.kotlin.load.java.descriptors.SamConstructorDescriptor
|
||||
import org.jetbrains.kotlin.load.java.structure.JavaMethod
|
||||
import org.jetbrains.kotlin.types.KotlinType
|
||||
|
||||
interface SamConversionResolver {
|
||||
companion object EMPTY : SamConversionResolver {
|
||||
override fun <D : FunctionDescriptor> resolveSamAdapter(original: D) = null
|
||||
override fun resolveSamConstructor(constructorOwner: DeclarationDescriptor, classifier: () -> ClassifierDescriptor?) = null
|
||||
override fun resolveFunctionTypeIfSamInterface(
|
||||
classDescriptor: JavaClassDescriptor, resolveMethod: (JavaMethod) -> FunctionDescriptor
|
||||
): KotlinType? = null
|
||||
override fun resolveFunctionTypeIfSamInterface(classDescriptor: JavaClassDescriptor): KotlinType? = null
|
||||
}
|
||||
|
||||
fun resolveSamConstructor(constructorOwner: DeclarationDescriptor, classifier: () -> ClassifierDescriptor?): SamConstructorDescriptor?
|
||||
|
||||
fun <D : FunctionDescriptor> resolveSamAdapter(original: D): D?
|
||||
|
||||
fun resolveFunctionTypeIfSamInterface(
|
||||
classDescriptor: JavaClassDescriptor,
|
||||
resolveMethod: (JavaMethod) -> FunctionDescriptor
|
||||
): KotlinType?
|
||||
fun resolveFunctionTypeIfSamInterface(classDescriptor: JavaClassDescriptor): KotlinType?
|
||||
}
|
||||
|
||||
+1
-3
@@ -107,9 +107,7 @@ class LazyJavaClassDescriptor(
|
||||
override fun getAnnotations() = annotations()
|
||||
|
||||
private val functionTypeForSamInterface = c.storageManager.createNullableLazyValue {
|
||||
c.components.samConversionResolver.resolveFunctionTypeIfSamInterface(this) { method ->
|
||||
unsubstitutedMemberScope.resolveMethodToFunctionDescriptor(method)
|
||||
}
|
||||
c.components.samConversionResolver.resolveFunctionTypeIfSamInterface(this)
|
||||
}
|
||||
|
||||
private val declaredParameters = c.storageManager.createLazyValue {
|
||||
|
||||
Reference in New Issue
Block a user