diff --git a/platform/build-scripts/src/org/jetbrains/intellij/build/JarPackagerDependencyHelper.kt b/platform/build-scripts/src/org/jetbrains/intellij/build/JarPackagerDependencyHelper.kt index c44db11d1b0f..07cefdaa7b7a 100644 --- a/platform/build-scripts/src/org/jetbrains/intellij/build/JarPackagerDependencyHelper.kt +++ b/platform/build-scripts/src/org/jetbrains/intellij/build/JarPackagerDependencyHelper.kt @@ -3,6 +3,7 @@ package org.jetbrains.intellij.build +import com.intellij.platform.runtime.product.RuntimeModuleLoadingRule import com.intellij.util.xml.dom.XmlElement import com.intellij.util.xml.dom.readXmlAsModel import org.jetbrains.intellij.build.impl.ModuleItem @@ -76,7 +77,7 @@ internal class JarPackagerDependencyHelper(private val context: BuildContext) { return element.content!! } - suspend fun readPluginContentFromDescriptor(pluginModule: JpsModule, moduleOutputPatcher: ModuleOutputPatcher): Sequence { + suspend fun readPluginContentFromDescriptor(pluginModule: JpsModule, moduleOutputPatcher: ModuleOutputPatcher): Sequence> { return readPluginContentFromDescriptor(getResolvedPluginDescriptor(pluginModule, moduleOutputPatcher)) } @@ -88,15 +89,21 @@ internal class JarPackagerDependencyHelper(private val context: BuildContext) { // The x-include is not resolved. If the plugin.xml includes any files, the content from these included files will not be considered. fun readPluginIncompleteContentFromDescriptor(pluginModule: JpsModule): Sequence { val pluginXml = context.findFileInModuleSources(pluginModule, "META-INF/plugin.xml") ?: return emptySequence() - return readPluginContentFromDescriptor(readXmlAsModel(pluginXml)) + return readPluginContentFromDescriptor(readXmlAsModel(pluginXml)).map { it.first } } - private fun readPluginContentFromDescriptor(pluginDescriptor: XmlElement): Sequence { + private fun readPluginContentFromDescriptor(pluginDescriptor: XmlElement): Sequence> { return sequence { for (content in pluginDescriptor.children("content")) { for (module in content.children("module")) { val moduleName = module.attributes.get("name")?.takeIf { !it.contains('/') } ?: continue - yield(moduleName) + val loadingRuleString = module.attributes.get("loading") + val loadingRule = when (loadingRuleString) { + "required" -> RuntimeModuleLoadingRule.REQUIRED + "on-demand" -> RuntimeModuleLoadingRule.ON_DEMAND + else -> RuntimeModuleLoadingRule.OPTIONAL + } + yield(moduleName to loadingRule) } } } diff --git a/platform/build-scripts/src/org/jetbrains/intellij/build/autoLayout.kt b/platform/build-scripts/src/org/jetbrains/intellij/build/autoLayout.kt index 60d53ddccc12..0b906bfe52f2 100644 --- a/platform/build-scripts/src/org/jetbrains/intellij/build/autoLayout.kt +++ b/platform/build-scripts/src/org/jetbrains/intellij/build/autoLayout.kt @@ -1,6 +1,7 @@ // Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.jetbrains.intellij.build +import com.intellij.platform.runtime.product.RuntimeModuleLoadingRule import com.intellij.util.xml.dom.readXmlAsModel import org.jetbrains.intellij.build.impl.* @@ -60,7 +61,7 @@ internal suspend fun computeModuleSourcesByContent( jarPackager: JarPackager, searchableOptionSet: SearchableOptionSetDescriptor? ) { - for (moduleName in helper.readPluginContentFromDescriptor(context.findRequiredModule(layout.mainModule), jarPackager.moduleOutputPatcher)) { + for ((moduleName, loadingRule) in helper.readPluginContentFromDescriptor(context.findRequiredModule(layout.mainModule), jarPackager.moduleOutputPatcher)) { // CWM plugin is overcomplicated without any valid reason - it must be refactored if (moduleName == "intellij.driver.backend.split" || !addedModules.add(moduleName)) { continue @@ -70,7 +71,7 @@ internal suspend fun computeModuleSourcesByContent( val forTests = (context as? BuildContextImpl)?.jarPackagerDependencyHelper?.isTestPluginModule(moduleName) ?: false val descriptor = readXmlAsModel(context.findFileInModuleSources(module, "$moduleName.xml", forTests) ?: error("$moduleName.xml not found in module $moduleName sources")) - val useSeparateJar = descriptor.getAttributeValue("package") == null || helper.isPluginModulePackedIntoSeparateJar(module, layout) + val useSeparateJar = (descriptor.getAttributeValue("package") == null || helper.isPluginModulePackedIntoSeparateJar(module, layout)) && loadingRule != RuntimeModuleLoadingRule.REQUIRED jarPackager.computeSourcesForModule( item = ModuleItem( moduleName = moduleName,