K/N: Cache library metadata in IDEA plugin

This commit is contained in:
Dmitriy Dolovov
2018-09-10 14:45:24 +03:00
parent 1df91ff7ec
commit 71be94b3e4
17 changed files with 90 additions and 61 deletions
@@ -7,33 +7,32 @@ package org.jetbrains.kotlin.ide.konan
import com.intellij.openapi.diagnostic.Logger import com.intellij.openapi.diagnostic.Logger
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.openapi.vfs.LocalFileSystem
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.psi.PsiFileFactory import com.intellij.psi.PsiFileFactory
import com.intellij.psi.SingleRootFileViewProvider import com.intellij.psi.SingleRootFileViewProvider
import com.intellij.psi.impl.PsiFileFactoryImpl import com.intellij.psi.impl.PsiFileFactoryImpl
import com.intellij.psi.search.GlobalSearchScope
import com.intellij.psi.stubs.PsiFileStub import com.intellij.psi.stubs.PsiFileStub
import com.intellij.testFramework.LightVirtualFile import com.intellij.testFramework.LightVirtualFile
import org.jetbrains.kotlin.analyzer.ModuleInfo
import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.config.LanguageVersionSettings
import org.jetbrains.kotlin.context.ModuleContext
import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.descriptors.PackageFragmentProvider import org.jetbrains.kotlin.descriptors.PackageFragmentProvider
import org.jetbrains.kotlin.ide.konan.decompiler.KotlinNativeLoadingMetadataCache
import org.jetbrains.kotlin.idea.KotlinFileType import org.jetbrains.kotlin.idea.KotlinFileType
import org.jetbrains.kotlin.idea.KotlinLanguage import org.jetbrains.kotlin.idea.KotlinLanguage
import org.jetbrains.kotlin.idea.caches.project.LibraryInfo import org.jetbrains.kotlin.idea.caches.project.LibraryInfo
import org.jetbrains.kotlin.idea.decompiler.textBuilder.LoggingErrorReporter import org.jetbrains.kotlin.idea.decompiler.textBuilder.LoggingErrorReporter
import org.jetbrains.kotlin.konan.file.File import org.jetbrains.kotlin.konan.file.File
import org.jetbrains.kotlin.konan.library.KonanLibrary import org.jetbrains.kotlin.konan.library.KonanLibrary
import org.jetbrains.kotlin.konan.library.KonanLibraryLayout
import org.jetbrains.kotlin.konan.library.MetadataReader
import org.jetbrains.kotlin.konan.library.createKonanLibrary import org.jetbrains.kotlin.konan.library.createKonanLibrary
import org.jetbrains.kotlin.konan.target.HostManager import org.jetbrains.kotlin.konan.target.HostManager
import org.jetbrains.kotlin.konan.util.KonanFactories.DefaultPackageFragmentsFactory import org.jetbrains.kotlin.konan.util.KonanFactories.DefaultPackageFragmentsFactory
import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.metadata.konan.KonanProtoBuf
import org.jetbrains.kotlin.psi.stubs.elements.KtStubElementTypes import org.jetbrains.kotlin.psi.stubs.elements.KtStubElementTypes
import org.jetbrains.kotlin.resolve.CompilerDeserializationConfiguration import org.jetbrains.kotlin.resolve.CompilerDeserializationConfiguration
import org.jetbrains.kotlin.resolve.konan.platform.KonanPlatform import org.jetbrains.kotlin.resolve.konan.platform.KonanPlatform
import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactoryService
import org.jetbrains.kotlin.serialization.konan.parseModuleHeader
import org.jetbrains.kotlin.storage.StorageManager import org.jetbrains.kotlin.storage.StorageManager
const val KOTLIN_NATIVE_CURRENT_ABI_VERSION = 1 const val KOTLIN_NATIVE_CURRENT_ABI_VERSION = 1
@@ -51,25 +50,22 @@ fun createFileStub(project: Project, text: String): PsiFileStub<*> {
fun createLoggingErrorReporter(log: Logger) = LoggingErrorReporter(log) fun createLoggingErrorReporter(log: Logger) = LoggingErrorReporter(log)
fun LibraryInfo.createPackageFragmentProviderForLibraryModule( fun LibraryInfo.createPackageFragmentProviderForLibraryModule(
project: Project,
storageManager: StorageManager, storageManager: StorageManager,
languageVersionSettings: LanguageVersionSettings, languageVersionSettings: LanguageVersionSettings,
moduleDescriptor: ModuleDescriptor moduleDescriptor: ModuleDescriptor
): List<PackageFragmentProvider> { ): List<PackageFragmentProvider> {
// This is to preserve "capabilities" from the original IntelliJ LibraryInfo:
if (this.platform != KonanPlatform) return emptyList() if (this.platform != KonanPlatform) return emptyList()
val libraryRoots = this.getLibraryRoots() val libraryRoots = this.getLibraryRoots()
return libraryRoots.mapNotNull { libraryRoot -> File(libraryRoot).takeIf { it.exists } }.map { libraryRoot ->
return libraryRoots.map { root ->
val konanLibrary = val konanLibrary =
createKonanLibrary( createKonanLibrary(
File(root), libraryRoot,
KOTLIN_NATIVE_CURRENT_ABI_VERSION, KOTLIN_NATIVE_CURRENT_ABI_VERSION,
HostManager.host, /* TODO: Inlined from KonanPaths, and looks like a bit incorrect */ HostManager.host /* TODO: Inlined from KonanPaths, and looks like a bit incorrect */,
isDefault = false /* TODO: Is it ok? */ metadataReader = CachingIdeMetadataReaderImpl
) )
konanLibrary.createPackageFragmentProvider(storageManager, languageVersionSettings, moduleDescriptor) konanLibrary.createPackageFragmentProvider(storageManager, languageVersionSettings, moduleDescriptor)
} }
@@ -80,8 +76,10 @@ private fun KonanLibrary.createPackageFragmentProvider(
languageVersionSettings: LanguageVersionSettings, languageVersionSettings: LanguageVersionSettings,
moduleDescriptor: ModuleDescriptor moduleDescriptor: ModuleDescriptor
): PackageFragmentProvider { ): PackageFragmentProvider {
val library = this val library = this
val libraryProto = parseModuleHeader(library.moduleHeaderData)
val libraryProto = library.moduleHeaderData
//TODO: Is it required somehow? //TODO: Is it required somehow?
//val moduleName = Name.special(libraryProto.moduleName) //val moduleName = Name.special(libraryProto.moduleName)
@@ -98,3 +96,21 @@ private fun KonanLibrary.createPackageFragmentProvider(
deserializationConfiguration deserializationConfiguration
) )
} }
internal object CachingIdeMetadataReaderImpl : MetadataReader {
override fun loadSerializedModule(libraryLayout: KonanLibraryLayout): KonanProtoBuf.LinkDataLibrary =
cache.getCachedModuleHeader(libraryLayout.moduleHeaderFile.virtualFile)
override fun loadSerializedPackageFragment(
libraryLayout: KonanLibraryLayout,
packageFqName: String
): KonanProtoBuf.LinkDataPackageFragment =
cache.getCachedPackageFragment(libraryLayout.packageFragmentFile(packageFqName).virtualFile)
private val File.virtualFile: VirtualFile
get() = LocalFileSystem.getInstance().refreshAndFindFileByPath(path) ?: error("File not found: $path")
private val cache
get() = KotlinNativeLoadingMetadataCache.getInstance()
}
@@ -67,7 +67,11 @@ private fun createKotlinNativeBuiltIns(projectContext: ProjectContext): KotlinBu
if (stdlib != null) { if (stdlib != null) {
val (path, libraryInfo) = stdlib val (path, libraryInfo) = stdlib
val library = createKonanLibrary(File(path), KOTLIN_NATIVE_CURRENT_ABI_VERSION) val library = createKonanLibrary(
File(path),
KOTLIN_NATIVE_CURRENT_ABI_VERSION,
metadataReader = CachingIdeMetadataReaderImpl
)
val builtInsModule = DefaultDeserializedDescriptorFactory.createDescriptorAndNewBuiltIns( val builtInsModule = DefaultDeserializedDescriptorFactory.createDescriptorAndNewBuiltIns(
library, library,
@@ -62,7 +62,6 @@ object NativeAnalyzerFacade : ResolverForModuleFactory() {
if (moduleInfo is LibraryInfo) { if (moduleInfo is LibraryInfo) {
val libPackageFragmentProviders = moduleInfo.createPackageFragmentProviderForLibraryModule( val libPackageFragmentProviders = moduleInfo.createPackageFragmentProviderForLibraryModule(
moduleContext.project,
moduleContext.storageManager, moduleContext.storageManager,
languageVersionSettings, languageVersionSettings,
moduleDescriptor moduleDescriptor
@@ -8,26 +8,31 @@ package org.jetbrains.kotlin.ide.konan.decompiler
import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.components.ApplicationComponent import com.intellij.openapi.components.ApplicationComponent
import com.intellij.openapi.vfs.* import com.intellij.openapi.vfs.*
import com.intellij.util.containers.ContainerUtil.createConcurrentWeakValueMap import com.intellij.util.containers.ContainerUtil.createConcurrentSoftValueMap
import org.jetbrains.kotlin.metadata.konan.KonanProtoBuf import org.jetbrains.kotlin.metadata.konan.KonanProtoBuf
import org.jetbrains.kotlin.serialization.konan.parseModuleHeader
import org.jetbrains.kotlin.serialization.konan.parsePackageFragment import org.jetbrains.kotlin.serialization.konan.parsePackageFragment
class KotlinNativeDescriptorManager : ApplicationComponent { class KotlinNativeLoadingMetadataCache : ApplicationComponent {
companion object { companion object {
@JvmStatic @JvmStatic
fun getInstance(): KotlinNativeDescriptorManager = fun getInstance(): KotlinNativeLoadingMetadataCache =
ApplicationManager.getApplication().getComponent(KotlinNativeDescriptorManager::class.java) ApplicationManager.getApplication().getComponent(KotlinNativeLoadingMetadataCache::class.java)
} }
private val protoCache = createConcurrentWeakValueMap<VirtualFile, KonanProtoBuf.LinkDataPackageFragment>() private val packageFragmentCache = createConcurrentSoftValueMap<VirtualFile, KonanProtoBuf.LinkDataPackageFragment>()
private val moduleHeaderCache = createConcurrentSoftValueMap<VirtualFile, KonanProtoBuf.LinkDataLibrary>()
fun getCachedPackageFragment(virtualFile: VirtualFile): KonanProtoBuf.LinkDataPackageFragment { fun getCachedPackageFragment(virtualFile: VirtualFile): KonanProtoBuf.LinkDataPackageFragment =
return protoCache.computeIfAbsent(virtualFile) { packageFragmentCache.computeIfAbsent(virtualFile) {
val bytes = virtualFile.contentsToByteArray(false) parsePackageFragment(virtualFile.contentsToByteArray(false))
parsePackageFragment(bytes) }
fun getCachedModuleHeader(virtualFile: VirtualFile): KonanProtoBuf.LinkDataLibrary =
moduleHeaderCache.computeIfAbsent(virtualFile) {
parseModuleHeader(virtualFile.contentsToByteArray(false))
} }
}
override fun initComponent() { override fun initComponent() {
VirtualFileManager.getInstance().addVirtualFileListener(object : VirtualFileListener { VirtualFileManager.getInstance().addVirtualFileListener(object : VirtualFileListener {
@@ -40,6 +45,7 @@ class KotlinNativeDescriptorManager : ApplicationComponent {
} }
private fun invalidateCaches(virtualFile: VirtualFile) { private fun invalidateCaches(virtualFile: VirtualFile) {
protoCache.remove(virtualFile) packageFragmentCache.remove(virtualFile)
moduleHeaderCache.remove(virtualFile)
} }
} }
@@ -23,7 +23,7 @@ class KotlinNativeMetadataDecompiler : KotlinNativeMetadataDecompilerBase<Kotlin
) { ) {
override fun doReadFile(file: VirtualFile): FileWithMetadata? { override fun doReadFile(file: VirtualFile): FileWithMetadata? {
val proto = KotlinNativeDescriptorManager.getInstance().getCachedPackageFragment(file) val proto = KotlinNativeLoadingMetadataCache.getInstance().getCachedPackageFragment(file)
return FileWithMetadata.Compatible(proto, KonanSerializerProtocol) //todo: check version compatibility return FileWithMetadata.Compatible(proto, KonanSerializerProtocol) //todo: check version compatibility
} }
} }
@@ -6,7 +6,7 @@
package org.jetbrains.kotlin.ide.konan.index package org.jetbrains.kotlin.ide.konan.index
import com.intellij.util.indexing.FileBasedIndex import com.intellij.util.indexing.FileBasedIndex
import org.jetbrains.kotlin.ide.konan.decompiler.KotlinNativeDescriptorManager import org.jetbrains.kotlin.ide.konan.decompiler.KotlinNativeLoadingMetadataCache
import org.jetbrains.kotlin.ide.konan.decompiler.KotlinNativeMetaFileType import org.jetbrains.kotlin.ide.konan.decompiler.KotlinNativeMetaFileType
import org.jetbrains.kotlin.idea.vfilefinder.KotlinFileIndexBase import org.jetbrains.kotlin.idea.vfilefinder.KotlinFileIndexBase
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
@@ -26,7 +26,7 @@ object KotlinNativeMetaFileIndex : KotlinFileIndexBase<KotlinNativeMetaFileIndex
/*todo: check version?!*/ /*todo: check version?!*/
private val INDEXER = indexer { fileContent -> private val INDEXER = indexer { fileContent ->
val fragment = KotlinNativeDescriptorManager.getInstance().getCachedPackageFragment(fileContent.file) val fragment = KotlinNativeLoadingMetadataCache.getInstance().getCachedPackageFragment(fileContent.file)
FqName(fragment.fqName) FqName(fragment.fqName)
} }
} }
+1 -1
View File
@@ -4,7 +4,7 @@
<implementation-class>org.jetbrains.kotlin.ide.konan.KotlinNativeApplicationComponent</implementation-class> <implementation-class>org.jetbrains.kotlin.ide.konan.KotlinNativeApplicationComponent</implementation-class>
</component> </component>
<component> <component>
<implementation-class>org.jetbrains.kotlin.ide.konan.decompiler.KotlinNativeDescriptorManager</implementation-class> <implementation-class>org.jetbrains.kotlin.ide.konan.decompiler.KotlinNativeLoadingMetadataCache</implementation-class>
</component> </component>
</application-components> </application-components>
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.konan.library
import org.jetbrains.kotlin.konan.file.File import org.jetbrains.kotlin.konan.file.File
import org.jetbrains.kotlin.konan.properties.Properties import org.jetbrains.kotlin.konan.properties.Properties
import org.jetbrains.kotlin.konan.properties.propertyList import org.jetbrains.kotlin.konan.properties.propertyList
import org.jetbrains.kotlin.metadata.konan.KonanProtoBuf
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
const val KLIB_PROPERTY_ABI_VERSION = "abi_version" const val KLIB_PROPERTY_ABI_VERSION = "abi_version"
@@ -42,8 +43,8 @@ interface KonanLibrary {
val targetList: List<String> val targetList: List<String>
val dataFlowGraph: ByteArray? val dataFlowGraph: ByteArray?
val moduleHeaderData: ByteArray val moduleHeaderData: KonanProtoBuf.LinkDataLibrary
fun packageMetadata(fqName: String): ByteArray fun packageMetadata(packageFqName: String): KonanProtoBuf.LinkDataPackageFragment
} }
val KonanLibrary.uniqueName val KonanLibrary.uniqueName
@@ -44,5 +44,6 @@ interface KonanLibraryLayout {
val dataFlowGraphFile val dataFlowGraphFile
get() = File(linkdataDir, "module_data_flow_graph") get() = File(linkdataDir, "module_data_flow_graph")
fun packageFile(packageName: String) = File(linkdataDir, if (packageName == "") "root_package.knm" else "package_$packageName.knm") fun packageFragmentFile(packageFqName: String) =
File(linkdataDir, if (packageFqName == "") "root_package.knm" else "package_$packageFqName.knm")
} }
@@ -5,7 +5,9 @@
package org.jetbrains.kotlin.konan.library package org.jetbrains.kotlin.konan.library
import org.jetbrains.kotlin.metadata.konan.KonanProtoBuf
interface MetadataReader { interface MetadataReader {
fun loadSerializedModule(libraryLayout: KonanLibraryLayout): ByteArray fun loadSerializedModule(libraryLayout: KonanLibraryLayout): KonanProtoBuf.LinkDataLibrary
fun loadSerializedPackageFragment(libraryLayout: KonanLibraryLayout, fqName: String): ByteArray fun loadSerializedPackageFragment(libraryLayout: KonanLibraryLayout, packageFqName: String): KonanProtoBuf.LinkDataPackageFragment
} }
@@ -7,12 +7,18 @@ package org.jetbrains.kotlin.konan.library.impl
import org.jetbrains.kotlin.konan.library.KonanLibraryLayout import org.jetbrains.kotlin.konan.library.KonanLibraryLayout
import org.jetbrains.kotlin.konan.library.MetadataReader import org.jetbrains.kotlin.konan.library.MetadataReader
import org.jetbrains.kotlin.metadata.konan.KonanProtoBuf
import org.jetbrains.kotlin.serialization.konan.parseModuleHeader
import org.jetbrains.kotlin.serialization.konan.parsePackageFragment
internal object DefaultMetadataReaderImpl : MetadataReader { object DefaultMetadataReaderImpl : MetadataReader {
override fun loadSerializedModule(libraryLayout: KonanLibraryLayout): ByteArray = override fun loadSerializedModule(libraryLayout: KonanLibraryLayout): KonanProtoBuf.LinkDataLibrary =
libraryLayout.moduleHeaderFile.readBytes() parseModuleHeader(libraryLayout.moduleHeaderFile.readBytes())
override fun loadSerializedPackageFragment(libraryLayout: KonanLibraryLayout, fqName: String): ByteArray = override fun loadSerializedPackageFragment(
libraryLayout.packageFile(fqName).readBytes() libraryLayout: KonanLibraryLayout,
packageFqName: String
): KonanProtoBuf.LinkDataPackageFragment =
parsePackageFragment(libraryLayout.packageFragmentFile(packageFqName).readBytes())
} }
@@ -6,13 +6,17 @@
package org.jetbrains.kotlin.konan.library.impl package org.jetbrains.kotlin.konan.library.impl
import org.jetbrains.kotlin.konan.file.File import org.jetbrains.kotlin.konan.file.File
import org.jetbrains.kotlin.konan.library.* import org.jetbrains.kotlin.konan.library.KLIB_PROPERTY_ABI_VERSION
import org.jetbrains.kotlin.konan.library.KLIB_PROPERTY_LINKED_OPTS
import org.jetbrains.kotlin.konan.library.KonanLibrary
import org.jetbrains.kotlin.konan.library.MetadataReader
import org.jetbrains.kotlin.konan.properties.Properties import org.jetbrains.kotlin.konan.properties.Properties
import org.jetbrains.kotlin.konan.properties.loadProperties import org.jetbrains.kotlin.konan.properties.loadProperties
import org.jetbrains.kotlin.konan.properties.propertyList import org.jetbrains.kotlin.konan.properties.propertyList
import org.jetbrains.kotlin.konan.target.KonanTarget import org.jetbrains.kotlin.konan.target.KonanTarget
import org.jetbrains.kotlin.konan.util.defaultTargetSubstitutions import org.jetbrains.kotlin.konan.util.defaultTargetSubstitutions
import org.jetbrains.kotlin.konan.util.substitute import org.jetbrains.kotlin.konan.util.substitute
import org.jetbrains.kotlin.metadata.konan.KonanProtoBuf
internal class KonanLibraryImpl( internal class KonanLibraryImpl(
override val libraryFile: File, override val libraryFile: File,
@@ -59,9 +63,9 @@ internal class KonanLibraryImpl(
override val dataFlowGraph by lazy { layout.inPlace { it.dataFlowGraphFile.let { if (it.exists) it.readBytes() else null } } } override val dataFlowGraph by lazy { layout.inPlace { it.dataFlowGraphFile.let { if (it.exists) it.readBytes() else null } } }
override val moduleHeaderData: ByteArray by lazy { layout.inPlace { metadataReader.loadSerializedModule(it) } } override val moduleHeaderData: KonanProtoBuf.LinkDataLibrary by lazy { layout.inPlace { metadataReader.loadSerializedModule(it) } }
override fun packageMetadata(fqName: String) = layout.inPlace { metadataReader.loadSerializedPackageFragment(it, fqName) } override fun packageMetadata(packageFqName: String) = layout.inPlace { metadataReader.loadSerializedPackageFragment(it, packageFqName) }
override fun toString() = "$libraryName[default=$isDefault]" override fun toString() = "$libraryName[default=$isDefault]"
} }
@@ -8,14 +8,13 @@ package org.jetbrains.kotlin.konan.library.resolver.impl
import org.jetbrains.kotlin.konan.library.KonanLibrary import org.jetbrains.kotlin.konan.library.KonanLibrary
import org.jetbrains.kotlin.konan.library.resolver.KonanResolvedLibrary import org.jetbrains.kotlin.konan.library.resolver.KonanResolvedLibrary
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.serialization.konan.parseModuleHeader
internal class KonanResolvedLibraryImpl( internal class KonanResolvedLibraryImpl(
override val library: KonanLibrary override val library: KonanLibrary
) : KonanResolvedLibrary { ) : KonanResolvedLibrary {
private val _resolvedDependencies = mutableListOf<KonanResolvedLibrary>() private val _resolvedDependencies = mutableListOf<KonanResolvedLibrary>()
private val _emptyPackages by lazy { parseModuleHeader(library.moduleHeaderData).emptyPackageList } private val _emptyPackages by lazy { library.moduleHeaderData.emptyPackageList }
override val resolvedDependencies: List<KonanResolvedLibrary> override val resolvedDependencies: List<KonanResolvedLibrary>
get() = _resolvedDependencies get() = _resolvedDependencies
@@ -29,7 +29,6 @@ interface KonanDeserializedPackageFragmentsFactory {
moduleDescriptor: ModuleDescriptor moduleDescriptor: ModuleDescriptor
): List<PackageFragmentDescriptor> ): List<PackageFragmentDescriptor>
fun createPackageFragmentProvider( fun createPackageFragmentProvider(
library: KonanLibrary, library: KonanLibrary,
packageAccessedHandler: PackageAccessedHandler?, packageAccessedHandler: PackageAccessedHandler?,
@@ -35,9 +35,7 @@ class KonanPackageFragment(
// The proto field is lazy so that we can load only needed // The proto field is lazy so that we can load only needed
// packages from the library. // packages from the library.
private val protoForNames: KonanProtoBuf.LinkDataPackageFragment by lazy { private val protoForNames: KonanProtoBuf.LinkDataPackageFragment by lazy { library.packageMetadata(fqName.asString()) }
parsePackageFragment(library.packageMetadata(fqName.asString()))
}
val proto: KonanProtoBuf.LinkDataPackageFragment val proto: KonanProtoBuf.LinkDataPackageFragment
get() = protoForNames.also { packageAccessedHandler?.markPackageAccessed(fqName) } get() = protoForNames.also { packageAccessedHandler?.markPackageAccessed(fqName) }
@@ -8,19 +8,15 @@ package org.jetbrains.kotlin.serialization.konan.impl
import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.config.LanguageVersionSettings
import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.descriptors.NotFoundClasses
import org.jetbrains.kotlin.descriptors.PackageFragmentProvider
import org.jetbrains.kotlin.descriptors.PackageFragmentProviderImpl
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
import org.jetbrains.kotlin.descriptors.konan.DeserializedKonanModuleOrigin import org.jetbrains.kotlin.descriptors.konan.DeserializedKonanModuleOrigin
import org.jetbrains.kotlin.descriptors.konan.KonanModuleDescriptorFactory import org.jetbrains.kotlin.descriptors.konan.KonanModuleDescriptorFactory
import org.jetbrains.kotlin.incremental.components.LookupTracker
import org.jetbrains.kotlin.konan.library.KonanLibrary import org.jetbrains.kotlin.konan.library.KonanLibrary
import org.jetbrains.kotlin.konan.library.resolver.PackageAccessedHandler import org.jetbrains.kotlin.konan.library.resolver.PackageAccessedHandler
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.resolve.CompilerDeserializationConfiguration import org.jetbrains.kotlin.resolve.CompilerDeserializationConfiguration
import org.jetbrains.kotlin.serialization.deserialization.* import org.jetbrains.kotlin.serialization.konan.KonanDeserializedModuleDescriptorFactory
import org.jetbrains.kotlin.serialization.konan.* import org.jetbrains.kotlin.serialization.konan.KonanDeserializedPackageFragmentsFactory
import org.jetbrains.kotlin.storage.StorageManager import org.jetbrains.kotlin.storage.StorageManager
internal class KonanDeserializedModuleDescriptorFactoryImpl( internal class KonanDeserializedModuleDescriptorFactoryImpl(
@@ -61,7 +57,7 @@ internal class KonanDeserializedModuleDescriptorFactoryImpl(
customCapabilities: Map<ModuleDescriptor.Capability<*>, Any?> customCapabilities: Map<ModuleDescriptor.Capability<*>, Any?>
): ModuleDescriptorImpl { ): ModuleDescriptorImpl {
val libraryProto = parseModuleHeader(library.moduleHeaderData) val libraryProto = library.moduleHeaderData
val moduleName = Name.special(libraryProto.moduleName) val moduleName = Name.special(libraryProto.moduleName)
val moduleOrigin = DeserializedKonanModuleOrigin(library) val moduleOrigin = DeserializedKonanModuleOrigin(library)
@@ -86,5 +82,4 @@ internal class KonanDeserializedModuleDescriptorFactoryImpl(
return moduleDescriptor return moduleDescriptor
} }
} }
@@ -68,7 +68,6 @@ internal object KonanDeserializedPackageFragmentsFactoryImpl : KonanDeserialized
return result return result
} }
override fun createPackageFragmentProvider( override fun createPackageFragmentProvider(
library: KonanLibrary, library: KonanLibrary,
packageAccessedHandler: PackageAccessedHandler?, packageAccessedHandler: PackageAccessedHandler?,