diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmIrCodegenFactory.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmIrCodegenFactory.kt index 20448eacf35..ec2fea20048 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmIrCodegenFactory.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmIrCodegenFactory.kt @@ -115,7 +115,7 @@ class JvmIrCodegenFactory(private val phaseConfig: PhaseConfig) : CodegenFactory } } - val dependencies = psi2irContext.moduleDescriptor.allDependencyModules.map { + val dependencies = psi2irContext.moduleDescriptor.collectAllDependencyModulesTransitively().map { val kotlinLibrary = (it.getCapability(KlibModuleOrigin.CAPABILITY) as? DeserializedKlibModuleOrigin)?.library if (it.hasJdkCapability) { // For IDE environment only, i.e. when compiling for debugger @@ -153,6 +153,17 @@ class JvmIrCodegenFactory(private val phaseConfig: PhaseConfig) : CodegenFactory ) } + private fun ModuleDescriptor.collectAllDependencyModulesTransitively(): List { + val result = LinkedHashSet() + fun collectImpl(descriptor: ModuleDescriptor) { + val dependencies = descriptor.allDependencyModules + dependencies.forEach { if (it !in result) collectImpl(it) } + result += dependencies + } + collectImpl(this) + return result.toList() + } + fun doGenerateFilesInternal(input: JvmIrBackendInput) { val (state, irModuleFragment, symbolTable, sourceManager, phaseConfig, irProviders, extensions, backendExtension) = input val context = JvmBackendContext(