Pass LookupTracker to deserialized scopes in JS KLIB compiler

Before this change, deserialized scopes were not tracking lookups properly,
because lookup tracker was not passed from compiler configuration correctly.
Because of that, lookups from dependencies were not tracked,
so multi-module IC was not working (chages were passed between modules,
but affected source files were not invalidated).
This commit is contained in:
Alexey Tsvetkov
2020-02-27 12:50:52 +03:00
parent 98f561bbed
commit 1c38466a22
12 changed files with 57 additions and 26 deletions
@@ -7,6 +7,7 @@ import org.jetbrains.kotlin.descriptors.PackageFragmentProvider
import org.jetbrains.kotlin.descriptors.deserialization.PlatformDependentTypeTransformer
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
import org.jetbrains.kotlin.descriptors.konan.KlibModuleDescriptorFactory
import org.jetbrains.kotlin.incremental.components.LookupTracker
import org.jetbrains.kotlin.library.KotlinLibrary
import org.jetbrains.kotlin.library.metadata.PackageAccessHandler
import org.jetbrains.kotlin.serialization.deserialization.DeserializationConfiguration
@@ -31,7 +32,8 @@ interface KlibMetadataModuleDescriptorFactory {
languageVersionSettings,
storageManager,
builtIns,
packageAccessHandler
packageAccessHandler,
LookupTracker.DO_NOTHING
)
fun createDescriptorAndNewBuiltIns(
@@ -39,14 +41,17 @@ interface KlibMetadataModuleDescriptorFactory {
languageVersionSettings: LanguageVersionSettings,
storageManager: StorageManager,
packageAccessHandler: PackageAccessHandler?
) = createDescriptorOptionalBuiltIns(library, languageVersionSettings, storageManager, null, packageAccessHandler)
) = createDescriptorOptionalBuiltIns(
library, languageVersionSettings, storageManager, null, packageAccessHandler, LookupTracker.DO_NOTHING
)
fun createDescriptorOptionalBuiltIns(
library: KotlinLibrary,
languageVersionSettings: LanguageVersionSettings,
storageManager: StorageManager,
builtIns: KotlinBuiltIns?,
packageAccessHandler: PackageAccessHandler?
packageAccessHandler: PackageAccessHandler?,
lookupTracker: LookupTracker
): ModuleDescriptorImpl
fun createPackageFragmentProvider(
@@ -56,13 +61,15 @@ interface KlibMetadataModuleDescriptorFactory {
storageManager: StorageManager,
moduleDescriptor: ModuleDescriptor,
configuration: DeserializationConfiguration,
compositePackageFragmentAddend: PackageFragmentProvider?
compositePackageFragmentAddend: PackageFragmentProvider?,
lookupTracker: LookupTracker
): PackageFragmentProvider
fun createCachedPackageFragmentProvider(
byteArrays: List<ByteArray>,
storageManager: StorageManager,
moduleDescriptor: ModuleDescriptor,
configuration: DeserializationConfiguration
configuration: DeserializationConfiguration,
lookupTracker: LookupTracker
): PackageFragmentProvider
}
@@ -46,7 +46,8 @@ class KlibMetadataModuleDescriptorFactoryImpl(
languageVersionSettings: LanguageVersionSettings,
storageManager: StorageManager,
builtIns: KotlinBuiltIns?,
packageAccessHandler: PackageAccessHandler?
packageAccessHandler: PackageAccessHandler?,
lookupTracker: LookupTracker
): ModuleDescriptorImpl {
val libraryProto = parseModuleHeader(library.moduleHeaderData)
@@ -73,7 +74,8 @@ class KlibMetadataModuleDescriptorFactoryImpl(
storageManager,
moduleDescriptor,
deserializationConfiguration,
compositePackageFragmentAddend
compositePackageFragmentAddend,
lookupTracker
)
moduleDescriptor.initialize(provider)
@@ -85,16 +87,16 @@ class KlibMetadataModuleDescriptorFactoryImpl(
byteArrays: List<ByteArray>,
storageManager: StorageManager,
moduleDescriptor: ModuleDescriptor,
configuration: DeserializationConfiguration
): PackageFragmentProvider {
configuration: DeserializationConfiguration,
lookupTracker: LookupTracker
): PackageFragmentProvider {
val deserializedPackageFragments = packageFragmentsFactory.createCachedPackageFragments(
byteArrays, moduleDescriptor, storageManager
)
val provider = PackageFragmentProviderImpl(deserializedPackageFragments)
return initializePackageFragmentProvider(provider, deserializedPackageFragments, storageManager,
moduleDescriptor, configuration, null)
moduleDescriptor, configuration, null, lookupTracker)
}
override fun createPackageFragmentProvider(
@@ -104,7 +106,8 @@ class KlibMetadataModuleDescriptorFactoryImpl(
storageManager: StorageManager,
moduleDescriptor: ModuleDescriptor,
configuration: DeserializationConfiguration,
compositePackageFragmentAddend: PackageFragmentProvider?
compositePackageFragmentAddend: PackageFragmentProvider?,
lookupTracker: LookupTracker
): PackageFragmentProvider {
val deserializedPackageFragments = packageFragmentsFactory.createDeserializedPackageFragments(
@@ -118,7 +121,7 @@ class KlibMetadataModuleDescriptorFactoryImpl(
val provider = PackageFragmentProviderImpl(deserializedPackageFragments + syntheticPackageFragments)
return initializePackageFragmentProvider(provider, deserializedPackageFragments, storageManager,
moduleDescriptor, configuration, compositePackageFragmentAddend)
moduleDescriptor, configuration, compositePackageFragmentAddend, lookupTracker)
}
fun initializePackageFragmentProvider(
@@ -127,7 +130,8 @@ class KlibMetadataModuleDescriptorFactoryImpl(
storageManager: StorageManager,
moduleDescriptor: ModuleDescriptor,
configuration: DeserializationConfiguration,
compositePackageFragmentAddend: PackageFragmentProvider?
compositePackageFragmentAddend: PackageFragmentProvider?,
lookupTracker: LookupTracker
): PackageFragmentProvider {
val notFoundClasses = NotFoundClasses(storageManager, moduleDescriptor)
@@ -147,7 +151,7 @@ class KlibMetadataModuleDescriptorFactoryImpl(
provider,
LocalClassifierTypeSettings.Default,
ErrorReporter.DO_NOTHING,
LookupTracker.DO_NOTHING,
lookupTracker,
flexibleTypeDeserializer,
emptyList(),
notFoundClasses,