IDE: Use CachingIdeKlibMetadataLoader in Native & Common KLIB analysis
This commit is contained in:
+3
-3
@@ -23,10 +23,10 @@ import org.jetbrains.kotlin.frontend.di.configureModule
|
|||||||
import org.jetbrains.kotlin.frontend.di.configureStandardResolveComponents
|
import org.jetbrains.kotlin.frontend.di.configureStandardResolveComponents
|
||||||
import org.jetbrains.kotlin.frontend.java.di.configureJavaSpecificComponents
|
import org.jetbrains.kotlin.frontend.java.di.configureJavaSpecificComponents
|
||||||
import org.jetbrains.kotlin.frontend.java.di.initializeJavaSpecificComponents
|
import org.jetbrains.kotlin.frontend.java.di.initializeJavaSpecificComponents
|
||||||
|
import org.jetbrains.kotlin.idea.klib.CachingIdeKlibMetadataLoader
|
||||||
import org.jetbrains.kotlin.idea.project.IdeaEnvironment
|
import org.jetbrains.kotlin.idea.project.IdeaEnvironment
|
||||||
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
||||||
import org.jetbrains.kotlin.konan.util.KlibMetadataFactories
|
import org.jetbrains.kotlin.konan.util.KlibMetadataFactories
|
||||||
import org.jetbrains.kotlin.library.metadata.parseModuleHeader
|
|
||||||
import org.jetbrains.kotlin.load.java.lazy.ModuleClassResolver
|
import org.jetbrains.kotlin.load.java.lazy.ModuleClassResolver
|
||||||
import org.jetbrains.kotlin.load.java.lazy.ModuleClassResolverImpl
|
import org.jetbrains.kotlin.load.java.lazy.ModuleClassResolverImpl
|
||||||
import org.jetbrains.kotlin.load.kotlin.PackagePartProvider
|
import org.jetbrains.kotlin.load.kotlin.PackagePartProvider
|
||||||
@@ -134,7 +134,7 @@ class CompositeResolverForModuleFactory(
|
|||||||
val library = moduleInfo.resolvedKotlinLibrary
|
val library = moduleInfo.resolvedKotlinLibrary
|
||||||
val languageVersionSettings = container.get<LanguageVersionSettings>()
|
val languageVersionSettings = container.get<LanguageVersionSettings>()
|
||||||
|
|
||||||
val packageFragmentNames = parseModuleHeader(library.moduleHeaderData).packageFragmentNameList
|
val packageFragmentNames = CachingIdeKlibMetadataLoader.loadModuleHeader(library).packageFragmentNameList
|
||||||
|
|
||||||
val metadataFactories = KlibMetadataFactories(
|
val metadataFactories = KlibMetadataFactories(
|
||||||
{ DefaultBuiltIns.Instance },
|
{ DefaultBuiltIns.Instance },
|
||||||
@@ -150,7 +150,7 @@ class CompositeResolverForModuleFactory(
|
|||||||
|
|
||||||
klibMetadataProvider = klibMetadataModuleDescriptorFactory.createPackageFragmentProvider(
|
klibMetadataProvider = klibMetadataModuleDescriptorFactory.createPackageFragmentProvider(
|
||||||
library,
|
library,
|
||||||
packageAccessHandler = null,
|
packageAccessHandler = CachingIdeKlibMetadataLoader,
|
||||||
packageFragmentNames = packageFragmentNames,
|
packageFragmentNames = packageFragmentNames,
|
||||||
storageManager = moduleContext.storageManager,
|
storageManager = moduleContext.storageManager,
|
||||||
moduleDescriptor = moduleDescriptor,
|
moduleDescriptor = moduleDescriptor,
|
||||||
|
|||||||
+3
-4
@@ -3,20 +3,19 @@
|
|||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.jetbrains.kotlin.ide.konan
|
package org.jetbrains.kotlin.idea.klib
|
||||||
|
|
||||||
import com.intellij.openapi.vfs.StandardFileSystems
|
import com.intellij.openapi.vfs.StandardFileSystems
|
||||||
import com.intellij.openapi.vfs.VirtualFile
|
import com.intellij.openapi.vfs.VirtualFile
|
||||||
import com.intellij.util.PathUtil
|
import com.intellij.util.PathUtil
|
||||||
import org.jetbrains.kotlin.idea.klib.KlibLoadingMetadataCache
|
import org.jetbrains.kotlin.konan.file.File as KFile
|
||||||
import org.jetbrains.kotlin.library.KotlinLibrary
|
import org.jetbrains.kotlin.library.KotlinLibrary
|
||||||
import org.jetbrains.kotlin.library.impl.KotlinLibraryImpl
|
import org.jetbrains.kotlin.library.impl.KotlinLibraryImpl
|
||||||
import org.jetbrains.kotlin.library.metadata.KlibMetadataProtoBuf
|
import org.jetbrains.kotlin.library.metadata.KlibMetadataProtoBuf
|
||||||
import org.jetbrains.kotlin.library.metadata.PackageAccessHandler
|
import org.jetbrains.kotlin.library.metadata.PackageAccessHandler
|
||||||
import org.jetbrains.kotlin.metadata.ProtoBuf
|
import org.jetbrains.kotlin.metadata.ProtoBuf
|
||||||
import org.jetbrains.kotlin.konan.file.File as KFile
|
|
||||||
|
|
||||||
internal object CachingIdeKonanLibraryMetadataLoader : PackageAccessHandler {
|
object CachingIdeKlibMetadataLoader : PackageAccessHandler {
|
||||||
override fun loadModuleHeader(library: KotlinLibrary): KlibMetadataProtoBuf.Header {
|
override fun loadModuleHeader(library: KotlinLibrary): KlibMetadataProtoBuf.Header {
|
||||||
val virtualFile = getVirtualFile(library, library.moduleHeaderFile)
|
val virtualFile = getVirtualFile(library, library.moduleHeaderFile)
|
||||||
return virtualFile?.let { cache.getCachedModuleHeader(virtualFile) } ?: KlibMetadataProtoBuf.Header.getDefaultInstance()
|
return virtualFile?.let { cache.getCachedModuleHeader(virtualFile) } ?: KlibMetadataProtoBuf.Header.getDefaultInstance()
|
||||||
+9
-13
@@ -32,6 +32,7 @@ import org.jetbrains.kotlin.idea.caches.project.SdkInfo
|
|||||||
import org.jetbrains.kotlin.idea.caches.project.lazyClosure
|
import org.jetbrains.kotlin.idea.caches.project.lazyClosure
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.BuiltInsCacheKey
|
import org.jetbrains.kotlin.idea.caches.resolve.BuiltInsCacheKey
|
||||||
import org.jetbrains.kotlin.idea.compiler.IDELanguageSettingsProvider
|
import org.jetbrains.kotlin.idea.compiler.IDELanguageSettingsProvider
|
||||||
|
import org.jetbrains.kotlin.idea.klib.*
|
||||||
import org.jetbrains.kotlin.konan.library.KONAN_STDLIB_NAME
|
import org.jetbrains.kotlin.konan.library.KONAN_STDLIB_NAME
|
||||||
import org.jetbrains.kotlin.konan.util.KlibMetadataFactories
|
import org.jetbrains.kotlin.konan.util.KlibMetadataFactories
|
||||||
import org.jetbrains.kotlin.library.isInterop
|
import org.jetbrains.kotlin.library.isInterop
|
||||||
@@ -44,10 +45,6 @@ import org.jetbrains.kotlin.resolve.TargetEnvironment
|
|||||||
import org.jetbrains.kotlin.library.metadata.NullFlexibleTypeDeserializer
|
import org.jetbrains.kotlin.library.metadata.NullFlexibleTypeDeserializer
|
||||||
import org.jetbrains.kotlin.serialization.konan.impl.KlibMetadataModuleDescriptorFactoryImpl
|
import org.jetbrains.kotlin.serialization.konan.impl.KlibMetadataModuleDescriptorFactoryImpl
|
||||||
import org.jetbrains.kotlin.storage.StorageManager
|
import org.jetbrains.kotlin.storage.StorageManager
|
||||||
import org.jetbrains.kotlin.idea.klib.getCompatibilityInfo
|
|
||||||
import org.jetbrains.kotlin.idea.klib.readSafe
|
|
||||||
import org.jetbrains.kotlin.idea.klib.AbstractKlibLibraryInfo
|
|
||||||
import org.jetbrains.kotlin.idea.klib.isKlibLibraryRootForPlatform
|
|
||||||
|
|
||||||
class NativePlatformKindResolution : IdePlatformKindResolution {
|
class NativePlatformKindResolution : IdePlatformKindResolution {
|
||||||
|
|
||||||
@@ -102,17 +99,16 @@ class NativePlatformKindResolution : IdePlatformKindResolution {
|
|||||||
val library = (moduleInfo as? NativeKlibLibraryInfo)?.resolvedKotlinLibrary ?: return null
|
val library = (moduleInfo as? NativeKlibLibraryInfo)?.resolvedKotlinLibrary ?: return null
|
||||||
if (!library.getCompatibilityInfo().isCompatible) return null
|
if (!library.getCompatibilityInfo().isCompatible) return null
|
||||||
|
|
||||||
val libraryProto = CachingIdeKonanLibraryMetadataLoader.loadModuleHeader(library)
|
val packageFragmentNames = CachingIdeKlibMetadataLoader.loadModuleHeader(library).packageFragmentNameList
|
||||||
val deserializationConfiguration = CompilerDeserializationConfiguration(languageVersionSettings)
|
|
||||||
|
|
||||||
return NativeFactories.DefaultDeserializedDescriptorFactory.createPackageFragmentProvider(
|
return NativeFactories.DefaultDeserializedDescriptorFactory.createPackageFragmentProvider(
|
||||||
library,
|
library = library,
|
||||||
CachingIdeKonanLibraryMetadataLoader,
|
packageAccessHandler = CachingIdeKlibMetadataLoader,
|
||||||
libraryProto.packageFragmentNameList,
|
packageFragmentNames = packageFragmentNames,
|
||||||
storageManager,
|
storageManager = storageManager,
|
||||||
moduleDescriptor,
|
moduleDescriptor = moduleDescriptor,
|
||||||
deserializationConfiguration,
|
configuration = CompilerDeserializationConfiguration(languageVersionSettings),
|
||||||
null
|
compositePackageFragmentAddend = null
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user