diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/KotlinIrLinker.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/KotlinIrLinker.kt index 29adf1b34bf..e8d6a37cae4 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/KotlinIrLinker.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/KotlinIrLinker.kt @@ -423,30 +423,18 @@ abstract class KotlinIrLinker( moduleReversedFileIndex.getOrPut(uniqId) { fileDeserializer } } - when (deserializationStrategy) { - DeserializationStrategy.EXPLICITLY_EXPORTED -> { - fileProto.explicitlyExportedToCompilerList.forEach { - val symbolProto = fileDeserializer.loadSymbolData(it.index) - val topLevelUniqId = symbolProto.topLevelUniqId - val uniqId = topLevelUniqId.uniqId() - assert(uniqId.isPublic) -// if (topLevelUniqId.isLocal) { -// fileDeserializer.fileLocalDeserializationState.addUniqID(uniqId) -// } else { - moduleDeserializationState.addUniqID(uniqId) -// } + val forceLoadedIds = deserializationStrategy.run { + when { + theWholeWorld -> fileProto.declarationIdList + explicitlyExported -> fileProto.explicitlyExportedToCompilerList.map { + fileDeserializer.loadSymbolData(it.index).topLevelUniqId } + else -> emptyList() } - DeserializationStrategy.ALL -> { - fileProto.declarationIdList.forEach { - val uniqId = it.uniqId() - assert(uniqId.isPublic) - moduleDeserializationState.addUniqID(uniqId) - } - } - else -> error("Unexpected deserialization strategy") } + forceLoadedIds.forEach { moduleDeserializationState.addUniqID(it.uniqId().also { i -> assert(i.isPublic) }) } + return file } @@ -626,11 +614,14 @@ abstract class KotlinIrLinker( fun deserializeFullModule(moduleDescriptor: ModuleDescriptor): IrModuleFragment = deserializeIrModuleHeader(moduleDescriptor, DeserializationStrategy.ALL) + + fun deserializeOnlyHeaderModule(moduleDescriptor: ModuleDescriptor): IrModuleFragment = + deserializeIrModuleHeader(moduleDescriptor, DeserializationStrategy.ONLY_DECLARATION_HEADERS) } -enum class DeserializationStrategy(val needBodies: Boolean) { - ONLY_REFERENCED(true), - ALL(true), - EXPLICITLY_EXPORTED(true), - ONLY_DECLARATION_HEADERS(false) +enum class DeserializationStrategy(val needBodies: Boolean, val explicitlyExported: Boolean, val theWholeWorld: Boolean) { + ONLY_REFERENCED(true, false, false), + ALL(true, true, true), + EXPLICITLY_EXPORTED(true, true, false), + ONLY_DECLARATION_HEADERS(false, false, false) } diff --git a/compiler/ir/serialization.js/build.gradle.kts b/compiler/ir/serialization.js/build.gradle.kts index b0ef55d02c1..6d98c2fa405 100644 --- a/compiler/ir/serialization.js/build.gradle.kts +++ b/compiler/ir/serialization.js/build.gradle.kts @@ -15,6 +15,7 @@ dependencies { testCompile(project(":compiler:cli")) testCompile(project(":compiler:util")) + testRuntime(project(":kotlin-reflect")) testRuntime(intellijDep()) { includeJars("picocontainer", "trove4j", "guava", "jdom", rootProject = rootProject) } }