IJPL-217708 First try to get plugin descriptor from cache

GitOrigin-RevId: 22501f0f3846893b1a85aebec2cf7df95f8a5a38
This commit is contained in:
Nikolay Rykunov
2025-11-13 19:08:20 +00:00
committed by intellij-monorepo-bot
parent 030a14314f
commit abdc98bd02
4 changed files with 12 additions and 6 deletions
@@ -99,13 +99,15 @@ internal fun generateClassPathByLayoutReport(libDir: Path, entries: List<Distrib
* so we would like to include all distribution entities of **embedded** modules (and their libraries) from plugins marked with `use-idea-classloader`.
*/
internal fun generateCoreClasspathFromPlugins(
platformLayout: PlatformLayout,
context: BuildContext,
pluginEntities: List<PluginBuildDescriptor>,
): Set<Path> {
val classPathResult = mutableSetOf<Path>()
for (pluginEntity in pluginEntities) {
val pluginLayout = pluginEntity.layout
val classPathModules = getEmbeddedContentModulesOfPluginsWithUseIdeaClassloader(context, pluginLayout.mainModule)
val cacheContainer = platformLayout.descriptorCacheContainer.forPlugin(pluginEntity.dir)
val classPathModules = getEmbeddedContentModulesOfPluginsWithUseIdeaClassloader(context, pluginLayout.mainModule, cacheContainer)
for (distributionEntry in pluginEntity.distribution) {
if (distributionEntry is ModuleOwnedFileEntry && distributionEntry.owner?.moduleName in classPathModules) {
classPathResult.add(distributionEntry.path)
@@ -122,9 +124,11 @@ internal fun generateCoreClasspathFromPlugins(
internal fun getEmbeddedContentModulesOfPluginsWithUseIdeaClassloader(
context: BuildContext,
pluginMainModule: String,
cacheContainer: ScopedCachedDescriptorContainer?,
): Set<String> {
val pluginModule = context.findRequiredModule(pluginMainModule)
val pluginXmlContent = getUnprocessedPluginXmlContent(pluginModule, context).decodeToString()
val pluginXmlBytes = cacheContainer?.getCachedFileData(PLUGIN_XML_RELATIVE_PATH) ?: getUnprocessedPluginXmlContent(pluginModule, context)
val pluginXmlContent = pluginXmlBytes.decodeToString()
val rootElement = JDOMUtil.load(pluginXmlContent)
if (rootElement.getAttribute("use-idea-classloader")?.value?.toBoolean() != true) {
return emptySet()
@@ -235,7 +235,8 @@ internal suspend fun buildProduct(request: BuildRequest, createProductProperties
launch {
val platformClasspath = platformLayoutResultDeferred.await().coreClassPath
val pluginDistributionEntities = pluginDistributionEntriesDeferred.await().pluginEntries
val coreClasspathFromPlugins = generateCoreClasspathFromPlugins(context, pluginDistributionEntities)
val platformLayoutAwaited = platformLayout.await()
val coreClasspathFromPlugins = generateCoreClasspathFromPlugins(platformLayoutAwaited, context, pluginDistributionEntities)
val classPath = platformClasspath + coreClasspathFromPlugins
if (request.writeCoreClasspath) {
@@ -138,7 +138,7 @@ internal suspend fun buildDistribution(
)
val platformItems = buildPlatformJob.await()
context.bootClassPathJarNames = generateCoreClassPath(context, platformItems, bundledPluginItems)
context.bootClassPathJarNames = generateCoreClassPath(platformLayout, context, platformItems, bundledPluginItems)
ContentReport(platform = platformItems, bundledPlugins = bundledPluginItems, nonBundledPlugins = buildNonBundledPlugins.await())
}
@@ -167,6 +167,7 @@ internal suspend fun buildDistribution(
}
private fun generateCoreClassPath(
platformLayout: PlatformLayout,
context: BuildContext,
platformDistribution: List<DistributionFileEntry>,
bundledPluginsDistribution: List<PluginBuildDescriptor>,
@@ -181,7 +182,7 @@ private fun generateCoreClassPath(
skipNioFs = isMultiRoutingFileSystemEnabledForProduct(context.productProperties.platformPrefix)
).map { libDir.relativize(it).toString() }
val pluginsDir = context.paths.distAllDir.resolve("plugins")
val coreClassPathFromPlugins = generateCoreClasspathFromPlugins(context, bundledPluginsDistribution).map { pluginsDir.resolve(it).toString() }
val coreClassPathFromPlugins = generateCoreClasspathFromPlugins(platformLayout, context, bundledPluginsDistribution).map { pluginsDir.resolve(it).toString() }
return platformClassPath + coreClassPathFromPlugins
}
@@ -520,7 +520,7 @@ private suspend fun computeImplicitRequiredModules(
private fun computeContentModulesPluginsWhichUseIdeaClassloader(context: BuildContext): Set<String> {
val bundledPlugins = getPluginLayoutsByJpsModuleNames(modules = context.getBundledPluginModules(), productLayout = context.productProperties.productLayout)
val pluginContents = bundledPlugins.flatMap { getEmbeddedContentModulesOfPluginsWithUseIdeaClassloader(context, it.mainModule) }.toSet()
val pluginContents = bundledPlugins.flatMap { getEmbeddedContentModulesOfPluginsWithUseIdeaClassloader(context, it.mainModule, cacheContainer = null) }.toSet()
return pluginContents
}