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:
+2
-1
@@ -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 {
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
+2
-1
@@ -25,7 +25,8 @@ object TopDownAnalyzerFacadeForJSIR : AbstractTopDownAnalyzerFacadeForJS() {
|
||||
incrementalData.compiledPackageParts.values.map { it.metadata },
|
||||
moduleContext.storageManager,
|
||||
moduleContext.module,
|
||||
CompilerDeserializationConfiguration(languageVersionSettings)
|
||||
CompilerDeserializationConfiguration(languageVersionSettings),
|
||||
lookupTracker
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -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<String, Mo
|
||||
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
|
||||
)
|
||||
// if (isBuiltIns) runtimeModule = md
|
||||
|
||||
@@ -397,12 +399,14 @@ private class ModulesStructure(
|
||||
fun getModuleDescriptor(current: KotlinLibrary): ModuleDescriptorImpl = descriptors.getOrPut(current) {
|
||||
val isBuiltIns = current.unresolvedDependencies.isEmpty()
|
||||
|
||||
val lookupTracker = compilerConfiguration[CommonConfigurationKeys.LOOKUP_TRACKER] ?: LookupTracker.DO_NOTHING
|
||||
val md = JsFactories.DefaultDeserializedDescriptorFactory.createDescriptorOptionalBuiltIns(
|
||||
current,
|
||||
languageVersionSettings,
|
||||
storageManager,
|
||||
runtimeModule?.builtIns,
|
||||
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
|
||||
)
|
||||
if (isBuiltIns) runtimeModule = md
|
||||
|
||||
|
||||
+12
-5
@@ -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
|
||||
}
|
||||
|
||||
+14
-10
@@ -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,
|
||||
|
||||
+3
-1
@@ -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
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
+1
@@ -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
|
||||
|
||||
+3
-1
@@ -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
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
)
|
||||
}
|
||||
|
||||
@@ -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
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
+3
-1
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user