[KLIB] Resolve deserialization on for each file separately
Needs for IC
This commit is contained in:
committed by
TeamCityServer
parent
28ffcf1e81
commit
78cd45f937
+6
-5
@@ -25,7 +25,7 @@ abstract class BasicIrModuleDeserializer(
|
||||
val linker: KotlinIrLinker,
|
||||
moduleDescriptor: ModuleDescriptor,
|
||||
override val klib: IrLibrary,
|
||||
override val strategy: DeserializationStrategy,
|
||||
override val strategyResolver: (String) -> DeserializationStrategy,
|
||||
libraryAbiVersion: KotlinAbiVersion,
|
||||
private val containsErrorCode: Boolean = false
|
||||
) :
|
||||
@@ -106,15 +106,16 @@ abstract class BasicIrModuleDeserializer(
|
||||
|
||||
val fileReader = IrLibraryFileFromKlib(moduleDeserializer.klib, fileIndex)
|
||||
val file = fileReader.createFile(moduleFragment, fileProto)
|
||||
val fileStrategy = strategyResolver(file.fileEntry.name)
|
||||
|
||||
val fileDeserializationState = FileDeserializationState(
|
||||
linker,
|
||||
file,
|
||||
fileReader,
|
||||
fileProto,
|
||||
strategy.needBodies,
|
||||
fileStrategy.needBodies,
|
||||
allowErrorNodes,
|
||||
strategy.inlineBodies,
|
||||
fileStrategy.inlineBodies,
|
||||
moduleDeserializer
|
||||
)
|
||||
|
||||
@@ -125,10 +126,10 @@ abstract class BasicIrModuleDeserializer(
|
||||
moduleReversedFileIndex.putIfAbsent(it, fileDeserializationState) // TODO Why not simple put?
|
||||
}
|
||||
|
||||
if (strategy.theWholeWorld) {
|
||||
if (fileStrategy.theWholeWorld) {
|
||||
fileDeserializationState.enqueueAllDeclarations()
|
||||
}
|
||||
if (strategy.theWholeWorld || strategy.explicitlyExported) {
|
||||
if (fileStrategy.theWholeWorld || fileStrategy.explicitlyExported) {
|
||||
moduleDeserializationState.enqueueFile(fileDeserializationState)
|
||||
}
|
||||
|
||||
|
||||
+3
-3
@@ -85,7 +85,7 @@ abstract class IrModuleDeserializer(val moduleDescriptor: ModuleDescriptor, val
|
||||
|
||||
abstract val moduleDependencies: Collection<IrModuleDeserializer>
|
||||
|
||||
open val strategy: DeserializationStrategy = DeserializationStrategy.ONLY_DECLARATION_HEADERS
|
||||
open val strategyResolver: (String) -> DeserializationStrategy = { DeserializationStrategy.ONLY_DECLARATION_HEADERS }
|
||||
|
||||
open val isCurrent = false
|
||||
|
||||
@@ -215,8 +215,8 @@ class IrModuleDeserializerWithBuiltIns(
|
||||
override val klib: IrLibrary
|
||||
get() = delegate.klib
|
||||
|
||||
override val strategy: DeserializationStrategy
|
||||
get() = delegate.strategy
|
||||
override val strategyResolver: (String) -> DeserializationStrategy
|
||||
get() = delegate.strategyResolver
|
||||
|
||||
override fun addModuleReachableTopLevel(idSig: IdSignature) {
|
||||
delegate.addModuleReachableTopLevel(idSig)
|
||||
|
||||
+12
-10
@@ -75,7 +75,7 @@ abstract class KotlinIrLinker(
|
||||
protected abstract fun createModuleDeserializer(
|
||||
moduleDescriptor: ModuleDescriptor,
|
||||
klib: KotlinLibrary?,
|
||||
strategy: DeserializationStrategy,
|
||||
strategyResolver: (String) -> DeserializationStrategy,
|
||||
): IrModuleDeserializer
|
||||
|
||||
protected abstract fun isBuiltInModule(moduleDescriptor: ModuleDescriptor): Boolean
|
||||
@@ -281,7 +281,7 @@ abstract class KotlinIrLinker(
|
||||
fun deserializeIrModuleHeader(
|
||||
moduleDescriptor: ModuleDescriptor,
|
||||
kotlinLibrary: KotlinLibrary?,
|
||||
deserializationStrategy: DeserializationStrategy = DeserializationStrategy.ONLY_REFERENCED,
|
||||
deserializationStrategy: (String) -> DeserializationStrategy = { DeserializationStrategy.ONLY_REFERENCED },
|
||||
_moduleName: String? = null
|
||||
): IrModuleFragment {
|
||||
assert(kotlinLibrary != null || _moduleName != null) { "Either library or explicit name have to be provided $moduleDescriptor" }
|
||||
@@ -306,27 +306,29 @@ abstract class KotlinIrLinker(
|
||||
fun deserializeIrModuleHeader(moduleDescriptor: ModuleDescriptor, kotlinLibrary: KotlinLibrary?, moduleName: String): IrModuleFragment {
|
||||
// TODO: consider skip deserializing explicitly exported declarations for libraries.
|
||||
// Now it's not valid because of all dependencies that must be computed.
|
||||
val deserializationStrategy =
|
||||
val deserializationStrategy: (String) -> DeserializationStrategy =
|
||||
if (exportedDependencies.contains(moduleDescriptor)) {
|
||||
DeserializationStrategy.ALL
|
||||
{ DeserializationStrategy.ALL }
|
||||
} else {
|
||||
DeserializationStrategy.EXPLICITLY_EXPORTED
|
||||
{ DeserializationStrategy.EXPLICITLY_EXPORTED }
|
||||
}
|
||||
return deserializeIrModuleHeader(moduleDescriptor, kotlinLibrary, deserializationStrategy, moduleName)
|
||||
}
|
||||
|
||||
fun deserializeFullModule(moduleDescriptor: ModuleDescriptor, kotlinLibrary: KotlinLibrary): IrModuleFragment =
|
||||
deserializeIrModuleHeader(moduleDescriptor, kotlinLibrary, DeserializationStrategy.ALL)
|
||||
deserializeIrModuleHeader(moduleDescriptor, kotlinLibrary, { DeserializationStrategy.ALL })
|
||||
|
||||
fun deserializeOnlyHeaderModule(moduleDescriptor: ModuleDescriptor, kotlinLibrary: KotlinLibrary?): IrModuleFragment =
|
||||
deserializeIrModuleHeader(moduleDescriptor, kotlinLibrary, DeserializationStrategy.ONLY_DECLARATION_HEADERS)
|
||||
deserializeIrModuleHeader(moduleDescriptor, kotlinLibrary, { DeserializationStrategy.ONLY_DECLARATION_HEADERS })
|
||||
|
||||
fun deserializeHeadersWithInlineBodies(moduleDescriptor: ModuleDescriptor, kotlinLibrary: KotlinLibrary): IrModuleFragment =
|
||||
deserializeIrModuleHeader(moduleDescriptor, kotlinLibrary, DeserializationStrategy.WITH_INLINE_BODIES)
|
||||
deserializeIrModuleHeader(moduleDescriptor, kotlinLibrary, { DeserializationStrategy.WITH_INLINE_BODIES })
|
||||
|
||||
@Suppress("UNUSED_PARAMETER")
|
||||
fun deserializeDirtyFiles(moduleDescriptor: ModuleDescriptor, kotlinLibrary: KotlinLibrary, dirtyFiles: Collection<String>): IrModuleFragment {
|
||||
return deserializeFullModule(moduleDescriptor, kotlinLibrary)
|
||||
return deserializeIrModuleHeader(moduleDescriptor, kotlinLibrary, {
|
||||
if (it in dirtyFiles) DeserializationStrategy.ALL
|
||||
else DeserializationStrategy.WITH_INLINE_BODIES
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user