From 1c38466a22cc2506d6ca9ce7f8a3a9ea006a296a Mon Sep 17 00:00:00 2001 From: Alexey Tsvetkov Date: Thu, 27 Feb 2020 12:50:52 +0300 Subject: [PATCH] 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). --- .../compiler/TopDownAnalyzerFacadeForJVM.kt | 3 ++- .../cli/metadata/K2MetadataKlibSerializer.kt | 4 +++- .../js/TopDownAnalyzerFacadeForJSIR.kt | 3 ++- .../jetbrains/kotlin/ir/backend/js/klib.kt | 8 +++++-- .../KlibMetadataModuleDescriptorFactory.kt | 17 +++++++++---- ...KlibMetadataModuleDescriptorFactoryImpl.kt | 24 +++++++++++-------- .../resolve/CommonPlatformKindResolution.kt | 4 +++- .../CompositeResolverForModuleFactory.kt | 1 + .../resolve/JsPlatformKindResolution.kt | 4 +++- .../org/jetbrains/kotlin/idea/klib/utils.kt | 7 ++++-- .../ide/konan/NativePlatformKindResolution.kt | 4 +++- .../NativeDistributionModulesProvider.kt | 4 +++- 12 files changed, 57 insertions(+), 26 deletions(-) diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/TopDownAnalyzerFacadeForJVM.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/TopDownAnalyzerFacadeForJVM.kt index fe41b632557..6e04c6da1d1 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/TopDownAnalyzerFacadeForJVM.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/TopDownAnalyzerFacadeForJVM.kt @@ -324,7 +324,8 @@ private fun getModuleDescriptorByLibrary( LanguageVersionSettingsImpl.DEFAULT, LockBasedStorageManager.NO_LOCKS, null, - packageAccessHandler = null // TODO: This is a speed optimization used by Native. Don't bother for now. + packageAccessHandler = null, // TODO: This is a speed optimization used by Native. Don't bother for now. + lookupTracker = LookupTracker.DO_NOTHING ) val dependencies = current.manifestProperties.propertyList(KLIB_PROPERTY_DEPENDS, escapeInQuotes = true).mapNotNull { diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/metadata/K2MetadataKlibSerializer.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/metadata/K2MetadataKlibSerializer.kt index 3dfe5094e16..bfbfd2ee881 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/metadata/K2MetadataKlibSerializer.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/metadata/K2MetadataKlibSerializer.kt @@ -24,6 +24,7 @@ import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.descriptors.PackageFragmentProvider import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl import org.jetbrains.kotlin.descriptors.konan.DeserializedKlibModuleOrigin +import org.jetbrains.kotlin.incremental.components.LookupTracker import org.jetbrains.kotlin.konan.util.KlibMetadataFactories import org.jetbrains.kotlin.library.* import org.jetbrains.kotlin.library.impl.BuiltInsPlatform @@ -214,7 +215,8 @@ private class KlibMetadataDependencyContainer( storageManager = LockBasedStorageManager("KlibMetadataPackageFragmentProvider"), moduleDescriptor = libraryModuleDescriptor, configuration = CompilerDeserializationConfiguration(languageVersionSettings), - compositePackageFragmentAddend = null + compositePackageFragmentAddend = null, + lookupTracker = LookupTracker.DO_NOTHING ).also { libraryModuleDescriptor.initialize(it) } diff --git a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/TopDownAnalyzerFacadeForJSIR.kt b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/TopDownAnalyzerFacadeForJSIR.kt index b68449857c1..52e63ad57cd 100644 --- a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/TopDownAnalyzerFacadeForJSIR.kt +++ b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/TopDownAnalyzerFacadeForJSIR.kt @@ -25,7 +25,8 @@ object TopDownAnalyzerFacadeForJSIR : AbstractTopDownAnalyzerFacadeForJS() { incrementalData.compiledPackageParts.values.map { it.metadata }, moduleContext.storageManager, moduleContext.module, - CompilerDeserializationConfiguration(languageVersionSettings) + CompilerDeserializationConfiguration(languageVersionSettings), + lookupTracker ) } } \ No newline at end of file diff --git a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/klib.kt b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/klib.kt index e36ebd2d8d3..641b0788fac 100644 --- a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/klib.kt +++ b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/klib.kt @@ -26,6 +26,7 @@ import org.jetbrains.kotlin.config.* import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl +import org.jetbrains.kotlin.incremental.components.LookupTracker import org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir.* import org.jetbrains.kotlin.ir.backend.js.lower.serialization.metadata.KlibMetadataIncrementalSerializer import org.jetbrains.kotlin.ir.declarations.IrModuleFragment @@ -316,7 +317,8 @@ fun getModuleDescriptorByLibrary(current: KotlinLibrary, mapping: Map, storageManager: StorageManager, moduleDescriptor: ModuleDescriptor, - configuration: DeserializationConfiguration + configuration: DeserializationConfiguration, + lookupTracker: LookupTracker ): PackageFragmentProvider } diff --git a/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/impl/KlibMetadataModuleDescriptorFactoryImpl.kt b/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/impl/KlibMetadataModuleDescriptorFactoryImpl.kt index 0c66cfb7e4f..3ffe0524d52 100644 --- a/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/impl/KlibMetadataModuleDescriptorFactoryImpl.kt +++ b/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/impl/KlibMetadataModuleDescriptorFactoryImpl.kt @@ -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, 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, diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/caches/resolve/CommonPlatformKindResolution.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/caches/resolve/CommonPlatformKindResolution.kt index 22827bfdcf7..ab854ef3790 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/caches/resolve/CommonPlatformKindResolution.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/caches/resolve/CommonPlatformKindResolution.kt @@ -29,6 +29,7 @@ import org.jetbrains.kotlin.idea.framework.CommonLibraryKind import org.jetbrains.kotlin.idea.klib.AbstractKlibLibraryInfo import org.jetbrains.kotlin.idea.klib.createKlibPackageFragmentProvider import org.jetbrains.kotlin.idea.klib.isKlibLibraryRootForPlatform +import org.jetbrains.kotlin.incremental.components.LookupTracker import org.jetbrains.kotlin.konan.util.KlibMetadataFactories import org.jetbrains.kotlin.library.metadata.NullFlexibleTypeDeserializer import org.jetbrains.kotlin.platform.CommonPlatforms @@ -84,7 +85,8 @@ class CommonPlatformKindResolution : IdePlatformKindResolution { storageManager = storageManager, metadataModuleDescriptorFactory = metadataModuleDescriptorFactory, languageVersionSettings = languageVersionSettings, - moduleDescriptor = moduleDescriptor + moduleDescriptor = moduleDescriptor, + lookupTracker = LookupTracker.DO_NOTHING ) } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/caches/resolve/CompositeResolverForModuleFactory.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/caches/resolve/CompositeResolverForModuleFactory.kt index ecc934399ba..e66173e50cd 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/caches/resolve/CompositeResolverForModuleFactory.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/caches/resolve/CompositeResolverForModuleFactory.kt @@ -23,6 +23,7 @@ import org.jetbrains.kotlin.frontend.di.configureStandardResolveComponents import org.jetbrains.kotlin.frontend.java.di.configureJavaSpecificComponents import org.jetbrains.kotlin.frontend.java.di.initializeJavaSpecificComponents import org.jetbrains.kotlin.idea.project.IdeaEnvironment +import org.jetbrains.kotlin.incremental.components.LookupTracker import org.jetbrains.kotlin.load.java.lazy.ModuleClassResolver import org.jetbrains.kotlin.load.java.lazy.ModuleClassResolverImpl import org.jetbrains.kotlin.load.kotlin.PackagePartProvider diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/caches/resolve/JsPlatformKindResolution.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/caches/resolve/JsPlatformKindResolution.kt index 06c497a9053..88343531710 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/caches/resolve/JsPlatformKindResolution.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/caches/resolve/JsPlatformKindResolution.kt @@ -27,6 +27,7 @@ import org.jetbrains.kotlin.idea.framework.JSLibraryKind import org.jetbrains.kotlin.idea.klib.AbstractKlibLibraryInfo import org.jetbrains.kotlin.idea.klib.createKlibPackageFragmentProvider import org.jetbrains.kotlin.idea.klib.isKlibLibraryRootForPlatform +import org.jetbrains.kotlin.incremental.components.LookupTracker import org.jetbrains.kotlin.konan.util.KlibMetadataFactories import org.jetbrains.kotlin.platform.TargetPlatform import org.jetbrains.kotlin.platform.impl.JsIdePlatformKind @@ -90,7 +91,8 @@ class JsPlatformKindResolution : IdePlatformKindResolution { storageManager = storageManager, metadataModuleDescriptorFactory = metadataModuleDescriptorFactory, languageVersionSettings = languageVersionSettings, - moduleDescriptor = moduleDescriptor + moduleDescriptor = moduleDescriptor, + lookupTracker = LookupTracker.DO_NOTHING ) } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/klib/utils.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/klib/utils.kt index d6283ce373a..69efdffd7e5 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/klib/utils.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/klib/utils.kt @@ -19,6 +19,7 @@ import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.descriptors.PackageFragmentProvider import org.jetbrains.kotlin.idea.KotlinFileType import org.jetbrains.kotlin.idea.KotlinLanguage +import org.jetbrains.kotlin.incremental.components.LookupTracker import org.jetbrains.kotlin.library.* import org.jetbrains.kotlin.library.impl.BuiltInsPlatform import org.jetbrains.kotlin.platform.TargetPlatform @@ -106,7 +107,8 @@ fun KotlinLibrary.createKlibPackageFragmentProvider( storageManager: StorageManager, metadataModuleDescriptorFactory: KlibMetadataModuleDescriptorFactory, languageVersionSettings: LanguageVersionSettings, - moduleDescriptor: ModuleDescriptor + moduleDescriptor: ModuleDescriptor, + lookupTracker: LookupTracker ): PackageFragmentProvider? { if (!getCompatibilityInfo().isCompatible) return null @@ -119,6 +121,7 @@ fun KotlinLibrary.createKlibPackageFragmentProvider( storageManager = storageManager, moduleDescriptor = moduleDescriptor, configuration = CompilerDeserializationConfiguration(languageVersionSettings), - compositePackageFragmentAddend = null + compositePackageFragmentAddend = null, + lookupTracker = lookupTracker ) } diff --git a/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/NativePlatformKindResolution.kt b/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/NativePlatformKindResolution.kt index f3bb6f6424b..63209ddd5a3 100644 --- a/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/NativePlatformKindResolution.kt +++ b/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/NativePlatformKindResolution.kt @@ -33,6 +33,7 @@ import org.jetbrains.kotlin.idea.caches.project.lazyClosure import org.jetbrains.kotlin.idea.caches.resolve.BuiltInsCacheKey import org.jetbrains.kotlin.idea.compiler.IDELanguageSettingsProvider import org.jetbrains.kotlin.idea.klib.* +import org.jetbrains.kotlin.incremental.components.LookupTracker import org.jetbrains.kotlin.konan.library.KONAN_STDLIB_NAME import org.jetbrains.kotlin.konan.util.KlibMetadataFactories import org.jetbrains.kotlin.library.isInterop @@ -67,7 +68,8 @@ class NativePlatformKindResolution : IdePlatformKindResolution { storageManager = storageManager, metadataModuleDescriptorFactory = metadataFactories.DefaultDeserializedDescriptorFactory, languageVersionSettings = languageVersionSettings, - moduleDescriptor = moduleDescriptor + moduleDescriptor = moduleDescriptor, + lookupTracker = LookupTracker.DO_NOTHING ) } diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/konan/NativeDistributionModulesProvider.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/konan/NativeDistributionModulesProvider.kt index e67f73e1ed9..a43bc18413a 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/konan/NativeDistributionModulesProvider.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/konan/NativeDistributionModulesProvider.kt @@ -12,6 +12,7 @@ import org.jetbrains.kotlin.descriptors.commonizer.BuiltInsProvider import org.jetbrains.kotlin.descriptors.commonizer.ModulesProvider import org.jetbrains.kotlin.descriptors.commonizer.utils.NativeFactories import org.jetbrains.kotlin.descriptors.commonizer.utils.createKotlinNativeForwardDeclarationsModule +import org.jetbrains.kotlin.incremental.components.LookupTracker import org.jetbrains.kotlin.konan.library.KONAN_STDLIB_NAME import org.jetbrains.kotlin.storage.StorageManager @@ -42,7 +43,8 @@ internal class NativeDistributionModulesProvider( languageVersionSettings = LanguageVersionSettingsImpl.DEFAULT, storageManager = storageManager, builtIns = builtIns, - packageAccessHandler = null + packageAccessHandler = null, + lookupTracker = LookupTracker.DO_NOTHING ) name to module