Use cache everywhere where K/N KLIBs are read in IDE
This commit is contained in:
committed by
alexander-gorshenev
parent
185b10fa06
commit
781c73335d
@@ -49,9 +49,7 @@ val BaseKotlinLibrary.uniqueName: String
|
||||
|
||||
val BaseKotlinLibrary.unresolvedDependencies: List<UnresolvedLibrary>
|
||||
get() = manifestProperties.propertyList(KLIB_PROPERTY_DEPENDS, escapeInQuotes = true)
|
||||
.map {
|
||||
UnresolvedLibrary(it, manifestProperties.getProperty("dependency_version_$it"))
|
||||
}
|
||||
.map { UnresolvedLibrary(it, manifestProperties.getProperty("dependency_version_$it")) }
|
||||
|
||||
interface KotlinLibrary : BaseKotlinLibrary, MetadataLibrary, IrLibrary
|
||||
|
||||
@@ -60,11 +58,11 @@ val KotlinLibrary.isInterop
|
||||
get() = manifestProperties.getProperty(KLIB_PROPERTY_INTEROP) == "true"
|
||||
|
||||
val KotlinLibrary.packageFqName: String?
|
||||
get() = manifestProperties.getProperty(org.jetbrains.kotlin.library.KLIB_PROPERTY_PACKAGE)
|
||||
get() = manifestProperties.getProperty(KLIB_PROPERTY_PACKAGE)
|
||||
|
||||
val KotlinLibrary.exportForwardDeclarations
|
||||
get() = manifestProperties.propertyList(KLIB_PROPERTY_EXPORT_FORWARD_DECLARATIONS, escapeInQuotes = true)
|
||||
.asSequence()
|
||||
.map { it.trim() }
|
||||
.filter { it.isNotEmpty() }
|
||||
.toList()
|
||||
.toList()
|
||||
|
||||
@@ -19,6 +19,9 @@ package org.jetbrains.kotlin.library
|
||||
import org.jetbrains.kotlin.konan.file.File
|
||||
import org.jetbrains.kotlin.library.KLIB_METADATA_FILE_EXTENSION_WITH_DOT
|
||||
|
||||
const val KLIB_MANIFEST_FILE_NAME = "manifest"
|
||||
const val KLIB_MODULE_METADATA_FILE_NAME = "module"
|
||||
|
||||
/**
|
||||
* This scheme describes the Kotlin/Native Library (KLIB) layout.
|
||||
*/
|
||||
@@ -27,7 +30,7 @@ interface KotlinLibraryLayout {
|
||||
val libraryName: String
|
||||
get() = libDir.path
|
||||
val manifestFile
|
||||
get() = File(libDir, "manifest")
|
||||
get() = File(libDir, KLIB_MANIFEST_FILE_NAME)
|
||||
val resourcesDir
|
||||
get() = File(libDir, "resources")
|
||||
}
|
||||
@@ -36,7 +39,7 @@ interface MetadataKotlinLibraryLayout : KotlinLibraryLayout {
|
||||
val metadataDir
|
||||
get() = File(libDir, "linkdata")
|
||||
val moduleHeaderFile
|
||||
get() = File(metadataDir, "module")
|
||||
get() = File(metadataDir, KLIB_MODULE_METADATA_FILE_NAME)
|
||||
|
||||
fun packageFragmentsDir(packageName: String) =
|
||||
File(metadataDir, if (packageName == "") "root_package" else "package_$packageName")
|
||||
|
||||
@@ -40,18 +40,12 @@ fun createFileStub(project: Project, text: String): PsiFileStub<*> {
|
||||
fun createLoggingErrorReporter(log: Logger) = LoggingErrorReporter(log)
|
||||
|
||||
internal object CachingIdeKonanLibraryMetadataLoader : PackageAccessHandler {
|
||||
override fun loadModuleHeader(
|
||||
library: KotlinLibrary
|
||||
): KlibMetadataProtoBuf.Header {
|
||||
override fun loadModuleHeader(library: KotlinLibrary): KlibMetadataProtoBuf.Header {
|
||||
val virtualFile = getVirtualFile(library, library.moduleHeaderFile)
|
||||
return cache.getCachedModuleHeader(virtualFile)
|
||||
}
|
||||
|
||||
override fun loadPackageFragment(
|
||||
library: KotlinLibrary,
|
||||
packageFqName: String,
|
||||
partName: String
|
||||
): ProtoBuf.PackageFragment {
|
||||
override fun loadPackageFragment(library: KotlinLibrary, packageFqName: String, partName: String): ProtoBuf.PackageFragment {
|
||||
val virtualFile = getVirtualFile(library, library.packageFragmentFile(packageFqName, partName))
|
||||
return cache.getCachedPackageFragment(virtualFile)
|
||||
}
|
||||
@@ -72,15 +66,13 @@ internal object CachingIdeKonanLibraryMetadataLoader : PackageAccessHandler {
|
||||
private val cache
|
||||
get() = KotlinNativeLoadingMetadataCache.getInstance()
|
||||
|
||||
|
||||
private val KotlinLibrary.moduleHeaderFile get() =
|
||||
(this as MetadataLibraryImpl).access.layout.moduleHeaderFile
|
||||
private val KotlinLibrary.moduleHeaderFile
|
||||
get() = (this as MetadataLibraryImpl).access.layout.moduleHeaderFile
|
||||
|
||||
private fun KotlinLibrary.packageFragmentFile(packageFqName: String, partName: String) =
|
||||
(this as MetadataLibraryImpl).access.layout.packageFragmentFile(packageFqName, partName)
|
||||
|
||||
private val KotlinLibrary.isZipped get() =
|
||||
(this as BaseKotlinLibraryImpl).access.layout.isZipped
|
||||
|
||||
private val KotlinLibrary.isZipped
|
||||
get() = (this as BaseKotlinLibraryImpl).access.layout.isZipped
|
||||
}
|
||||
|
||||
|
||||
+11
-20
@@ -43,29 +43,22 @@ import org.jetbrains.kotlin.platform.konan.KonanPlatforms
|
||||
import org.jetbrains.kotlin.resolve.CompilerDeserializationConfiguration
|
||||
import org.jetbrains.kotlin.resolve.ImplicitIntegerCoercion
|
||||
import org.jetbrains.kotlin.resolve.TargetEnvironment
|
||||
import org.jetbrains.kotlin.serialization.deserialization.DeserializationConfiguration
|
||||
import org.jetbrains.kotlin.serialization.konan.impl.KlibMetadataModuleDescriptorFactoryImpl
|
||||
import org.jetbrains.kotlin.storage.StorageManager
|
||||
|
||||
fun KotlinLibrary.createPackageFragmentProvider(
|
||||
storageManager: StorageManager,
|
||||
languageVersionSettings: LanguageVersionSettings,
|
||||
moduleDescriptor: ModuleDescriptor
|
||||
): PackageFragmentProvider {
|
||||
storageManager: StorageManager,
|
||||
languageVersionSettings: LanguageVersionSettings,
|
||||
moduleDescriptor: ModuleDescriptor
|
||||
): PackageFragmentProvider {
|
||||
|
||||
val library = this
|
||||
|
||||
val libraryProto = parseModuleHeader(library.moduleHeaderData)
|
||||
|
||||
//TODO: Is it required somehow?
|
||||
//val moduleName = Name.special(libraryProto.moduleName)
|
||||
//val moduleOrigin = DeserializedKonanModuleOrigin(library)
|
||||
val libraryProto = CachingIdeKonanLibraryMetadataLoader.loadModuleHeader(this)
|
||||
|
||||
val deserializationConfiguration = CompilerDeserializationConfiguration(languageVersionSettings)
|
||||
|
||||
return KonanFactories.DefaultDeserializedDescriptorFactory.createPackageFragmentProvider(
|
||||
library,
|
||||
null,
|
||||
this,
|
||||
CachingIdeKonanLibraryMetadataLoader,
|
||||
libraryProto.packageFragmentNameList,
|
||||
storageManager,
|
||||
moduleDescriptor,
|
||||
@@ -156,7 +149,7 @@ private fun createKotlinNativeBuiltIns(moduleInfo: ModuleInfo, projectContext: P
|
||||
val languageSettings = IDELanguageSettingsProvider.getLanguageVersionSettings(stdlibInfo, project, isReleaseCoroutines = false)
|
||||
val deserializationConfiguration = CompilerDeserializationConfiguration(languageSettings)
|
||||
|
||||
val libraryProto = parseModuleHeader(konanLibrary.moduleHeaderData)
|
||||
val libraryProto = CachingIdeKonanLibraryMetadataLoader.loadModuleHeader(konanLibrary)
|
||||
|
||||
val stdlibFragmentProvider = KonanFactories.DefaultDeserializedDescriptorFactory.createPackageFragmentProvider(
|
||||
konanLibrary,
|
||||
@@ -173,10 +166,7 @@ private fun createKotlinNativeBuiltIns(moduleInfo: ModuleInfo, projectContext: P
|
||||
listOf(
|
||||
stdlibFragmentProvider,
|
||||
(KonanFactories.DefaultDeserializedDescriptorFactory as KlibMetadataModuleDescriptorFactoryImpl)
|
||||
.createForwardDeclarationHackPackagePartProvider(
|
||||
storageManager,
|
||||
builtInsModule
|
||||
)
|
||||
.createForwardDeclarationHackPackagePartProvider(storageManager, builtInsModule)
|
||||
)
|
||||
)
|
||||
)
|
||||
@@ -205,7 +195,8 @@ class NativeLibraryInfo(project: Project, library: Library, root: File) : Librar
|
||||
get() = super.capabilities +
|
||||
mapOf(
|
||||
KlibModuleOrigin.CAPABILITY to this,
|
||||
ImplicitIntegerCoercion.MODULE_CAPABILITY to nativeLibrary.isInterop
|
||||
ImplicitIntegerCoercion.MODULE_CAPABILITY to nativeLibrary.isInterop,
|
||||
NATIVE_LIBRARY_CAPABILITY to nativeLibrary
|
||||
)
|
||||
|
||||
override val platform: TargetPlatform
|
||||
|
||||
+1
-1
@@ -10,7 +10,7 @@ import com.intellij.openapi.components.BaseComponent
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.util.containers.ContainerUtil.createConcurrentWeakValueMap
|
||||
import org.jetbrains.kotlin.konan.library.KLIB_METADATA_FILE_EXTENSION
|
||||
import org.jetbrains.kotlin.konan.library.KLIB_MODULE_METADATA_FILE_NAME
|
||||
import org.jetbrains.kotlin.library.KLIB_MODULE_METADATA_FILE_NAME
|
||||
import org.jetbrains.kotlin.library.metadata.KlibMetadataProtoBuf
|
||||
import org.jetbrains.kotlin.library.metadata.parseModuleHeader
|
||||
import org.jetbrains.kotlin.library.metadata.parsePackageFragment
|
||||
|
||||
@@ -15,10 +15,6 @@ const val KLIB_METADATA_FILE_EXTENSION_WITH_DOT = ".$KLIB_METADATA_FILE_EXTENSIO
|
||||
|
||||
const val KDEFINITIONS_FILE_EXTENSION = "def"
|
||||
|
||||
const val KLIB_MODULE_METADATA_FILE_NAME = "module"
|
||||
|
||||
const val KLIB_MANIFEST_FILE_NAME = "manifest"
|
||||
|
||||
const val KONAN_STDLIB_NAME = "stdlib"
|
||||
|
||||
const val KLIB_DIR_NAME = "klib"
|
||||
|
||||
Reference in New Issue
Block a user