From c1a45b2a463cb3186537e06a619dc599a5044fd6 Mon Sep 17 00:00:00 2001 From: Ilia Kirianovskii Date: Mon, 22 Sep 2025 10:39:39 +0200 Subject: [PATCH] [jps-to-bazel] Specify resources attribute for jvm_library (IJI-3062) GitOrigin-RevId: 05a094ba66fbaef47fba0fba29691fb74e38b2f6 --- .../build/bazel/BazelBuildFileGenerator.kt | 27 ++++++++++++------- .../intellij/build/bazel/dependency.kt | 2 +- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/platform/build-scripts/bazel/src/org/jetbrains/intellij/build/bazel/BazelBuildFileGenerator.kt b/platform/build-scripts/bazel/src/org/jetbrains/intellij/build/bazel/BazelBuildFileGenerator.kt index 467906b1696d..2fb7c73443b7 100644 --- a/platform/build-scripts/bazel/src/org/jetbrains/intellij/build/bazel/BazelBuildFileGenerator.kt +++ b/platform/build-scripts/bazel/src/org/jetbrains/intellij/build/bazel/BazelBuildFileGenerator.kt @@ -523,13 +523,10 @@ internal class BazelBuildFileGenerator( if (moduleDescriptor.resources.isNotEmpty()) { val result = generateResources(module = moduleDescriptor, forTests = false) resourceTargets.addAll(result.resourceTargets) - productionCompileTargets.addAll(result.resourceTargets) - productionCompileJars.addAll(result.resourceTargets) } if (moduleDescriptor.testResources.isNotEmpty()) { val result = generateResources(module = moduleDescriptor, forTests = true) testResourceTargets.addAll(result.resourceTargets) - testCompileTargets.addAll(result.resourceTargets) } // if someone depends on such a test module from another production module @@ -546,6 +543,9 @@ internal class BazelBuildFileGenerator( option("module_name", module.name) visibility(arrayOf("//visibility:public")) option("srcs", sourcesToGlob(sources, moduleDescriptor)) + if (resourceTargets.isNotEmpty()) { + option("resources", resourceTargets.map { ":${it.label}" }) + } if (javacOptionsLabel != null) { option("javac_opts", javacOptionsLabel) } @@ -586,7 +586,7 @@ internal class BazelBuildFileGenerator( deps = deps.copy(deps = deps.deps + extraDeps) } - renderDeps(deps = deps, target = this, resourceDependencies = resourceTargets, forTests = false) + renderDeps(deps = deps, target = this, resourceDependencies = emptyList(), forTests = false) } } else { @@ -596,12 +596,15 @@ internal class BazelBuildFileGenerator( option("name", moduleDescriptor.targetName) visibility(arrayOf("//visibility:public")) option("srcs", sourcesToGlob(sources, moduleDescriptor)) + if (resourceTargets.isNotEmpty()) { + option("resources", resourceTargets.map { ":${it.label}" }) + } val deps = moduleList.deps.get(moduleDescriptor) renderDeps( deps = deps?.copy(plugins = emptyList()), // do not apply plugins to an empty library regardless of dependencies target = this, - resourceDependencies = resourceTargets, + resourceDependencies = emptyList(), forTests = false ) } @@ -624,9 +627,10 @@ internal class BazelBuildFileGenerator( } val moduleHasTestSources = moduleDescriptor.testSources.isNotEmpty() + val moduleHasTestResources = moduleDescriptor.testResources.isNotEmpty() // Decide whether to render a test target at all - if (moduleHasTestSources || isTestClasspathModule(moduleDescriptor)) { + if (moduleHasTestSources || moduleHasTestResources || isTestClasspathModule(moduleDescriptor)) { val testLibTargetName = "${moduleDescriptor.targetName}$TEST_LIB_NAME_SUFFIX" testCompileTargets.add(BazelLabel(testLibTargetName, moduleDescriptor)) @@ -642,11 +646,14 @@ internal class BazelBuildFileGenerator( visibility(arrayOf("//visibility:public")) option("srcs", sourcesToGlob(moduleDescriptor.testSources, moduleDescriptor)) + if (testResourceTargets.isNotEmpty()) { + option("resources", testResourceTargets.map { ":${it.label}" }) + } javacOptionsLabel?.let { option("javac_opts", it) } kotlincOptionsLabel?.let { option("kotlinc_opts", it) } - renderDeps(deps = testDeps, target = this, resourceDependencies = testResourceTargets, forTests = true) + renderDeps(deps = testDeps, target = this, resourceDependencies = emptyList(), forTests = true) } } @@ -741,16 +748,16 @@ internal class BazelBuildFileGenerator( return GenerateResourcesResult(resourceTargets = fixedTargetsList) } - load("@rules_jvm//:jvm.bzl", "jvm_resources") + load("@rules_jvm//:jvm.bzl", "resourcegroup") val targetNameSuffix = if (forTests) TEST_RESOURCES_TARGET_SUFFIX else PRODUCTION_RESOURCES_TARGET_SUFFIX val resourceTargets = resources.withIndex().map { (i, resource) -> val name = "${module.targetName}$targetNameSuffix" + (if (i == 0) "" else "_$i") - target("jvm_resources") { + target("resourcegroup") { option("name", name) - option("files", glob(resource.files, allowEmpty = false)) + option("srcs", glob(resource.files, allowEmpty = false)) if (resource.baseDirectory.isNotEmpty()) { option("strip_prefix", resource.baseDirectory) } diff --git a/platform/build-scripts/bazel/src/org/jetbrains/intellij/build/bazel/dependency.kt b/platform/build-scripts/bazel/src/org/jetbrains/intellij/build/bazel/dependency.kt index a1c6997a10f9..5ac81c7cce7d 100644 --- a/platform/build-scripts/bazel/src/org/jetbrains/intellij/build/bazel/dependency.kt +++ b/platform/build-scripts/bazel/src/org/jetbrains/intellij/build/bazel/dependency.kt @@ -438,7 +438,7 @@ private fun addDep( else { if (hasOnlyTestResources(dependencyModuleDescriptor)) { // module with only test resources - runtimeDeps.add(addSuffix(dependencyLabel, TEST_RESOURCES_TARGET_SUFFIX)) + runtimeDeps.add(getLabelForTest(dependencyLabel)) if (isExported) { throw RuntimeException("Do not export test dependency (module=${dependentModule.module.name}, exported=${dependencyModuleDescriptor.module.name})") }