IJPL-209476 we have 3+ packaging tests now - do not duplicate product module info in each content report, avoid getting approval for each product

GitOrigin-RevId: 62dba088d24badacde4f6873fe9b1efb80a0449a
This commit is contained in:
Vladimir Krivosheev
2025-10-09 07:56:57 +00:00
committed by intellij-monorepo-bot
parent 201a4d0ef5
commit 6becea3390
204 changed files with 1124 additions and 61 deletions
+3
View File
@@ -0,0 +1,3 @@
- name: <file>
modules:
- name: intellij.regexp
+3
View File
@@ -0,0 +1,3 @@
- name: <file>
modules:
- name: fleet.rpc.server
+3
View File
@@ -0,0 +1,3 @@
- name: <file>
modules:
- name: intellij.grid
+3
View File
@@ -0,0 +1,3 @@
- name: <file>
modules:
- name: intellij.grid.core.impl
+3
View File
@@ -0,0 +1,3 @@
- name: <file>
modules:
- name: intellij.grid.csv.core.impl
+3
View File
@@ -0,0 +1,3 @@
- name: <file>
modules:
- name: intellij.grid.impl
+3
View File
@@ -0,0 +1,3 @@
- name: <file>
modules:
- name: intellij.grid.types
@@ -0,0 +1,3 @@
- name: <file>
modules:
- name: intellij.idea.customization.backend
@@ -0,0 +1,3 @@
- name: <file>
modules:
- name: intellij.idea.customization.base
@@ -0,0 +1,3 @@
- name: <file>
modules:
- name: intellij.platform.customization.min
+7
View File
@@ -0,0 +1,7 @@
- name: <file>
modules:
- name: intellij.libraries.aalto.xml
library: aalto-xml
files:
- name: $MAVEN_REPOSITORY$/com/fasterxml/aalto-xml/1/aalto-xml-1.jar
- name: $MAVEN_REPOSITORY$/org/codehaus/woodstox/stax2-api/4/stax2-api-4.jar
+6
View File
@@ -0,0 +1,6 @@
- name: <file>
modules:
- name: intellij.libraries.asm
library: ASM
files:
- name: $MAVEN_REPOSITORY$/org/jetbrains/intellij/deps/asm-all/9/asm-all-9.jar
+6
View File
@@ -0,0 +1,6 @@
- name: <file>
modules:
- name: intellij.libraries.caffeine
library: caffeine
files:
- name: $MAVEN_REPOSITORY$/com/github/ben-manes/caffeine/caffeine/3/caffeine-3.jar
+19
View File
@@ -0,0 +1,19 @@
- name: <file>
modules:
- name: intellij.libraries.coil
libraries:
io.coil.kt.coil3.network.ktor3.jvm:
- name: $MAVEN_REPOSITORY$/io/coil-kt/coil3/coil-network-ktor3-jvm/3/coil-network-ktor3-jvm-3.jar
- name: $MAVEN_REPOSITORY$/io/coil-kt/coil3/coil-core-jvm/3/coil-core-jvm-3.jar
- name: $MAVEN_REPOSITORY$/com/squareup/okio/okio-jvm/3/okio-jvm-3.jar
- name: $MAVEN_REPOSITORY$/io/coil-kt/coil3/coil-network-core-jvm/3/coil-network-core-jvm-3.jar
io.coil.kt.coil3.svg.jvm:
- name: $MAVEN_REPOSITORY$/io/coil-kt/coil3/coil-svg-jvm/3/coil-svg-jvm-3.jar
- name: $MAVEN_REPOSITORY$/io/coil-kt/coil3/coil-core-jvm/3/coil-core-jvm-3.jar
- name: $MAVEN_REPOSITORY$/com/squareup/okio/okio-jvm/3/okio-jvm-3.jar
io.coil.kt.coil3.compose.jvm:
- name: $MAVEN_REPOSITORY$/io/coil-kt/coil3/coil-compose-jvm/3/coil-compose-jvm-3.jar
- name: $MAVEN_REPOSITORY$/io/coil-kt/coil3/coil-jvm/3/coil-jvm-3.jar
- name: $MAVEN_REPOSITORY$/io/coil-kt/coil3/coil-core-jvm/3/coil-core-jvm-3.jar
- name: $MAVEN_REPOSITORY$/com/squareup/okio/okio-jvm/3/okio-jvm-3.jar
- name: $MAVEN_REPOSITORY$/io/coil-kt/coil3/coil-compose-core-jvm/3/coil-compose-core-jvm-3.jar
@@ -0,0 +1,33 @@
- name: <file>
modules:
- name: intellij.libraries.compose.foundation.desktop
libraries:
compose-foundation-desktop:
- name: $MAVEN_REPOSITORY$/org/jetbrains/compose/foundation/foundation-desktop/1/foundation-desktop-1.jar
- name: $MAVEN_REPOSITORY$/androidx/annotation/annotation-jvm/1/annotation-jvm-1.jar
- name: $MAVEN_REPOSITORY$/androidx/collection/collection-jvm/1/collection-jvm-1.jar
- name: $MAVEN_REPOSITORY$/org/jetbrains/compose/animation/animation-desktop/1/animation-desktop-1.jar
- name: $MAVEN_REPOSITORY$/org/jetbrains/compose/animation/animation-core-desktop/1/animation-core-desktop-1.jar
- name: $MAVEN_REPOSITORY$/org/jetbrains/compose/ui/ui-geometry-desktop/1/ui-geometry-desktop-1.jar
- name: $MAVEN_REPOSITORY$/org/jetbrains/compose/foundation/foundation-layout-desktop/1/foundation-layout-desktop-1.jar
- name: $MAVEN_REPOSITORY$/org/jetbrains/compose/ui/ui-desktop/1/ui-desktop-1.jar
- name: $MAVEN_REPOSITORY$/androidx/lifecycle/lifecycle-common-jvm/2/lifecycle-common-jvm-2.jar
- name: $MAVEN_REPOSITORY$/org/jspecify/jspecify/1/jspecify-1.jar
- name: $MAVEN_REPOSITORY$/androidx/lifecycle/lifecycle-runtime-desktop/2/lifecycle-runtime-desktop-2.jar
- name: $MAVEN_REPOSITORY$/androidx/arch/core/core-common/2/core-common-2.jar
- name: $MAVEN_REPOSITORY$/androidx/annotation/annotation/1/annotation-1.jar
- name: $MAVEN_REPOSITORY$/androidx/lifecycle/lifecycle-viewmodel-desktop/2/lifecycle-viewmodel-desktop-2.jar
- name: $MAVEN_REPOSITORY$/androidx/lifecycle/lifecycle-viewmodel-savedstate-desktop/2/lifecycle-viewmodel-savedstate-desktop-2.jar
- name: $MAVEN_REPOSITORY$/androidx/savedstate/savedstate-desktop/1/savedstate-desktop-1.jar
- name: $MAVEN_REPOSITORY$/org/jetbrains/androidx/lifecycle/lifecycle-runtime-compose-desktop/2/lifecycle-runtime-compose-desktop-2.jar
- name: $MAVEN_REPOSITORY$/androidx/lifecycle/lifecycle-runtime-compose-desktop/2/lifecycle-runtime-compose-desktop-2.jar
- name: $MAVEN_REPOSITORY$/org/jetbrains/compose/runtime/runtime-saveable-desktop/1/runtime-saveable-desktop-1.jar
- name: $MAVEN_REPOSITORY$/androidx/compose/runtime/runtime-saveable-desktop/1/runtime-saveable-desktop-1.jar
- name: $MAVEN_REPOSITORY$/androidx/savedstate/savedstate-compose-desktop/1/savedstate-compose-desktop-1.jar
- name: $MAVEN_REPOSITORY$/org/jetbrains/androidx/savedstate/savedstate-compose-desktop/1/savedstate-compose-desktop-1.jar
- name: $MAVEN_REPOSITORY$/org/jetbrains/compose/ui/ui-backhandler-desktop/1/ui-backhandler-desktop-1.jar
- name: $MAVEN_REPOSITORY$/org/jetbrains/compose/ui/ui-graphics-desktop/1/ui-graphics-desktop-1.jar
- name: $MAVEN_REPOSITORY$/org/jetbrains/compose/ui/ui-unit-desktop/1/ui-unit-desktop-1.jar
- name: $MAVEN_REPOSITORY$/org/jetbrains/compose/ui/ui-text-desktop/1/ui-text-desktop-1.jar
- name: $MAVEN_REPOSITORY$/org/jetbrains/compose/ui/ui-util-desktop/1/ui-util-desktop-1.jar
- name: $MAVEN_REPOSITORY$/org/jetbrains/kotlinx/atomicfu-jvm/0/atomicfu-jvm-0.jar
@@ -0,0 +1,9 @@
- name: <file>
modules:
- name: intellij.libraries.compose.runtime.desktop
libraries:
compose.runtime.desktop:
- name: $MAVEN_REPOSITORY$/androidx/compose/runtime/runtime-desktop/1/runtime-desktop-1.jar
- name: $MAVEN_REPOSITORY$/androidx/collection/collection-jvm/1/collection-jvm-1.jar
- name: $MAVEN_REPOSITORY$/androidx/annotation/annotation-jvm/1/annotation-jvm-1.jar
- name: $MAVEN_REPOSITORY$/androidx/compose/runtime/runtime-annotation-jvm/1/runtime-annotation-jvm-1.jar
+6
View File
@@ -0,0 +1,6 @@
- name: <file>
modules:
- name: intellij.libraries.fastutil
library: fastutil-min
files:
- name: $MAVEN_REPOSITORY$/org/jetbrains/intellij/deps/fastutil/intellij-deps-fastutil/8/intellij-deps-fastutil-8.jar
@@ -0,0 +1,7 @@
- name: <file>
modules:
- name: intellij.libraries.grpc.netty.shaded
library: grpc-netty-shaded
files:
- name: $MAVEN_REPOSITORY$/io/grpc/grpc-netty-shaded/1/grpc-netty-shaded-1.jar
- name: $MAVEN_REPOSITORY$/io/grpc/grpc-util/1/grpc-util-1.jar
+23
View File
@@ -0,0 +1,23 @@
- name: <file>
projectLibraries:
- name: grpc-core
files:
- name: $MAVEN_REPOSITORY$/io/grpc/grpc-core/1/grpc-core-1.jar
- name: $MAVEN_REPOSITORY$/io/grpc/grpc-api/1/grpc-api-1.jar
- name: $MAVEN_REPOSITORY$/com/google/android/annotations/4/annotations-4.jar
- name: $MAVEN_REPOSITORY$/org/codehaus/mojo/animal-sniffer-annotations/1/animal-sniffer-annotations-1.jar
- name: $MAVEN_REPOSITORY$/io/perfmark/perfmark-api/0/perfmark-api-0.jar
- name: $MAVEN_REPOSITORY$/io/grpc/grpc-context/1/grpc-context-1.jar
- name: grpc-kotlin-stub
files:
- name: $MAVEN_REPOSITORY$/io/grpc/grpc-kotlin-stub/1/grpc-kotlin-stub-1.jar
- name: grpc-protobuf
files:
- name: $MAVEN_REPOSITORY$/io/grpc/grpc-protobuf/1/grpc-protobuf-1.jar
- name: $MAVEN_REPOSITORY$/com/google/api/grpc/proto-google-common-protos/2/proto-google-common-protos-2.jar
- name: $MAVEN_REPOSITORY$/io/grpc/grpc-protobuf-lite/1/grpc-protobuf-lite-1.jar
- name: grpc-stub
files:
- name: $MAVEN_REPOSITORY$/io/grpc/grpc-stub/1/grpc-stub-1.jar
modules:
- name: intellij.libraries.grpc
+6
View File
@@ -0,0 +1,6 @@
- name: <file>
modules:
- name: intellij.libraries.gson
library: gson
files:
- name: $MAVEN_REPOSITORY$/com/google/code/gson/gson/2/gson-2.jar
+7
View File
@@ -0,0 +1,7 @@
- name: <file>
modules:
- name: intellij.libraries.guava
library: Guava
files:
- name: $MAVEN_REPOSITORY$/com/google/guava/guava/33/guava-33.jar
- name: $MAVEN_REPOSITORY$/com/google/guava/failureaccess/1/failureaccess-1.jar
+6
View File
@@ -0,0 +1,6 @@
- name: <file>
modules:
- name: intellij.libraries.hash4j
libraries:
hash4j:
- name: $MAVEN_REPOSITORY$/com/dynatrace/hash4j/hash4j/0/hash4j-0.jar
+6
View File
@@ -0,0 +1,6 @@
- name: <file>
modules:
- name: intellij.libraries.icu4j
library: icu4j
files:
- name: $MAVEN_REPOSITORY$/com/ibm/icu/icu4j/77/icu4j-77.jar
+7
View File
@@ -0,0 +1,7 @@
- name: <file>
modules:
- name: intellij.libraries.kotlinx.io
library: kotlinx-io-core
files:
- name: $MAVEN_REPOSITORY$/org/jetbrains/kotlinx/kotlinx-io-core-jvm/0/kotlinx-io-core-jvm-0.jar
- name: $MAVEN_REPOSITORY$/org/jetbrains/kotlinx/kotlinx-io-bytestring-jvm/0/kotlinx-io-bytestring-jvm-0.jar
+3
View File
@@ -0,0 +1,3 @@
- name: <file>
modules:
- name: intellij.libraries.ion
@@ -0,0 +1,7 @@
- name: <file>
modules:
- name: intellij.libraries.jackson.databind
library: jackson-databind
files:
- name: $MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-databind/2/jackson-databind-2.jar
- name: $MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-annotations/2/jackson-annotations-2.jar
@@ -0,0 +1,6 @@
- name: <file>
modules:
- name: intellij.libraries.jackson
library: jackson
files:
- name: $MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-core/2/jackson-core-2.jar
@@ -0,0 +1,6 @@
- name: <file>
modules:
- name: intellij.libraries.jackson.jr.objects
library: jackson-jr-objects
files:
- name: $MAVEN_REPOSITORY$/com/fasterxml/jackson/jr/jackson-jr-objects/2/jackson-jr-objects-2.jar
@@ -0,0 +1,6 @@
- name: <file>
modules:
- name: intellij.libraries.jackson.module.kotlin
library: jackson-module-kotlin
files:
- name: $MAVEN_REPOSITORY$/com/fasterxml/jackson/module/jackson-module-kotlin/2/jackson-module-kotlin-2.jar
@@ -0,0 +1,6 @@
- name: <file>
modules:
- name: intellij.libraries.kotlin.reflect
library: kotlin-reflect
files:
- name: $MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-reflect/2/kotlin-reflect-2.jar
@@ -0,0 +1,6 @@
- name: <file>
modules:
- name: intellij.libraries.kotlinx.coroutines.slf4j
library: kotlinx-coroutines-slf4j
files:
- name: $MAVEN_REPOSITORY$/com/intellij/platform/kotlinx-coroutines-slf4j/1/kotlinx-coroutines-slf4j-1.jar
@@ -0,0 +1,6 @@
- name: <file>
modules:
- name: intellij.libraries.kotlinx.serialization.core
library: kotlinx-serialization-core
files:
- name: $MAVEN_REPOSITORY$/org/jetbrains/kotlinx/kotlinx-serialization-core-jvm/1/kotlinx-serialization-core-jvm-1.jar
@@ -0,0 +1,6 @@
- name: <file>
modules:
- name: intellij.libraries.kotlinx.serialization.json
library: kotlinx-serialization-json
files:
- name: $MAVEN_REPOSITORY$/org/jetbrains/kotlinx/kotlinx-serialization-json-jvm/1/kotlinx-serialization-json-jvm-1.jar
@@ -0,0 +1,6 @@
- name: <file>
modules:
- name: intellij.libraries.ktor.client.cio
libraries:
ktor-client-cio-internal:
- name: $MAVEN_REPOSITORY$/io/ktor/ktor-client-cio-jvm/3/ktor-client-cio-jvm-3.jar
+36
View File
@@ -0,0 +1,36 @@
- name: <file>
projectLibraries:
- name: kotlinx-serialization-json-io
files:
- name: $MAVEN_REPOSITORY$/org/jetbrains/kotlinx/kotlinx-serialization-json-io-jvm/1/kotlinx-serialization-json-io-jvm-1.jar
- name: ktor-client-auth
files:
- name: $MAVEN_REPOSITORY$/io/ktor/ktor-client-auth-jvm/3/ktor-client-auth-jvm-3.jar
- name: ktor-client-content-negotiation
files:
- name: $MAVEN_REPOSITORY$/io/ktor/ktor-client-content-negotiation-jvm/3/ktor-client-content-negotiation-jvm-3.jar
- name: ktor-client-core
files:
- name: $MAVEN_REPOSITORY$/io/ktor/ktor-client-core-jvm/3/ktor-client-core-jvm-3.jar
- name: $MAVEN_REPOSITORY$/io/ktor/ktor-http-jvm/3/ktor-http-jvm-3.jar
- name: $MAVEN_REPOSITORY$/io/ktor/ktor-http-cio-jvm/3/ktor-http-cio-jvm-3.jar
- name: $MAVEN_REPOSITORY$/io/ktor/ktor-events-jvm/3/ktor-events-jvm-3.jar
- name: $MAVEN_REPOSITORY$/io/ktor/ktor-websocket-serialization-jvm/3/ktor-websocket-serialization-jvm-3.jar
- name: $MAVEN_REPOSITORY$/io/ktor/ktor-serialization-jvm/3/ktor-serialization-jvm-3.jar
- name: $MAVEN_REPOSITORY$/io/ktor/ktor-websockets-jvm/3/ktor-websockets-jvm-3.jar
- name: $MAVEN_REPOSITORY$/io/ktor/ktor-sse-jvm/3/ktor-sse-jvm-3.jar
- name: ktor-client-encoding
files:
- name: $MAVEN_REPOSITORY$/io/ktor/ktor-client-encoding-jvm/3/ktor-client-encoding-jvm-3.jar
- name: ktor-client-java
files:
- name: $MAVEN_REPOSITORY$/io/ktor/ktor-client-java-jvm/3/ktor-client-java-jvm-3.jar
- name: ktor-client-logging
files:
- name: $MAVEN_REPOSITORY$/io/ktor/ktor-client-logging-jvm/3/ktor-client-logging-jvm-3.jar
- name: ktor-serialization-kotlinx-json
files:
- name: $MAVEN_REPOSITORY$/io/ktor/ktor-serialization-kotlinx-json-jvm/3/ktor-serialization-kotlinx-json-jvm-3.jar
- name: $MAVEN_REPOSITORY$/io/ktor/ktor-serialization-kotlinx-jvm/3/ktor-serialization-kotlinx-jvm-3.jar
modules:
- name: intellij.libraries.ktor.client
+6
View File
@@ -0,0 +1,6 @@
- name: <file>
modules:
- name: intellij.libraries.ktor.io
libraries:
ktor-io:
- name: $MAVEN_REPOSITORY$/io/ktor/ktor-io-jvm/3/ktor-io-jvm-3.jar
@@ -0,0 +1,7 @@
- name: <file>
modules:
- name: intellij.libraries.ktor.network.tls
library: ktor-network-tls
files:
- name: $MAVEN_REPOSITORY$/io/ktor/ktor-network-tls-jvm/3/ktor-network-tls-jvm-3.jar
- name: $MAVEN_REPOSITORY$/io/ktor/ktor-network-jvm/3/ktor-network-jvm-3.jar
+7
View File
@@ -0,0 +1,7 @@
- name: <file>
modules:
- name: intellij.libraries.ktor.utils
libraries:
ktor-utils:
- name: $MAVEN_REPOSITORY$/io/ktor/ktor-utils-jvm/3/ktor-utils-jvm-3.jar
- name: $MAVEN_REPOSITORY$/org/jetbrains/kotlinx/kotlinx-serialization-core-jvm/1/kotlinx-serialization-core-jvm-1.jar
@@ -0,0 +1,10 @@
- name: <file>
projectLibraries:
- name: lucene-analysis-common
files:
- name: $MAVEN_REPOSITORY$/org/apache/lucene/lucene-analysis-common/10/lucene-analysis-common-10.jar
- name: lucene-core
files:
- name: $MAVEN_REPOSITORY$/org/apache/lucene/lucene-core/10/lucene-core-10.jar
modules:
- name: intellij.libraries.lucene.common
+6
View File
@@ -0,0 +1,6 @@
- name: <file>
modules:
- name: intellij.libraries.lz4
library: lz4-java
files:
- name: $MAVEN_REPOSITORY$/org/lz4/lz4-java/1/lz4-java-1.jar
+3
View File
@@ -0,0 +1,3 @@
- name: <file>
modules:
- name: intellij.libraries.microba
@@ -0,0 +1,7 @@
- name: <file>
modules:
- name: intellij.libraries.miglayout.swing
library: miglayout-swing
files:
- name: $MAVEN_REPOSITORY$/com/miglayout/miglayout-swing/11/miglayout-swing-11.jar
- name: $MAVEN_REPOSITORY$/com/miglayout/miglayout-core/11/miglayout-core-11.jar
+3
View File
@@ -0,0 +1,3 @@
- name: <file>
modules:
- name: intellij.libraries.mvstore
+7
View File
@@ -0,0 +1,7 @@
- name: <file>
modules:
- name: intellij.libraries.proxy.vole
library: proxy-vole
files:
- name: $MAVEN_REPOSITORY$/org/bidib/com/github/markusbernhardt/proxy-vole/1/proxy-vole-1.jar
- name: $MAVEN_REPOSITORY$/org/javadelight/delight-rhino-sandbox/0/delight-rhino-sandbox-0.jar
+3
View File
@@ -0,0 +1,3 @@
- name: <file>
modules:
- name: intellij.libraries.rhino
+8
View File
@@ -0,0 +1,8 @@
- name: <file>
modules:
- name: intellij.libraries.skiko
libraries:
jetbrains.skiko.awt.compose:
- name: $MAVEN_REPOSITORY$/org/jetbrains/skiko/skiko-awt/0/skiko-awt-0.jar
jetbrains.skiko.awt.runtime.all:
- name: $MAVEN_REPOSITORY$/org/jetbrains/skiko/skiko-awt-runtime-all/0/skiko-awt-runtime-all-0.jar
+6
View File
@@ -0,0 +1,6 @@
- name: <file>
modules:
- name: intellij.libraries.winp
library: winp
files:
- name: $MAVEN_REPOSITORY$/org/jetbrains/intellij/deps/winp/winp/1/winp-1.jar
+6
View File
@@ -0,0 +1,6 @@
- name: <file>
modules:
- name: intellij.libraries.xerces
libraries:
Xerces:
- name: $MAVEN_REPOSITORY$/xerces/xercesImpl/2/xercesImpl-2.jar
+6
View File
@@ -0,0 +1,6 @@
- name: <file>
modules:
- name: intellij.libraries.xml.rpc
libraries:
xml-rpc:
- name: $MAVEN_REPOSITORY$/org/apache/ws/xmlrpc/xmlrpc/2/xmlrpc-2.jar
+8
View File
@@ -0,0 +1,8 @@
- name: <file>
modules:
- name: intellij.libraries.xstream
libraries:
xstream:
- name: $MAVEN_REPOSITORY$/com/thoughtworks/xstream/xstream/1/xstream-1.jar
- name: $MAVEN_REPOSITORY$/io/github/x-stream/mxparser/1/mxparser-1.jar
- name: $MAVEN_REPOSITORY$/xmlpull/xmlpull/1/xmlpull-1.jar
+6
View File
@@ -0,0 +1,6 @@
- name: <file>
modules:
- name: intellij.libraries.xz
library: xz
files:
- name: $MAVEN_REPOSITORY$/org/tukaani/xz/1/xz-1.jar
+3
View File
@@ -0,0 +1,3 @@
- name: <file>
modules:
- name: intellij.platform.backend
@@ -0,0 +1,3 @@
- name: <file>
modules:
- name: intellij.platform.bookmarks.backend
@@ -0,0 +1,3 @@
- name: <file>
modules:
- name: intellij.platform.bookmarks.frontend
@@ -4,6 +4,7 @@
package org.jetbrains.intellij.build
import com.intellij.platform.util.putMoreLikelyPluginJarsFirst
import org.jetbrains.intellij.build.impl.ModuleIncludeReasons
import org.jetbrains.intellij.build.impl.ModuleOutputPatcher
import org.jetbrains.intellij.build.impl.PlatformJarNames
import org.jetbrains.intellij.build.impl.PlatformJarNames.APP_BACKEND_JAR
@@ -28,15 +29,16 @@ internal fun generateClassPathByLayoutReport(libDir: Path, entries: List<Distrib
val file = entry.path
// exclude files like ext/platform-main.jar - if a file in lib, take only direct children in an account
if ((entry.relativeOutputFile ?: "").contains('/')) {
if ((entry.relativeOutputFile ?: "").contains('/') && !(entry is ModuleOutputEntry && entry.reason == ModuleIncludeReasons.PRODUCT_EMBEDDED_MODULES)) {
continue
}
if (entry is ModuleOutputEntry) {
if (TEST_FRAMEWORK_MODULE_NAMES.contains(entry.moduleName) || entry.moduleName.startsWith("intellij.platform.unitTestMode")) {
val moduleName = entry.owner.moduleName
if (TEST_FRAMEWORK_MODULE_NAMES.contains(moduleName) || moduleName.startsWith("intellij.platform.unitTestMode")) {
continue
}
if (skipNioFs && entry.moduleName == "intellij.platform.core.nio.fs") {
if (skipNioFs && moduleName == "intellij.platform.core.nio.fs") {
continue
}
}
@@ -226,6 +226,8 @@ class ModuleItem(
}
}
internal fun isProductModule(): Boolean = ModuleIncludeReasons.isProductModule(reason)
override fun equals(other: Any?): Boolean {
return this === other || other is ModuleItem && moduleName == other.moduleName && relativeOutputFile == other.relativeOutputFile
}
@@ -1064,8 +1064,8 @@ suspend fun layoutDistribution(
tasks.add(async(CoroutineName("pack $outputDir")) {
spanBuilder("pack").setAttribute("outputDir", outputDir.toString()).use {
JarPackager.pack(
includedModules,
outputDir,
includedModules = includedModules,
outputDir = outputDir,
isRootDir = layout is PlatformLayout,
layout = layout,
platformLayout = platformLayout,
@@ -1221,14 +1221,16 @@ private fun addArtifactMapping(artifact: JpsArtifact, entries: MutableCollection
val rootElement = artifact.rootElement
for (element in rootElement.children) {
if (element is JpsProductionModuleOutputPackagingElement) {
entries.add(ModuleOutputEntry(
path = artifactFile,
moduleName = element.moduleReference.moduleName,
size = 0,
hash = 0,
relativeOutputFile = "",
reason = "artifact: ${artifact.name}",
))
entries.add(
ModuleOutputEntry(
path = artifactFile,
owner = ModuleItem(moduleName = element.moduleReference.moduleName, relativeOutputFile = "DO NOT USE ME", reason = null),
size = 0,
hash = 0,
relativeOutputFile = "",
reason = "artifact: ${artifact.name}",
)
)
}
else if (element is JpsTestModuleOutputPackagingElement) {
entries.add(ModuleTestOutputEntry(path = artifactFile, moduleName = element.moduleReference.moduleName))
@@ -1244,7 +1246,8 @@ private fun addArtifactMapping(artifact: JpsArtifact, entries: MutableCollection
libraryFile = null,
hash = 0,
size = 0,
relativeOutputFile = null
relativeOutputFile = null,
owner = null,
))
}
else {
@@ -1361,7 +1364,7 @@ private fun sortEntries(unsorted: List<DistributionFileEntry>): List<Distributio
compareBy(
{ it.path.invariantSeparatorsPathString },
{ it.type },
{ (it as? ModuleOutputEntry)?.moduleName },
{ (it as? ModuleOutputEntry)?.owner?.moduleName },
{ (it as? LibraryFileEntry)?.libraryFile?.let(::isFromLocalMavenRepo) != true },
{ (it as? LibraryFileEntry)?.libraryFile?.invariantSeparatorsPathString },
)
@@ -1379,7 +1382,7 @@ suspend fun createIdeClassPath(platformLayout: PlatformLayout, context: BuildCon
val libDir = context.paths.distAllDir.resolve("lib")
for (entry in sortEntries(contentReport.platform)) {
if (!(entry is ModuleOutputEntry && entry.reason == ModuleIncludeReasons.PRODUCT_MODULES)) {
if (entry !is ModuleOutputEntry || !ModuleIncludeReasons.isProductModule(entry.reason)) {
val relativePath = libDir.relativize(entry.path)
if (relativePath.nameCount != 1 && !relativePath.startsWith("modules")) {
continue
@@ -1388,7 +1391,7 @@ suspend fun createIdeClassPath(platformLayout: PlatformLayout, context: BuildCon
when (entry) {
is ModuleOutputEntry -> {
classPath.addAll(context.getModuleOutputRoots(context.findRequiredModule(entry.moduleName)))
classPath.addAll(context.getModuleOutputRoots(context.findRequiredModule(entry.owner.moduleName)))
}
is LibraryFileEntry -> classPath.add(entry.libraryFile!!)
else -> throw UnsupportedOperationException("Entry $entry is not supported")
@@ -1406,8 +1409,8 @@ suspend fun createIdeClassPath(platformLayout: PlatformLayout, context: BuildCon
when (entry) {
is ModuleOutputEntry -> {
classPath.addAll(context.getModuleOutputRoots(context.findRequiredModule(entry.moduleName)))
for (classpathPluginEntry in pluginLayouts.firstOrNull { it.mainModule == entry.moduleName }?.scrambleClasspathPlugins ?: emptyList()) {
classPath.addAll(context.getModuleOutputRoots(context.findRequiredModule(entry.owner.moduleName)))
for (classpathPluginEntry in pluginLayouts.firstOrNull { it.mainModule == entry.owner.moduleName }?.scrambleClasspathPlugins ?: emptyList()) {
classPath.addAll(context.getModuleOutputRoots(context.findRequiredModule(classpathPluginEntry.pluginMainModuleName)))
}
}
@@ -446,7 +446,7 @@ class JarPackager private constructor(
withTests: Boolean,
) {
val moduleName = module.name
val includeProjectLib = if (layout is PluginLayout) layout.auto else item.reason == ModuleIncludeReasons.PRODUCT_MODULES
val includeProjectLib = if (layout is PluginLayout) layout.auto else item.isProductModule()
val excluded = if (layout is PluginLayout) (layout.excludedLibraries.get(moduleName) ?: emptyList()) + (layout.excludedLibraries.get(null) ?: emptyList()) else emptySet()
for (element in helper.getLibraryDependencies(module, withTests = withTests)) {
@@ -463,7 +463,12 @@ class JarPackager private constructor(
continue
}
projectLibraryData = ProjectLibraryData(libraryName = libName, reason = "<- $moduleName")
if (layout !is PluginLayout && item.isProductModule()) {
projectLibraryData = ProjectLibraryData(libraryName = libName, owner = item, reason = null)
}
else {
projectLibraryData = ProjectLibraryData(libraryName = libName, reason = "<- $moduleName")
}
}
else if (platformLayout != null && platformLayout.isLibraryAlwaysPackedIntoPlugin(libName)) {
platformLayout.findProjectLibrary(libName)?.let {
@@ -487,7 +492,7 @@ class JarPackager private constructor(
continue
}
if (item.reason == ModuleIncludeReasons.PRODUCT_MODULES) {
if (item.isProductModule()) {
packLibFilesIntoModuleJar(
asset = asset.value,
item = item,
@@ -557,6 +562,7 @@ class JarPackager private constructor(
size = size,
hash = hash,
relativeOutputFile = item.relativeOutputFile,
owner = item,
)
}
else {
@@ -748,7 +754,8 @@ class JarPackager private constructor(
libraryFile = file,
size = size,
hash = hash,
relativeOutputFile = relativeOutputFile
relativeOutputFile = relativeOutputFile,
owner = null,
)
}
},
@@ -1153,7 +1160,7 @@ private fun computeDistributionFileEntries(
list.add(
ModuleOutputEntry(
path = asset.effectiveFile,
moduleName = module.moduleName,
owner = module,
size = size,
hash = hash,
relativeOutputFile = module.relativeOutputFile,
@@ -60,7 +60,7 @@ class PlatformLayout : BaseLayout() {
val uniqueGuard = HashSet<String>()
for (item in includedModules) {
// libraries are packed into product module
if (item.reason == ModuleIncludeReasons.PRODUCT_MODULES) {
if (item.isProductModule()) {
continue
}
@@ -685,7 +685,8 @@ private suspend fun collectAndEmbedProductModules(root: Element, xIncludePathRes
continue
}
val relativeOutFile = if (loadingRule == "embedded") {
val isEmbedded = loadingRule == "embedded"
val relativeOutFile = if (isEmbedded) {
if (isModuleCloseSource(moduleName, context = context)) {
if (frontendModuleFilter.isBackendModule(moduleName)) PRODUCT_BACKEND_JAR else PRODUCT_JAR
}
@@ -698,7 +699,11 @@ private suspend fun collectAndEmbedProductModules(root: Element, xIncludePathRes
else {
"modules/$moduleName.jar"
}
result.add(ModuleItem(moduleName = moduleName, relativeOutputFile = relativeOutFile, reason = ModuleIncludeReasons.PRODUCT_MODULES))
result.add(ModuleItem(
moduleName = moduleName,
relativeOutputFile = relativeOutFile,
reason = if (isEmbedded) ModuleIncludeReasons.PRODUCT_EMBEDDED_MODULES else ModuleIncludeReasons.PRODUCT_MODULES,
))
PRODUCT_MODULE_IMPL_COMPOSITION.get(moduleName)?.let {
it.mapTo(result) { subModuleName ->
ModuleItem(moduleName = subModuleName, relativeOutputFile = relativeOutFile, reason = ModuleIncludeReasons.PRODUCT_MODULES)
@@ -728,4 +733,7 @@ private val PRODUCT_MODULE_IMPL_COMPOSITION = java.util.Map.of(
internal object ModuleIncludeReasons {
const val PRODUCT_MODULES: String = "productModule"
const val PRODUCT_EMBEDDED_MODULES: String = "productEmbeddedModule"
fun isProductModule(reason: String?): Boolean = reason == PRODUCT_MODULES || reason == PRODUCT_EMBEDDED_MODULES
}
@@ -18,6 +18,7 @@ class ProjectLibraryData(
@JvmField val libraryName: String,
@JvmField val packMode: LibraryPackMode = LibraryPackMode.STANDALONE_MERGED,
@JvmField val reason: String?,
@JvmField val owner: ModuleItem? = null,
@JvmField val outPath: String? = null,
) {
init {
@@ -151,7 +151,7 @@ private suspend fun generateRepositoryForDistribution(
for (entry in entries) {
when (entry.origin) {
is ModuleOutputEntry -> {
val module = context.findRequiredModule(entry.origin.moduleName)
val module = context.findRequiredModule(entry.origin.owner.moduleName)
if (isMainPath(module, entry.relativePath)) {
moduleProductionPaths.putValue(module, entry.relativePath)
}
@@ -256,7 +256,7 @@ private suspend fun computeMainPathsForResourcesCopiedToMultiplePlaces(
val element = when (entry.origin) {
is ProjectLibraryEntry if isPackedIntoSingleJar(entry.origin) -> project.libraryCollection.findLibrary(entry.origin.data.libraryName)
is ModuleLibraryFileEntry -> entry.origin.findLibrary(context).takeIf { it.getFiles(JpsOrderRootType.COMPILED).size == 1 }
is ModuleOutputEntry -> context.findRequiredModule(entry.origin.moduleName)
is ModuleOutputEntry -> context.findRequiredModule(entry.origin.owner.moduleName)
else -> null
}
element?.let { it to entry.relativePath }
@@ -264,7 +264,7 @@ private suspend fun computeMainPathsForResourcesCopiedToMultiplePlaces(
.groupBy({ it.first }, { Path(it.second) })
suspend fun isIncludedInEmbeddedFrontend(entry: DistributionFileEntry): Boolean {
return entry is ModuleOutputEntry && !context.getFrontendModuleFilter().isBackendModule(entry.moduleName)
return entry is ModuleOutputEntry && !context.getFrontendModuleFilter().isBackendModule(entry.owner.moduleName)
}
suspend fun chooseMainLocation(element: JpsNamedElement, paths: List<Path>): String {
@@ -2,6 +2,7 @@
package org.jetbrains.intellij.build.impl.projectStructureMapping
import org.jetbrains.intellij.build.PluginBuildDescriptor
import org.jetbrains.intellij.build.impl.ModuleItem
import org.jetbrains.intellij.build.impl.ProjectLibraryData
import java.nio.file.Path
@@ -52,6 +53,10 @@ data class CustomAssetEntry(
get() = "custom-asset"
}
internal interface ModuleOwnedFileEntry {
val owner: ModuleItem?
}
/**
* Represents a file in a module-level library
*/
@@ -63,7 +68,8 @@ internal data class ModuleLibraryFileEntry(
override val size: Int,
override val hash: Long,
override val relativeOutputFile: String?,
) : DistributionFileEntry, LibraryFileEntry {
override val owner: ModuleItem?,
) : DistributionFileEntry, LibraryFileEntry, ModuleOwnedFileEntry {
override val type: String
get() = "module-library-file"
}
@@ -92,21 +98,25 @@ internal data class ProjectLibraryEntry(
override val hash: Long,
override val size: Int,
override val relativeOutputFile: String?,
) : DistributionFileEntry, LibraryFileEntry {
) : DistributionFileEntry, LibraryFileEntry, ModuleOwnedFileEntry {
override val type: String
get() = "project-library" }
get() = "project-library"
override val owner: ModuleItem?
get() = data.owner
}
/**
* Represents production classes of a module
*/
data class ModuleOutputEntry(
override val path: Path,
@JvmField val moduleName: String,
override val owner: ModuleItem,
@JvmField val size: Int,
override val hash: Long,
override val relativeOutputFile: String,
@JvmField val reason: String? = null,
) : DistributionFileEntry {
) : DistributionFileEntry, ModuleOwnedFileEntry {
override val type: String
get() = "module-output"
}
@@ -11,6 +11,8 @@ import org.jetbrains.intellij.build.BuildPaths
import org.jetbrains.intellij.build.DistFile
import org.jetbrains.intellij.build.MAVEN_REPO
import org.jetbrains.intellij.build.PluginBuildDescriptor
import org.jetbrains.intellij.build.impl.ModuleIncludeReasons
import org.jetbrains.intellij.build.impl.ModuleItem
import org.jetbrains.intellij.build.impl.ProjectLibraryData
import org.jetbrains.intellij.build.io.ZipFileWriter
import java.io.ByteArrayOutputStream
@@ -19,11 +21,13 @@ import java.nio.file.Path
import java.util.TreeMap
internal fun getIncludedModules(entries: Sequence<DistributionFileEntry>): Sequence<String> {
return entries.mapNotNull { (it as? ModuleOutputEntry)?.moduleName }.distinct()
return entries.mapNotNull { (it as? ModuleOutputEntry)?.owner?.moduleName }.distinct()
}
internal fun buildJarContentReport(contentReport: ContentReport, zipFileWriter: ZipFileWriter, buildPaths: BuildPaths, context: BuildContext) {
zipFileWriter.uncompressedData("platform.yaml", buildPlatformContentReport(contentReport, buildPaths, context.getDistFiles(os = null, arch = null, libcImpl = null)))
val (platformData, productModuleMap) = buildPlatformContentReport(contentReport, buildPaths, context.getDistFiles(os = null, arch = null, libcImpl = null))
zipFileWriter.uncompressedData("platform.yaml", platformData)
zipFileWriter.uncompressedData("product-modules.yaml", buildProductModuleContentReport(productModuleMap, buildPaths))
zipFileWriter.uncompressedData("bundled-plugins.yaml", buildPluginContentReport(contentReport.bundledPlugins, buildPaths))
zipFileWriter.uncompressedData("non-bundled-plugins.yaml", buildPluginContentReport(contentReport.nonBundledPlugins, buildPaths))
}
@@ -103,23 +107,94 @@ private fun buildPluginContentReport(pluginToEntries: List<Pair<PluginBuildDescr
return out.toByteArray()
}
private fun buildProductModuleContentReport(productModuleMap: List<Pair<ModuleItem, MutableList<DistributionFileEntry>>>, buildPaths: BuildPaths): ByteArray {
val out = ByteArrayOutputStream()
val writer = createYamlGenerator(out)
val fileToEntry = TreeMap<String, MutableList<DistributionFileEntry>>()
val fileToPresentablePath = HashMap<Path, String>()
writer.writeStartArray()
for ((moduleItem, entries) in productModuleMap) {
fileToPresentablePath.clear()
fileToEntry.clear()
for (entry in entries) {
val file = entry.path
// the issue is that some modules embedded into some products (Rider), so, name maybe product.jar...
val presentablePath = if ((entry as ModuleOwnedFileEntry).owner!!.moduleName == moduleItem.moduleName) {
"<file>"
}
else {
fileToPresentablePath.computeIfAbsent(file) {
shortenAndNormalizePath(it, buildPaths)
}
}
fileToEntry.computeIfAbsent(presentablePath) { mutableListOf() }.add(entry)
}
writer.writeStartObject()
writer.writeStringField("mainModule", moduleItem.moduleName)
writer.writeArrayFieldStart("content")
for ((filePath, fileEntries) in fileToEntry) {
writer.writeStartObject()
writer.writeStringField("name", filePath)
writeProjectLibs(entries = fileEntries, writer = writer, buildPaths = buildPaths, isInner = false)
if (fileEntries.all { it is ModuleLibraryFileEntry }) {
writeSeparatePackedModuleLibrary(fileEntries = fileEntries, writer = writer, buildPaths = buildPaths)
writer.writeEndObject()
continue
}
// module maybe embedded in one product and not embedded in another one (rider case)
writeModules(writer = writer, fileEntries = fileEntries, buildPaths = buildPaths, writeReason = false)
writer.writeEndObject()
}
writer.writeEndArray()
writer.writeEndObject()
}
writer.writeEndArray()
writer.close()
return out.toByteArray()
}
private fun createYamlGenerator(out: ByteArrayOutputStream): YAMLGenerator {
return YAMLFactory().createGenerator(out)
.useDefaultPrettyPrinter()
.configure(YAMLGenerator.Feature.MINIMIZE_QUOTES, true)
}
private fun buildPlatformContentReport(contentReport: ContentReport, buildPaths: BuildPaths, distFiles: Collection<DistFile>): ByteArray {
private fun buildPlatformContentReport(
contentReport: ContentReport,
buildPaths: BuildPaths,
distFiles: Collection<DistFile>,
): Pair<ByteArray, List<Pair<ModuleItem, MutableList<DistributionFileEntry>>>> {
val out = ByteArrayOutputStream()
val writer = createYamlGenerator(out)
val fileToEntry = TreeMap<String, MutableList<DistributionFileEntry>>()
val fileToPresentablePath = HashMap<Path, String>()
val productModuleToEntries = HashMap<ModuleItem, MutableList<DistributionFileEntry>>()
for (entry in contentReport.platform) {
if (entry is ModuleOwnedFileEntry) {
val owner = entry.owner
if (owner != null && ModuleIncludeReasons.isProductModule(owner.reason)) {
productModuleToEntries.computeIfAbsent(owner) { mutableListOf() }.add(entry)
continue
}
}
val presentablePath = fileToPresentablePath.computeIfAbsent(entry.path) {
shortenAndNormalizePath(it, buildPaths)
}
fileToEntry.computeIfAbsent(presentablePath) { mutableListOf() }.add(entry)
}
writer.writeStartArray()
for ((filePath, fileEntries) in fileToEntry) {
writer.writeStartObject()
@@ -154,28 +229,49 @@ private fun buildPlatformContentReport(contentReport: ContentReport, buildPaths:
}
}
writer.writeObjectField("name", "plugins")
writer.writeArrayFieldStart("bundled")
writeWithoutDuplicates(contentReport.bundledPlugins)
writer.writeEndArray()
writer.writeArrayFieldStart("nonBundled")
writeWithoutDuplicates(contentReport.nonBundledPlugins)
writer.writeEndArray()
val productModules = productModuleToEntries.toList().sortedBy { it.first.moduleName }
writeProductModules(writer = writer, productModules = productModules, kind = ModuleIncludeReasons.PRODUCT_MODULES)
writeProductModules(writer = writer, productModules = productModules, kind = ModuleIncludeReasons.PRODUCT_EMBEDDED_MODULES)
writer.writeObjectField("name", "plugins")
run {
writer.writeArrayFieldStart("bundled")
writeWithoutDuplicates(contentReport.bundledPlugins)
writer.writeEndArray()
writer.writeArrayFieldStart("nonBundled")
writeWithoutDuplicates(contentReport.nonBundledPlugins)
writer.writeEndArray()
}
writer.writeEndObject()
writer.writeEndArray()
writer.close()
return out.toByteArray()
return out.toByteArray() to productModules
}
private fun writeProductModules(
writer: YAMLGenerator,
productModules: List<Pair<ModuleItem, MutableList<DistributionFileEntry>>>,
kind: String,
) {
writer.writeArrayFieldStart(if (kind == ModuleIncludeReasons.PRODUCT_MODULES) "productModules" else "productEmbeddedModules")
for ((item) in productModules) {
if (item.reason == kind) {
writer.writeString(item.moduleName)
}
}
writer.writeEndArray()
}
private fun shortenPath(file: Path, buildPaths: BuildPaths, extraRoot: Path?): String {
if (file.startsWith(MAVEN_REPO)) {
return "\$MAVEN_REPOSITORY$/" + MAVEN_REPO.relativize(file).toString().replace(File.separatorChar, '/')
return $$"$MAVEN_REPOSITORY$/" + MAVEN_REPO.relativize(file).toString().replace(File.separatorChar, '/')
}
val projectHome = buildPaths.projectHome
if (file.startsWith(projectHome)) {
return "\$PROJECT_DIR$/" + projectHome.relativize(file).toString()
return $$"$PROJECT_DIR$/" + projectHome.relativize(file).toString()
}
else {
val buildOutputDir = buildPaths.buildOutputDir
@@ -212,8 +308,8 @@ private fun writeModules(
}
writer.writeStartObject()
val moduleName = entry.moduleName
writeModuleItem(writer, entry, writeReason = writeReason)
val moduleName = entry.owner.moduleName
writeModuleItem(writer = writer, entry = entry, writeReason = writeReason)
writeModuleLibraries(fileEntries = fileEntries, moduleName = moduleName, writer = writer, buildPaths = buildPaths)
writer.writeEndObject()
}
@@ -223,11 +319,13 @@ private fun writeModules(
}
private fun writeModuleItem(writer: JsonGenerator, entry: ModuleOutputEntry, writeReason: Boolean) {
writer.writeStringField("name", entry.moduleName)
writer.writeStringField("name", entry.owner.moduleName)
writer.writeNumberField("size", entry.size)
if (writeReason) {
entry.reason?.let {
writer.writeStringField("reason", it)
val reason = entry.reason ?: return
// product module is obvious, reduce size (for embedded, we still want to report)
if (reason != ModuleIncludeReasons.PRODUCT_MODULES) {
writer.writeStringField("reason", reason)
}
}
}
@@ -31,6 +31,7 @@ private data class PackageResult(
private data class ContentReportList(
@JvmField val platform: List<FileEntry>,
@JvmField val productModules: List<PluginContentReport>,
@JvmField val bundled: List<PluginContentReport>,
@JvmField val nonBundled: List<PluginContentReport>,
)
@@ -47,9 +48,15 @@ fun createContentCheckTests(
): Iterator<DynamicTest> {
val packageResult by lazy {
lateinit var result: PackageResult
computePackageResult(productProperties, testInfo, {
result = it
}, projectHomePath, buildTools)
computePackageResult(
productProperties = productProperties,
testInfo = testInfo,
contentConsumer = {
result = it
},
homePath = projectHomePath,
buildTools = buildTools
)
result
}
@@ -67,8 +74,19 @@ fun createContentCheckTests(
)
})
val project = packageResult.jpsProject
val productModules = toMap(contentList.productModules)
checkPlugins(
fileEntries = productModules.values.asSequence(),
project = project,
projectHome = projectHome,
nonBundled = null,
testInfo = testInfo,
contentFileName = "module-content.yaml",
)
if (checkPlugins) {
val project = packageResult.jpsProject
// a non-bundled plugin may duplicated bundled one
// - first check non-bundled: any valid mismatch will lead to test failure
// - then check bundled: may be a mismatch due to a difference between bundled and non-bundled one
@@ -110,11 +128,12 @@ private suspend fun SequenceScope<DynamicTest>.checkPlugins(
projectHome: Path?,
testInfo: TestInfo,
suggestedReviewer: String? = null,
contentFileName: String = "plugin-content.yaml",
) {
for (item in fileEntries) {
val module = project.findModuleByName(item.mainModule) ?: continue
val contentRoot = Path.of(JpsPathUtil.urlToPath(module.contentRootsList.urls.first()))
val expectedFile = contentRoot.resolve("plugin-content.yaml")
val expectedFile = contentRoot.resolve(contentFileName)
//if (true) {
// java.nio.file.Files.writeString(expectedFile, serializeContentEntries(normalizeContentReport(fileEntries = item.content, short = true)))
@@ -191,6 +210,7 @@ private fun computePackageResult(
contentConsumer(PackageResult(
content = ContentReportList(
platform = getPlatformData("platform.yaml"),
productModules = getData("product-modules.yaml"),
bundled = getData("bundled-plugins.yaml"),
nonBundled = getData("non-bundled-plugins.yaml"),
),
@@ -37,12 +37,14 @@ fun createLayoutProviderByContentYamlFiles(
mainModuleOfCorePlugin: String,
corePluginDescriptorPath: String,
nameOfTestWhichGeneratesFiles: String,
project: org.jetbrains.jps.model.JpsProject,
): PluginLayoutProvider {
return YamlFileBasedPluginLayoutProvider(
ideContentYamlPath = ideContentYamlPath,
mainModuleOfCorePlugin = mainModuleOfCorePlugin,
corePluginDescriptorPath = corePluginDescriptorPath,
nameOfTestWhichGeneratesFiles = nameOfTestWhichGeneratesFiles,
project = project,
)
}
@@ -51,14 +53,65 @@ private class YamlFileBasedPluginLayoutProvider(
private val mainModuleOfCorePlugin: String,
private val corePluginDescriptorPath: String,
private val nameOfTestWhichGeneratesFiles: String,
private val project: org.jetbrains.jps.model.JpsProject,
) : PluginLayoutProvider {
private val ideContentData by lazy {
deserializeContentData(ideContentYamlPath.readText())
}
private val mergedContentData by lazy {
loadMergedContentData()
}
private fun loadMergedContentData(): List<FileEntry> {
val baseEntries = ideContentData.toMutableList()
// Collect productModules and productEmbeddedModules separately
val productModuleNames = ideContentData.flatMap { it.productModules }.distinct()
val productEmbeddedModuleNames = ideContentData.flatMap { it.productEmbeddedModules }.distinct()
if (productModuleNames.isEmpty() && productEmbeddedModuleNames.isEmpty()) {
return baseEntries
}
// Process productModules with "dist.all/lib/modules/{moduleName}.jar" pattern
for (moduleName in productModuleNames) {
loadAndMergeModuleContent(moduleName, "dist.all/lib/modules/$moduleName.jar", baseEntries)
}
// Process productEmbeddedModules with "dist.all/lib/module-{moduleName}.jar" pattern
for (moduleName in productEmbeddedModuleNames) {
loadAndMergeModuleContent(moduleName, "dist.all/lib/module-$moduleName.jar", baseEntries)
}
return baseEntries
}
private fun loadAndMergeModuleContent(moduleName: String, jarName: String, baseEntries: MutableList<FileEntry>) {
val module = project.findModuleByName(moduleName) ?: return
val contentRootUrl = module.contentRootsList.urls.firstOrNull() ?: return
val moduleContentPath = JpsPathUtil.urlToNioPath(contentRootUrl).resolve("module-content.yaml")
if (!moduleContentPath.exists()) {
return
}
val moduleEntries = deserializeContentData(moduleContentPath.readText())
// replace <file> placeholder with actual jar path
for (entry in moduleEntries) {
if (entry.name == "<file>") {
baseEntries.add(entry.copy(name = jarName))
}
else {
baseEntries.add(entry)
}
}
}
override fun loadCorePluginLayout(): PluginLayoutDescription {
return toPluginLayoutDescription(
entries = ideContentData,
entries = mergedContentData,
mainModuleName = mainModuleOfCorePlugin,
pluginDescriptorPath = corePluginDescriptorPath,
mainLibDir = "dist.all/lib",
@@ -0,0 +1,3 @@
- name: <file>
modules:
- name: intellij.platform.buildView.backend
@@ -0,0 +1,3 @@
- name: <file>
modules:
- name: intellij.platform.buildView.frontend
+3
View File
@@ -0,0 +1,3 @@
- name: <file>
modules:
- name: intellij.platform.buildView
@@ -0,0 +1,3 @@
- name: <file>
modules:
- name: intellij.platform.collaborationTools.auth.base
@@ -0,0 +1,3 @@
- name: <file>
modules:
- name: intellij.platform.collaborationTools.auth
@@ -0,0 +1,3 @@
- name: <file>
modules:
- name: intellij.platform.collaborationTools
@@ -0,0 +1,3 @@
- name: <file>
modules:
- name: intellij.platform.compose.markdown
+6
View File
@@ -0,0 +1,6 @@
- name: <file>
modules:
- name: intellij.platform.compose
library: jetbrains.compose.components.ui.tooling.preview.desktop
files:
- name: $MAVEN_REPOSITORY$/org/jetbrains/compose/components/components-ui-tooling-preview-desktop/1/components-ui-tooling-preview-desktop-1.jar
@@ -0,0 +1,3 @@
- name: <file>
modules:
- name: intellij.platform.diagnostic.freezeAnalyzer
@@ -0,0 +1,3 @@
- name: <file>
modules:
- name: intellij.platform.diagnostic.freezes
@@ -0,0 +1,3 @@
- name: <file>
modules:
- name: intellij.platform.diagnostic.telemetry.agent.extension
@@ -25,6 +25,10 @@ data class FileEntry(
* The list of included in the file module outputs.
*/
@JvmField val modules: List<ModuleEntry> = emptyList(),
@JvmField val productModules: List<String> = emptyList(),
@JvmField val productEmbeddedModules: List<String> = emptyList(),
@JvmField val contentModules: List<ModuleEntry> = emptyList(),
@JvmField val library: String? = null,
@@ -68,7 +72,7 @@ data class ProjectLibraryEntry(
*/
@JvmField val reason: String? = null,
) {
fun compareImportantFields(o: ProjectLibraryEntry) = name == o.name && files == o.files && reason == o.reason
fun compareImportantFields(o: ProjectLibraryEntry): Boolean = name == o.name && files == o.files && reason == o.reason
}
@ApiStatus.Internal
+3
View File
@@ -0,0 +1,3 @@
- name: <file>
modules:
- name: intellij.platform.vcs.dvcs
+3
View File
@@ -0,0 +1,3 @@
- name: <file>
modules:
- name: intellij.platform.vcs.dvcs.impl
@@ -0,0 +1,3 @@
- name: <file>
modules:
- name: intellij.platform.vcs.dvcs.impl.shared
@@ -0,0 +1,3 @@
- name: <file>
modules:
- name: intellij.platform.editor.backend
@@ -0,0 +1,3 @@
- name: <file>
modules:
- name: intellij.platform.editor.frontend
@@ -0,0 +1,3 @@
- name: <file>
modules:
- name: intellij.platform.editor
+3
View File
@@ -0,0 +1,3 @@
- name: <file>
modules:
- name: intellij.platform.eel.impl
@@ -0,0 +1,3 @@
- name: <file>
modules:
- name: intellij.platform.execution.impl.backend
@@ -0,0 +1,3 @@
- name: <file>
modules:
- name: intellij.platform.execution.impl.frontend
@@ -0,0 +1,3 @@
- name: <file>
modules:
- name: intellij.execution.process.elevation
@@ -0,0 +1,6 @@
- name: <file>
modules:
- name: intellij.execution.process.mediator.client
libraries:
grpc-inprocess:
- name: $MAVEN_REPOSITORY$/io/grpc/grpc-inprocess/1/grpc-inprocess-1.jar
@@ -0,0 +1,3 @@
- name: <file>
modules:
- name: intellij.execution.process.mediator.common
@@ -0,0 +1,3 @@
- name: <file>
modules:
- name: intellij.execution.process.mediator.daemon
@@ -0,0 +1,3 @@
- name: <file>
modules:
- name: intellij.platform.execution.dashboard.backend
@@ -0,0 +1,3 @@
- name: <file>
modules:
- name: intellij.platform.execution.dashboard.frontend
@@ -0,0 +1,3 @@
- name: <file>
modules:
- name: intellij.platform.execution.dashboard
@@ -0,0 +1,3 @@
- name: <file>
modules:
- name: intellij.platform.execution.serviceView.backend
@@ -0,0 +1,3 @@
- name: <file>
modules:
- name: intellij.platform.execution.serviceView.frontend
@@ -0,0 +1,3 @@
- name: <file>
modules:
- name: intellij.platform.execution.serviceView
@@ -0,0 +1,3 @@
- name: <file>
modules:
- name: intellij.platform.find.backend
+3
View File
@@ -0,0 +1,3 @@
- name: <file>
modules:
- name: intellij.platform.find
@@ -0,0 +1,3 @@
- name: <file>
modules:
- name: intellij.platform.inline.completion

Some files were not shown because too many files have changed in this diff Show More