Move SAM adapter resolution logic to SamConversionResolver

This commit is contained in:
Alexander Udalov
2014-10-29 12:44:35 +03:00
parent ae78b0e216
commit 344c6f0b3f
6 changed files with 42 additions and 49 deletions
@@ -21,6 +21,9 @@ import org.jetbrains.jet.lang.resolve.scopes.JetScope
import org.jetbrains.jet.lang.resolve.java.descriptor.SamConstructorDescriptor
import org.jetbrains.jet.lang.resolve.java.lazy.descriptors.LazyJavaClassDescriptor
import org.jetbrains.jet.lang.resolve.java.sam.SingleAbstractMethodUtils
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor
import org.jetbrains.jet.lang.resolve.java.descriptor.JavaConstructorDescriptor
import org.jetbrains.jet.lang.resolve.java.descriptor.JavaMethodDescriptor
public object SamConversionResolverImpl : SamConversionResolver {
override fun resolveSamConstructor(name: Name, scope: JetScope): SamConstructorDescriptor? {
@@ -28,4 +31,14 @@ public object SamConversionResolverImpl : SamConversionResolver {
if (classifier.getFunctionTypeForSamInterface() == null) return null
return SingleAbstractMethodUtils.createSamConstructorFunction(scope.getContainingDeclaration(), classifier)
}
suppress("UNCHECKED_CAST")
override fun <D : FunctionDescriptor> resolveSamAdapter(original: D): D? {
return when {
!SingleAbstractMethodUtils.isSamAdapterNecessary(original) -> null
original is JavaConstructorDescriptor -> SingleAbstractMethodUtils.createSamAdapterConstructor(original) as D
original is JavaMethodDescriptor -> SingleAbstractMethodUtils.createSamAdapterFunction(original) as D
else -> null
}
}
}