FIC: propagate info about conversions for deserialized classes

This commit is contained in:
Mikhail Zarechenskiy
2019-11-18 13:25:17 +03:00
parent 0fdebdfeba
commit 0e90d538df
13 changed files with 66 additions and 15 deletions
@@ -44,7 +44,8 @@ class MetadataPackageFragmentProvider(
notFoundClasses: NotFoundClasses,
private val metadataPartProvider: MetadataPartProvider,
contractDeserializer: ContractDeserializer,
kotlinTypeChecker: NewKotlinTypeChecker
kotlinTypeChecker: NewKotlinTypeChecker,
samConversionResolver: SamConversionResolver
) : AbstractDeserializedPackageFragmentProvider(storageManager, finder, moduleDescriptor) {
init {
components = DeserializationComponents(
@@ -63,7 +64,8 @@ class MetadataPackageFragmentProvider(
contractDeserializer,
AdditionalClassPartsProvider.None, PlatformDependentDeclarationFilter.All,
BuiltInSerializerProtocol.extensionRegistry,
kotlinTypeChecker
kotlinTypeChecker,
samConversionResolver
)
}
@@ -16,6 +16,7 @@ import org.jetbrains.kotlin.descriptors.deserialization.ClassDescriptorFactory
import org.jetbrains.kotlin.descriptors.deserialization.PlatformDependentDeclarationFilter
import org.jetbrains.kotlin.incremental.components.LookupTracker
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.resolve.sam.SamConversionResolverImpl
import org.jetbrains.kotlin.serialization.deserialization.*
import org.jetbrains.kotlin.storage.StorageManager
import java.io.InputStream
@@ -78,7 +79,8 @@ class BuiltInsLoaderImpl : BuiltInsLoader {
ContractDeserializer.DEFAULT,
additionalClassPartsProvider,
platformDependentDeclarationFilter,
BuiltInSerializerProtocol.extensionRegistry
BuiltInSerializerProtocol.extensionRegistry,
samConversionResolver = SamConversionResolverImpl(storageManager, samWithReceiverResolvers = emptyList())
)
for (packageFragment in packageFragments) {
@@ -49,7 +49,8 @@ class DeserializationComponents(
val additionalClassPartsProvider: AdditionalClassPartsProvider = AdditionalClassPartsProvider.None,
val platformDependentDeclarationFilter: PlatformDependentDeclarationFilter = PlatformDependentDeclarationFilter.All,
val extensionRegistryLite: ExtensionRegistryLite,
val kotlinTypeChecker: NewKotlinTypeChecker = NewKotlinTypeChecker.Default
val kotlinTypeChecker: NewKotlinTypeChecker = NewKotlinTypeChecker.Default,
val samConversionResolver: SamConversionResolver
) {
val classDeserializer: ClassDeserializer = ClassDeserializer(this)
@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.resolve.scopes.StaticScopeForKotlinEnum
import org.jetbrains.kotlin.serialization.deserialization.*
import org.jetbrains.kotlin.types.AbstractClassTypeConstructor
import org.jetbrains.kotlin.types.KotlinType
import org.jetbrains.kotlin.types.SimpleType
import org.jetbrains.kotlin.types.TypeConstructor
import org.jetbrains.kotlin.types.checker.KotlinTypeRefiner
import org.jetbrains.kotlin.types.refinement.TypeRefinement
@@ -172,6 +173,12 @@ class DeserializedClassDescriptor(
override fun getDeclaredTypeParameters() = c.typeDeserializer.ownTypeParameters
override fun getDefaultFunctionTypeForSamInterface(): SimpleType? {
return c.components.samConversionResolver.resolveFunctionTypeIfSamInterface(this)
}
override fun isDefinitelyNotSamInterface() = !isFun
private inner class DeserializedClassTypeConstructor : AbstractClassTypeConstructor(c.storageManager) {
private val parameters = c.storageManager.createLazyValue {
this@DeserializedClassDescriptor.computeConstructorTypeParameters()