From 15509b5df72b63bb20785ea125b9f748878105e0 Mon Sep 17 00:00:00 2001 From: Leonid Shalupov Date: Wed, 3 Dec 2025 14:27:10 +0100 Subject: [PATCH] IJI-3334 Bazel: generate bazel-targets.json for community, library part also add assertions on library paths in bazel-targets.json GitOrigin-RevId: 5173172c1eb5ebf8b61b4ff3f74bab5a2e583f98 --- bazel-build-all-community.cmd | 18 ++ build/.gitignore | 1 + build/assertJpsModelToBazelCommunityPaths.sh | 17 ++ lib/BUILD.bazel | 86 +++++--- lib/MODULE.bazel | 203 ++++++++++++------ ...ntellij.libraries.detekt.compose.rules.iml | 15 +- libraries/dokka/intellij.libraries.dokka.iml | 17 +- .../build/bazel/BazelBuildFileGenerator.kt | 18 +- .../intellij/build/bazel/JpsModuleToBazel.kt | 113 +++++++--- .../intellij/build/bazel/dependency.kt | 2 +- .../org/jetbrains/intellij/build/bazel/lib.kt | 35 ++- 11 files changed, 383 insertions(+), 142 deletions(-) create mode 100755 bazel-build-all-community.cmd create mode 100755 build/assertJpsModelToBazelCommunityPaths.sh diff --git a/bazel-build-all-community.cmd b/bazel-build-all-community.cmd new file mode 100755 index 000000000000..ed59fbe48ad5 --- /dev/null +++ b/bazel-build-all-community.cmd @@ -0,0 +1,18 @@ +:<<"::CMDLITERAL" +@ECHO OFF +GOTO :CMDSCRIPT +::CMDLITERAL + +set -eu + +root="$(cd "$(dirname "$0")"; pwd)" + +cd "$root" +exec /bin/bash "$root/bazel.cmd" build //... @rules_jvm//... @lib//... +:CMDSCRIPT + +pushd "%~dp0" +call "%~dp0\bazel.cmd" build //... @rules_jvm//... @lib//... +set _exit_code=%ERRORLEVEL% +popd +EXIT /B %_exit_code% diff --git a/build/.gitignore b/build/.gitignore index 790d02a32153..7da2e9c731e4 100644 --- a/build/.gitignore +++ b/build/.gitignore @@ -5,3 +5,4 @@ kotlin-plugin*.zip dependencies/buildSrc/build /jvm-rules/.claude/settings.local.json +/bazel-targets.json diff --git a/build/assertJpsModelToBazelCommunityPaths.sh b/build/assertJpsModelToBazelCommunityPaths.sh new file mode 100755 index 000000000000..d581b5b9d1fc --- /dev/null +++ b/build/assertJpsModelToBazelCommunityPaths.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +set -eux + +export RUN_WITHOUT_ULTIMATE_ROOT=true + +script_dir="$(cd "$(dirname "$0")"; pwd)" + +cd "$script_dir/.." +output_base=$(./bazel.cmd info output_base) +echo "Bazel output base: $output_base" + +./build/jpsModelToBazelCommunityOnly.cmd +./bazel-build-all-community.cmd + +cd "$script_dir/../platform/build-scripts/bazel" +exec /bin/bash "../../../bazel.cmd" run "$@" //:jps-to-bazel -- "--assert-all-outputs-exist-with-output-base=$output_base" diff --git a/lib/BUILD.bazel b/lib/BUILD.bazel index d5391b0d5c02..1b24e435674a 100644 --- a/lib/BUILD.bazel +++ b/lib/BUILD.bazel @@ -5168,67 +5168,80 @@ java_library( jvm_import( name = "io_nlopez_compose_rules-detekt-0_4_27_http_import", - jar = "@io_nlopez_compose_rules-detekt-0_4_27_http//file" + jar = "@io_nlopez_compose_rules-detekt-0_4_27_http//file", + source_jar = "@io_nlopez_compose_rules-detekt-0_4_27-sources_http//file" ) jvm_import( name = "io_gitlab_arturbosch_detekt-detekt-core-1_23_8_http_import", - jar = "@io_gitlab_arturbosch_detekt-detekt-core-1_23_8_http//file" + jar = "@io_gitlab_arturbosch_detekt-detekt-core-1_23_8_http//file", + source_jar = "@io_gitlab_arturbosch_detekt-detekt-core-1_23_8-sources_http//file" ) jvm_import( name = "io_gitlab_arturbosch_detekt-detekt-api-1_23_8_http_import", - jar = "@io_gitlab_arturbosch_detekt-detekt-api-1_23_8_http//file" + jar = "@io_gitlab_arturbosch_detekt-detekt-api-1_23_8_http//file", + source_jar = "@io_gitlab_arturbosch_detekt-detekt-api-1_23_8-sources_http//file" ) jvm_import( name = "dev_drewhamilton_poko-poko-annotations-jvm-0_17_1_http_import", - jar = "@dev_drewhamilton_poko-poko-annotations-jvm-0_17_1_http//file" + jar = "@dev_drewhamilton_poko-poko-annotations-jvm-0_17_1_http//file", + source_jar = "@dev_drewhamilton_poko-poko-annotations-jvm-0_17_1-sources_http//file" ) jvm_import( name = "io_gitlab_arturbosch_detekt-detekt-parser-1_23_8_http_import", - jar = "@io_gitlab_arturbosch_detekt-detekt-parser-1_23_8_http//file" + jar = "@io_gitlab_arturbosch_detekt-detekt-parser-1_23_8_http//file", + source_jar = "@io_gitlab_arturbosch_detekt-detekt-parser-1_23_8-sources_http//file" ) jvm_import( name = "io_github_davidburstrom_contester-contester-breakpoint-0_2_0_http_import", - jar = "@io_github_davidburstrom_contester-contester-breakpoint-0_2_0_http//file" + jar = "@io_github_davidburstrom_contester-contester-breakpoint-0_2_0_http//file", + source_jar = "@io_github_davidburstrom_contester-contester-breakpoint-0_2_0-sources_http//file" ) jvm_import( name = "io_gitlab_arturbosch_detekt-detekt-tooling-1_23_8_http_import", - jar = "@io_gitlab_arturbosch_detekt-detekt-tooling-1_23_8_http//file" + jar = "@io_gitlab_arturbosch_detekt-detekt-tooling-1_23_8_http//file", + source_jar = "@io_gitlab_arturbosch_detekt-detekt-tooling-1_23_8-sources_http//file" ) jvm_import( name = "org_snakeyaml-snakeyaml-engine-2_7_http_import", - jar = "@org_snakeyaml-snakeyaml-engine-2_7_http//file" + jar = "@org_snakeyaml-snakeyaml-engine-2_7_http//file", + source_jar = "@org_snakeyaml-snakeyaml-engine-2_7-sources_http//file" ) jvm_import( name = "io_gitlab_arturbosch_detekt-detekt-metrics-1_23_8_http_import", - jar = "@io_gitlab_arturbosch_detekt-detekt-metrics-1_23_8_http//file" + jar = "@io_gitlab_arturbosch_detekt-detekt-metrics-1_23_8_http//file", + source_jar = "@io_gitlab_arturbosch_detekt-detekt-metrics-1_23_8-sources_http//file" ) jvm_import( name = "io_gitlab_arturbosch_detekt-detekt-psi-utils-1_23_8_http_import", - jar = "@io_gitlab_arturbosch_detekt-detekt-psi-utils-1_23_8_http//file" + jar = "@io_gitlab_arturbosch_detekt-detekt-psi-utils-1_23_8_http//file", + source_jar = "@io_gitlab_arturbosch_detekt-detekt-psi-utils-1_23_8-sources_http//file" ) jvm_import( name = "io_gitlab_arturbosch_detekt-detekt-utils-1_23_8_http_import", - jar = "@io_gitlab_arturbosch_detekt-detekt-utils-1_23_8_http//file" + jar = "@io_gitlab_arturbosch_detekt-detekt-utils-1_23_8_http//file", + source_jar = "@io_gitlab_arturbosch_detekt-detekt-utils-1_23_8-sources_http//file" ) jvm_import( name = "io_nlopez_compose_rules-common-detekt-0_4_27_http_import", - jar = "@io_nlopez_compose_rules-common-detekt-0_4_27_http//file" + jar = "@io_nlopez_compose_rules-common-detekt-0_4_27_http//file", + source_jar = "@io_nlopez_compose_rules-common-detekt-0_4_27-sources_http//file" ) jvm_import( name = "libraries-dokka-jetbrains-dokka-analysis-kotlin-descriptors", jar = "@org_jetbrains_dokka-analysis-kotlin-descriptors-2_0_0_http//file", + source_jar = "@org_jetbrains_dokka-analysis-kotlin-descriptors-2_0_0-sources_http//file", visibility = ["//visibility:public"] ) @@ -5242,6 +5255,7 @@ java_library( jvm_import( name = "libraries-dokka-jetbrains-dokka-cli", jar = "@org_jetbrains_dokka-dokka-cli-2_0_0_http//file", + source_jar = "@org_jetbrains_dokka-dokka-cli-2_0_0-sources_http//file", visibility = ["//visibility:public"] ) @@ -5267,27 +5281,32 @@ java_library( jvm_import( name = "org_jetbrains_dokka-javadoc-plugin-2_0_0_http_import", - jar = "@org_jetbrains_dokka-javadoc-plugin-2_0_0_http//file" + jar = "@org_jetbrains_dokka-javadoc-plugin-2_0_0_http//file", + source_jar = "@org_jetbrains_dokka-javadoc-plugin-2_0_0-sources_http//file" ) jvm_import( name = "org_jetbrains_dokka-dokka-base-2_0_0_http_import", - jar = "@org_jetbrains_dokka-dokka-base-2_0_0_http//file" + jar = "@org_jetbrains_dokka-dokka-base-2_0_0_http//file", + source_jar = "@org_jetbrains_dokka-dokka-base-2_0_0-sources_http//file" ) jvm_import( name = "org_jetbrains_dokka-kotlin-as-java-plugin-2_0_0_http_import", - jar = "@org_jetbrains_dokka-kotlin-as-java-plugin-2_0_0_http//file" + jar = "@org_jetbrains_dokka-kotlin-as-java-plugin-2_0_0_http//file", + source_jar = "@org_jetbrains_dokka-kotlin-as-java-plugin-2_0_0-sources_http//file" ) jvm_import( name = "com_soywiz_korlibs_korte-korte-jvm-4_0_10_http_import", - jar = "@com_soywiz_korlibs_korte-korte-jvm-4_0_10_http//file" + jar = "@com_soywiz_korlibs_korte-korte-jvm-4_0_10_http//file", + source_jar = "@com_soywiz_korlibs_korte-korte-jvm-4_0_10-sources_http//file" ) jvm_import( name = "org_jetbrains_kotlinx-kotlinx-html-jvm-0_9_1_http_import", - jar = "@org_jetbrains_kotlinx-kotlinx-html-jvm-0_9_1_http//file" + jar = "@org_jetbrains_kotlinx-kotlinx-html-jvm-0_9_1_http//file", + source_jar = "@org_jetbrains_kotlinx-kotlinx-html-jvm-0_9_1-sources_http//file" ) java_library( @@ -8234,7 +8253,8 @@ java_library( jvm_import( name = "io_netty-netty-tcnative-boringssl-static-2_0_73_Final_http_import", - jar = "@io_netty-netty-tcnative-boringssl-static-2_0_73_Final_http//file" + jar = "@io_netty-netty-tcnative-boringssl-static-2_0_73_Final_http//file", + source_jar = "@io_netty-netty-tcnative-boringssl-static-2_0_73_Final-sources_http//file" ) jvm_import( @@ -8245,27 +8265,32 @@ jvm_import( jvm_import( name = "io_netty-netty-tcnative-boringssl-static-2_0_73_Final-linux-x86_64_http_import", - jar = "@io_netty-netty-tcnative-boringssl-static-2_0_73_Final-linux-x86_64_http//file" + jar = "@io_netty-netty-tcnative-boringssl-static-2_0_73_Final-linux-x86_64_http//file", + source_jar = "@io_netty-netty-tcnative-boringssl-static-2_0_73_Final-sources_http//file" ) jvm_import( name = "io_netty-netty-tcnative-boringssl-static-2_0_73_Final-linux-aarch_64_http_import", - jar = "@io_netty-netty-tcnative-boringssl-static-2_0_73_Final-linux-aarch_64_http//file" + jar = "@io_netty-netty-tcnative-boringssl-static-2_0_73_Final-linux-aarch_64_http//file", + source_jar = "@io_netty-netty-tcnative-boringssl-static-2_0_73_Final-sources_http//file" ) jvm_import( name = "io_netty-netty-tcnative-boringssl-static-2_0_73_Final-osx-x86_64_http_import", - jar = "@io_netty-netty-tcnative-boringssl-static-2_0_73_Final-osx-x86_64_http//file" + jar = "@io_netty-netty-tcnative-boringssl-static-2_0_73_Final-osx-x86_64_http//file", + source_jar = "@io_netty-netty-tcnative-boringssl-static-2_0_73_Final-sources_http//file" ) jvm_import( name = "io_netty-netty-tcnative-boringssl-static-2_0_73_Final-osx-aarch_64_http_import", - jar = "@io_netty-netty-tcnative-boringssl-static-2_0_73_Final-osx-aarch_64_http//file" + jar = "@io_netty-netty-tcnative-boringssl-static-2_0_73_Final-osx-aarch_64_http//file", + source_jar = "@io_netty-netty-tcnative-boringssl-static-2_0_73_Final-sources_http//file" ) jvm_import( name = "io_netty-netty-tcnative-boringssl-static-2_0_73_Final-windows-x86_64_http_import", - jar = "@io_netty-netty-tcnative-boringssl-static-2_0_73_Final-windows-x86_64_http//file" + jar = "@io_netty-netty-tcnative-boringssl-static-2_0_73_Final-windows-x86_64_http//file", + source_jar = "@io_netty-netty-tcnative-boringssl-static-2_0_73_Final-sources_http//file" ) jvm_import( @@ -8748,27 +8773,32 @@ jvm_import( jvm_import( name = "io_netty-netty-transport-native-epoll-4_2_0_RC2-linux-x86_64_http_import", - jar = "@io_netty-netty-transport-native-epoll-4_2_0_RC2-linux-x86_64_http//file" + jar = "@io_netty-netty-transport-native-epoll-4_2_0_RC2-linux-x86_64_http//file", + source_jar = "@io_netty-netty-transport-native-epoll-4_2_0_RC2-sources_http//file" ) jvm_import( name = "io_netty-netty-transport-native-epoll-4_2_0_RC2-linux-aarch_64_http_import", - jar = "@io_netty-netty-transport-native-epoll-4_2_0_RC2-linux-aarch_64_http//file" + jar = "@io_netty-netty-transport-native-epoll-4_2_0_RC2-linux-aarch_64_http//file", + source_jar = "@io_netty-netty-transport-native-epoll-4_2_0_RC2-sources_http//file" ) jvm_import( name = "io_netty-netty-transport-native-epoll-4_2_0_RC2-linux-riscv64_http_import", - jar = "@io_netty-netty-transport-native-epoll-4_2_0_RC2-linux-riscv64_http//file" + jar = "@io_netty-netty-transport-native-epoll-4_2_0_RC2-linux-riscv64_http//file", + source_jar = "@io_netty-netty-transport-native-epoll-4_2_0_RC2-sources_http//file" ) jvm_import( name = "io_netty-netty-transport-native-kqueue-4_2_0_RC2-osx-x86_64_http_import", - jar = "@io_netty-netty-transport-native-kqueue-4_2_0_RC2-osx-x86_64_http//file" + jar = "@io_netty-netty-transport-native-kqueue-4_2_0_RC2-osx-x86_64_http//file", + source_jar = "@io_netty-netty-transport-native-kqueue-4_2_0_RC2-sources_http//file" ) jvm_import( name = "io_netty-netty-transport-native-kqueue-4_2_0_RC2-osx-aarch_64_http_import", - jar = "@io_netty-netty-transport-native-kqueue-4_2_0_RC2-osx-aarch_64_http//file" + jar = "@io_netty-netty-transport-native-kqueue-4_2_0_RC2-osx-aarch_64_http//file", + source_jar = "@io_netty-netty-transport-native-kqueue-4_2_0_RC2-sources_http//file" ) java_library( diff --git a/lib/MODULE.bazel b/lib/MODULE.bazel index ddb221f0ddb7..1a0380d0c4d2 100644 --- a/lib/MODULE.bazel +++ b/lib/MODULE.bazel @@ -7818,6 +7818,90 @@ http_file( downloaded_file_path = "common-detekt-0.4.27.jar" ) +http_file( + name = "io_nlopez_compose_rules-detekt-0_4_27-sources_http", + url = "https://cache-redirector.jetbrains.com/repo1.maven.org/maven2/io/nlopez/compose/rules/detekt/0.4.27/detekt-0.4.27-sources.jar", + sha256 = "ca1df07e125078327350348f0193f83c74b7dcc392c332aab0022672c2e180b2", + downloaded_file_path = "detekt-0.4.27-sources.jar" +) + +http_file( + name = "io_gitlab_arturbosch_detekt-detekt-core-1_23_8-sources_http", + url = "https://cache-redirector.jetbrains.com/repo1.maven.org/maven2/io/gitlab/arturbosch/detekt/detekt-core/1.23.8/detekt-core-1.23.8-sources.jar", + sha256 = "c83088ef6affd4f72e28f91d1aba7d6e2a23e6a8cd235016b91049e548a271e4", + downloaded_file_path = "detekt-core-1.23.8-sources.jar" +) + +http_file( + name = "io_gitlab_arturbosch_detekt-detekt-api-1_23_8-sources_http", + url = "https://cache-redirector.jetbrains.com/repo1.maven.org/maven2/io/gitlab/arturbosch/detekt/detekt-api/1.23.8/detekt-api-1.23.8-sources.jar", + sha256 = "3a5da5412a1853bc5054cc43593e922fe702d33af5efa52d62e0d3907dab5430", + downloaded_file_path = "detekt-api-1.23.8-sources.jar" +) + +http_file( + name = "dev_drewhamilton_poko-poko-annotations-jvm-0_17_1-sources_http", + url = "https://cache-redirector.jetbrains.com/repo1.maven.org/maven2/dev/drewhamilton/poko/poko-annotations-jvm/0.17.1/poko-annotations-jvm-0.17.1-sources.jar", + sha256 = "889b62379f4b7eba51b96827828e96dc5efc8f5a4fc587e758969e0f77dd76ad", + downloaded_file_path = "poko-annotations-jvm-0.17.1-sources.jar" +) + +http_file( + name = "io_gitlab_arturbosch_detekt-detekt-parser-1_23_8-sources_http", + url = "https://cache-redirector.jetbrains.com/repo1.maven.org/maven2/io/gitlab/arturbosch/detekt/detekt-parser/1.23.8/detekt-parser-1.23.8-sources.jar", + sha256 = "7c5c9b5c709c3f30a5a8563a02c43c0bf0992ede53c97ad698589d5681567f32", + downloaded_file_path = "detekt-parser-1.23.8-sources.jar" +) + +http_file( + name = "io_github_davidburstrom_contester-contester-breakpoint-0_2_0-sources_http", + url = "https://cache-redirector.jetbrains.com/repo1.maven.org/maven2/io/github/davidburstrom/contester/contester-breakpoint/0.2.0/contester-breakpoint-0.2.0-sources.jar", + sha256 = "f832679d34642afe7e57e8b7b3eb8d3787352ddd3e304f5965d297c5bc7b42e3", + downloaded_file_path = "contester-breakpoint-0.2.0-sources.jar" +) + +http_file( + name = "io_gitlab_arturbosch_detekt-detekt-tooling-1_23_8-sources_http", + url = "https://cache-redirector.jetbrains.com/repo1.maven.org/maven2/io/gitlab/arturbosch/detekt/detekt-tooling/1.23.8/detekt-tooling-1.23.8-sources.jar", + sha256 = "ff0bcb96d446169627cae468aa8f9b837f9ce521564ad96230849d47cda99b5e", + downloaded_file_path = "detekt-tooling-1.23.8-sources.jar" +) + +http_file( + name = "org_snakeyaml-snakeyaml-engine-2_7-sources_http", + url = "https://cache-redirector.jetbrains.com/repo1.maven.org/maven2/org/snakeyaml/snakeyaml-engine/2.7/snakeyaml-engine-2.7-sources.jar", + sha256 = "02572a2ab02d8507b6b2291857d909fa901a01e5b47867897d69df5db8897169", + downloaded_file_path = "snakeyaml-engine-2.7-sources.jar" +) + +http_file( + name = "io_gitlab_arturbosch_detekt-detekt-metrics-1_23_8-sources_http", + url = "https://cache-redirector.jetbrains.com/repo1.maven.org/maven2/io/gitlab/arturbosch/detekt/detekt-metrics/1.23.8/detekt-metrics-1.23.8-sources.jar", + sha256 = "2623a25d346c95923e1cb384adaea369a69dad6730a89eee70462264fc26c9c0", + downloaded_file_path = "detekt-metrics-1.23.8-sources.jar" +) + +http_file( + name = "io_gitlab_arturbosch_detekt-detekt-psi-utils-1_23_8-sources_http", + url = "https://cache-redirector.jetbrains.com/repo1.maven.org/maven2/io/gitlab/arturbosch/detekt/detekt-psi-utils/1.23.8/detekt-psi-utils-1.23.8-sources.jar", + sha256 = "91f714164c3dd2eebaba9a29642e2582d565cbb1068ec41e1c49cd744b759a38", + downloaded_file_path = "detekt-psi-utils-1.23.8-sources.jar" +) + +http_file( + name = "io_gitlab_arturbosch_detekt-detekt-utils-1_23_8-sources_http", + url = "https://cache-redirector.jetbrains.com/repo1.maven.org/maven2/io/gitlab/arturbosch/detekt/detekt-utils/1.23.8/detekt-utils-1.23.8-sources.jar", + sha256 = "fe3e8218997c50997d453ecf0146baab0d2eb290de5ab8d10da911480b652246", + downloaded_file_path = "detekt-utils-1.23.8-sources.jar" +) + +http_file( + name = "io_nlopez_compose_rules-common-detekt-0_4_27-sources_http", + url = "https://cache-redirector.jetbrains.com/repo1.maven.org/maven2/io/nlopez/compose/rules/common-detekt/0.4.27/common-detekt-0.4.27-sources.jar", + sha256 = "b16957b2b81b653249a7bd52cd47dfcdfe39fb7c61aad292e504c0b51e97442e", + downloaded_file_path = "common-detekt-0.4.27-sources.jar" +) + http_file( name = "org_jetbrains_dokka-analysis-kotlin-descriptors-2_0_0_http", url = "https://cache-redirector.jetbrains.com/repo1.maven.org/maven2/org/jetbrains/dokka/analysis-kotlin-descriptors/2.0.0/analysis-kotlin-descriptors-2.0.0.jar", @@ -7825,6 +7909,13 @@ http_file( downloaded_file_path = "analysis-kotlin-descriptors-2.0.0.jar" ) +http_file( + name = "org_jetbrains_dokka-analysis-kotlin-descriptors-2_0_0-sources_http", + url = "https://cache-redirector.jetbrains.com/repo1.maven.org/maven2/org/jetbrains/dokka/analysis-kotlin-descriptors/2.0.0/analysis-kotlin-descriptors-2.0.0-sources.jar", + sha256 = "c6deada2fac53b8ea6523dbda77597b128006674616f140f04df23264c6d1aa3", + downloaded_file_path = "analysis-kotlin-descriptors-2.0.0-sources.jar" +) + http_file( name = "org_jetbrains_dokka-dokka-cli-2_0_0_http", url = "https://cache-redirector.jetbrains.com/repo1.maven.org/maven2/org/jetbrains/dokka/dokka-cli/2.0.0/dokka-cli-2.0.0.jar", @@ -7832,6 +7923,13 @@ http_file( downloaded_file_path = "dokka-cli-2.0.0.jar" ) +http_file( + name = "org_jetbrains_dokka-dokka-cli-2_0_0-sources_http", + url = "https://cache-redirector.jetbrains.com/repo1.maven.org/maven2/org/jetbrains/dokka/dokka-cli/2.0.0/dokka-cli-2.0.0-sources.jar", + sha256 = "2a485a3c336a8d8483c2309e8b643181e8f49c1b7ef2bfb1168a4cf2625d1160", + downloaded_file_path = "dokka-cli-2.0.0-sources.jar" +) + http_file( name = "org_jetbrains_dokka-javadoc-plugin-2_0_0_http", url = "https://cache-redirector.jetbrains.com/repo1.maven.org/maven2/org/jetbrains/dokka/javadoc-plugin/2.0.0/javadoc-plugin-2.0.0.jar", @@ -7867,6 +7965,41 @@ http_file( downloaded_file_path = "kotlinx-html-jvm-0.9.1.jar" ) +http_file( + name = "org_jetbrains_dokka-javadoc-plugin-2_0_0-sources_http", + url = "https://cache-redirector.jetbrains.com/repo1.maven.org/maven2/org/jetbrains/dokka/javadoc-plugin/2.0.0/javadoc-plugin-2.0.0-sources.jar", + sha256 = "db6021566a05bd46ef41972e2f9b08e9cdffa3655fdb9d479ae68644d587eca7", + downloaded_file_path = "javadoc-plugin-2.0.0-sources.jar" +) + +http_file( + name = "org_jetbrains_dokka-dokka-base-2_0_0-sources_http", + url = "https://cache-redirector.jetbrains.com/repo1.maven.org/maven2/org/jetbrains/dokka/dokka-base/2.0.0/dokka-base-2.0.0-sources.jar", + sha256 = "5d325e704e57e83152f398b4159ae4a91065f738057f3220c9bf20e7a87f8eca", + downloaded_file_path = "dokka-base-2.0.0-sources.jar" +) + +http_file( + name = "org_jetbrains_dokka-kotlin-as-java-plugin-2_0_0-sources_http", + url = "https://cache-redirector.jetbrains.com/repo1.maven.org/maven2/org/jetbrains/dokka/kotlin-as-java-plugin/2.0.0/kotlin-as-java-plugin-2.0.0-sources.jar", + sha256 = "5baf3dd2b3993531e148af42b3a5db4c99174af2aa3be07db17a1fbbbff9e502", + downloaded_file_path = "kotlin-as-java-plugin-2.0.0-sources.jar" +) + +http_file( + name = "com_soywiz_korlibs_korte-korte-jvm-4_0_10-sources_http", + url = "https://cache-redirector.jetbrains.com/repo1.maven.org/maven2/com/soywiz/korlibs/korte/korte-jvm/4.0.10/korte-jvm-4.0.10-sources.jar", + sha256 = "475ff8f7d8c8af0c66bf9cea378c34c7ed8a34942dbdc15dab37dda7c699ddea", + downloaded_file_path = "korte-jvm-4.0.10-sources.jar" +) + +http_file( + name = "org_jetbrains_kotlinx-kotlinx-html-jvm-0_9_1-sources_http", + url = "https://cache-redirector.jetbrains.com/repo1.maven.org/maven2/org/jetbrains/kotlinx/kotlinx-html-jvm/0.9.1/kotlinx-html-jvm-0.9.1-sources.jar", + sha256 = "ef1195449de49153f96723e0a2e5e1a99b504d57a9b58482d03c98dbcf29cf18", + downloaded_file_path = "kotlinx-html-jvm-0.9.1-sources.jar" +) + http_file( name = "com_github_seregamorph-hamcrest-more-matchers-0_1_http", url = "https://cache-redirector.jetbrains.com/repo1.maven.org/maven2/com/github/seregamorph/hamcrest-more-matchers/0.1/hamcrest-more-matchers-0.1.jar", @@ -13103,13 +13236,6 @@ http_file( downloaded_file_path = "kotlinx-coroutines-core-jvm-1.6.4.jar" ) -http_file( - name = "io_gitlab_arturbosch_detekt-detekt-api-1_23_8-sources_http", - url = "https://cache-redirector.jetbrains.com/repo1.maven.org/maven2/io/gitlab/arturbosch/detekt/detekt-api/1.23.8/detekt-api-1.23.8-sources.jar", - sha256 = "3a5da5412a1853bc5054cc43593e922fe702d33af5efa52d62e0d3907dab5430", - downloaded_file_path = "detekt-api-1.23.8-sources.jar" -) - http_file( name = "org_jetbrains_kotlin-kotlin-compiler-embeddable-2_0_21-sources_http", url = "https://cache-redirector.jetbrains.com/repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-compiler-embeddable/2.0.21/kotlin-compiler-embeddable-2.0.21-sources.jar", @@ -13152,27 +13278,6 @@ http_file( downloaded_file_path = "kotlinx-coroutines-core-jvm-1.6.4-sources.jar" ) -http_file( - name = "io_gitlab_arturbosch_detekt-detekt-psi-utils-1_23_8-sources_http", - url = "https://cache-redirector.jetbrains.com/repo1.maven.org/maven2/io/gitlab/arturbosch/detekt/detekt-psi-utils/1.23.8/detekt-psi-utils-1.23.8-sources.jar", - sha256 = "91f714164c3dd2eebaba9a29642e2582d565cbb1068ec41e1c49cd744b759a38", - downloaded_file_path = "detekt-psi-utils-1.23.8-sources.jar" -) - -http_file( - name = "io_gitlab_arturbosch_detekt-detekt-utils-1_23_8-sources_http", - url = "https://cache-redirector.jetbrains.com/repo1.maven.org/maven2/io/gitlab/arturbosch/detekt/detekt-utils/1.23.8/detekt-utils-1.23.8-sources.jar", - sha256 = "fe3e8218997c50997d453ecf0146baab0d2eb290de5ab8d10da911480b652246", - downloaded_file_path = "detekt-utils-1.23.8-sources.jar" -) - -http_file( - name = "dev_drewhamilton_poko-poko-annotations-jvm-0_17_1-sources_http", - url = "https://cache-redirector.jetbrains.com/repo1.maven.org/maven2/dev/drewhamilton/poko/poko-annotations-jvm/0.17.1/poko-annotations-jvm-0.17.1-sources.jar", - sha256 = "889b62379f4b7eba51b96827828e96dc5efc8f5a4fc587e758969e0f77dd76ad", - downloaded_file_path = "poko-annotations-jvm-0.17.1-sources.jar" -) - http_file( name = "org_jetbrains_kotlin-kotlin-stdlib-2_0_21_http", url = "https://cache-redirector.jetbrains.com/repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/2.0.21/kotlin-stdlib-2.0.21.jar", @@ -13278,34 +13383,6 @@ http_file( downloaded_file_path = "kotlin-stdlib-jdk7-1.7.20.jar" ) -http_file( - name = "io_gitlab_arturbosch_detekt-detekt-core-1_23_8-sources_http", - url = "https://cache-redirector.jetbrains.com/repo1.maven.org/maven2/io/gitlab/arturbosch/detekt/detekt-core/1.23.8/detekt-core-1.23.8-sources.jar", - sha256 = "c83088ef6affd4f72e28f91d1aba7d6e2a23e6a8cd235016b91049e548a271e4", - downloaded_file_path = "detekt-core-1.23.8-sources.jar" -) - -http_file( - name = "io_gitlab_arturbosch_detekt-detekt-parser-1_23_8-sources_http", - url = "https://cache-redirector.jetbrains.com/repo1.maven.org/maven2/io/gitlab/arturbosch/detekt/detekt-parser/1.23.8/detekt-parser-1.23.8-sources.jar", - sha256 = "7c5c9b5c709c3f30a5a8563a02c43c0bf0992ede53c97ad698589d5681567f32", - downloaded_file_path = "detekt-parser-1.23.8-sources.jar" -) - -http_file( - name = "io_github_davidburstrom_contester-contester-breakpoint-0_2_0-sources_http", - url = "https://cache-redirector.jetbrains.com/repo1.maven.org/maven2/io/github/davidburstrom/contester/contester-breakpoint/0.2.0/contester-breakpoint-0.2.0-sources.jar", - sha256 = "f832679d34642afe7e57e8b7b3eb8d3787352ddd3e304f5965d297c5bc7b42e3", - downloaded_file_path = "contester-breakpoint-0.2.0-sources.jar" -) - -http_file( - name = "io_gitlab_arturbosch_detekt-detekt-tooling-1_23_8-sources_http", - url = "https://cache-redirector.jetbrains.com/repo1.maven.org/maven2/io/gitlab/arturbosch/detekt/detekt-tooling/1.23.8/detekt-tooling-1.23.8-sources.jar", - sha256 = "ff0bcb96d446169627cae468aa8f9b837f9ce521564ad96230849d47cda99b5e", - downloaded_file_path = "detekt-tooling-1.23.8-sources.jar" -) - http_file( name = "org_jetbrains_kotlin-kotlin-stdlib-2_0_21-sources_http", url = "https://cache-redirector.jetbrains.com/repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/2.0.21/kotlin-stdlib-2.0.21-sources.jar", @@ -13320,13 +13397,6 @@ http_file( downloaded_file_path = "annotations-13.0-sources.jar" ) -http_file( - name = "org_snakeyaml-snakeyaml-engine-2_7-sources_http", - url = "https://cache-redirector.jetbrains.com/repo1.maven.org/maven2/org/snakeyaml/snakeyaml-engine/2.7/snakeyaml-engine-2.7-sources.jar", - sha256 = "02572a2ab02d8507b6b2291857d909fa901a01e5b47867897d69df5db8897169", - downloaded_file_path = "snakeyaml-engine-2.7-sources.jar" -) - http_file( name = "org_jetbrains_kotlin-kotlin-reflect-2_0_21-sources_http", url = "https://cache-redirector.jetbrains.com/repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-reflect/2.0.21/kotlin-reflect-2.0.21-sources.jar", @@ -13334,13 +13404,6 @@ http_file( downloaded_file_path = "kotlin-reflect-2.0.21-sources.jar" ) -http_file( - name = "io_gitlab_arturbosch_detekt-detekt-metrics-1_23_8-sources_http", - url = "https://cache-redirector.jetbrains.com/repo1.maven.org/maven2/io/gitlab/arturbosch/detekt/detekt-metrics/1.23.8/detekt-metrics-1.23.8-sources.jar", - sha256 = "2623a25d346c95923e1cb384adaea369a69dad6730a89eee70462264fc26c9c0", - downloaded_file_path = "detekt-metrics-1.23.8-sources.jar" -) - http_file( name = "io_gitlab_arturbosch_detekt-detekt-report-html-1_23_8-sources_http", url = "https://cache-redirector.jetbrains.com/repo1.maven.org/maven2/io/gitlab/arturbosch/detekt/detekt-report-html/1.23.8/detekt-report-html-1.23.8-sources.jar", diff --git a/libraries/detekt-compose-rules/intellij.libraries.detekt.compose.rules.iml b/libraries/detekt-compose-rules/intellij.libraries.detekt.compose.rules.iml index fcb5610f96e8..29e9cf513ff0 100644 --- a/libraries/detekt-compose-rules/intellij.libraries.detekt.compose.rules.iml +++ b/libraries/detekt-compose-rules/intellij.libraries.detekt.compose.rules.iml @@ -87,7 +87,20 @@ - + + + + + + + + + + + + + + diff --git a/libraries/dokka/intellij.libraries.dokka.iml b/libraries/dokka/intellij.libraries.dokka.iml index ca2005dd1754..9067118d3c23 100644 --- a/libraries/dokka/intellij.libraries.dokka.iml +++ b/libraries/dokka/intellij.libraries.dokka.iml @@ -17,7 +17,9 @@ - + + + @@ -63,7 +65,14 @@ - + + + + + + + + @@ -79,7 +88,9 @@ - + + + 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 64b3eb74be24..7c60cbc4d40b 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 @@ -157,6 +157,20 @@ internal class BazelBuildFileGenerator( val mavenLibraries: Object2ObjectOpenHashMap = Object2ObjectOpenHashMap() val localLibraries: Object2ObjectOpenHashMap = Object2ObjectOpenHashMap() + val allLibraries: Collection + get() = mavenLibraries.values + localLibraries.values + + val communityOnlyLibraries: Collection + get() { + return allLibraries.filter { + check(it.target.container == communityLibraries || it.target.container == ultimateLibraries) { + "Library container ${it.target.container} of ${it.target} is not community or ultimate" + } + + it.target.container == communityLibraries + } + } + private val providedLibraries: ProvidedLibraries = ProvidedLibraries() class ProvidedLibraries { private val providedLibraries: MultiMap = MultiMap() @@ -196,7 +210,7 @@ internal class BazelBuildFileGenerator( jarRepositories: List, m2Repo: Path, ) { - val fileToLabelTracker = LinkedHashMap>() + val fileToLabelTracker = LinkedHashMap>() val fileToUpdater = LinkedHashMap() for ((libraryContainer, list) in mavenLibraries .values @@ -220,7 +234,7 @@ internal class BazelBuildFileGenerator( val groupedByTargetName = sortedList.groupBy { it.target.targetName } - val labelTracker = fileToLabelTracker.computeIfAbsent(libraryContainer.moduleFile) { HashSet() } + val labelTracker = fileToLabelTracker.computeIfAbsent(libraryContainer.moduleFile) { mutableMapOf() } buildFile(out = bazelFileUpdater, sectionName = libraryContainer.sectionName) { load("@rules_jvm//:jvm.bzl", "jvm_import") diff --git a/platform/build-scripts/bazel/src/org/jetbrains/intellij/build/bazel/JpsModuleToBazel.kt b/platform/build-scripts/bazel/src/org/jetbrains/intellij/build/bazel/JpsModuleToBazel.kt index 793527d4e86d..5e5582cc22c9 100644 --- a/platform/build-scripts/bazel/src/org/jetbrains/intellij/build/bazel/JpsModuleToBazel.kt +++ b/platform/build-scripts/bazel/src/org/jetbrains/intellij/build/bazel/JpsModuleToBazel.kt @@ -14,13 +14,14 @@ import org.jetbrains.jps.model.serialization.JpsSerializationManager import java.nio.file.Files import java.nio.file.Path import java.nio.file.StandardCopyOption -import kotlin.collections.asSequence +import java.util.TreeMap import kotlin.io.path.createDirectories import kotlin.io.path.deleteIfExists import kotlin.io.path.exists import kotlin.io.path.invariantSeparatorsPathString import kotlin.io.path.isRegularFile import kotlin.io.path.moveTo +import kotlin.io.path.readLines import kotlin.io.path.readText import kotlin.io.path.relativeTo import kotlin.io.path.writeText @@ -39,6 +40,7 @@ internal class JpsModuleToBazel { ?: System.getProperty("user.dir") var runWithoutUltimateRoot = System.getenv(RUN_WITHOUT_ULTIMATE_ROOT_ENV) ?: "false" var defaultCustomModules = "true" + var bazelOutputBase: Path? = null var m2Repo = JpsMavenSettings.getMavenRepositoryPath() for (arg in args) { @@ -49,6 +51,12 @@ internal class JpsModuleToBazel { workspaceDir = arg.substringAfter("=") arg.startsWith("--default-custom-modules=") -> defaultCustomModules = arg.substringAfter("=") + arg.startsWith("--assert-all-outputs-exist-with-output-base=") -> { + bazelOutputBase = Path.of(arg.substringAfter("=")) + check(bazelOutputBase.isAbsolute) { "Output base $bazelOutputBase must be absolute" } + check(bazelOutputBase.normalize() == bazelOutputBase) { "Output base $bazelOutputBase must be normalized" } + check(bazelOutputBase.exists()) { "Output base $bazelOutputBase must exist" } + } arg.startsWith("--m2-repo=") -> m2Repo = arg.substringAfter("=") else -> error("Unknown argument: $arg") @@ -61,14 +69,24 @@ internal class JpsModuleToBazel { } else { null } + val bazelWorkspaceRoot = bazelOutputBase?.let { + val workspaceLine = it.resolve("README").readLines().single { line -> line.startsWith("WORKSPACE: ") } + Path.of(workspaceLine.removePrefixStrict("WORKSPACE: ")) + } println("Community root: $communityRoot") println("Ultimate root: $ultimateRoot") println("M2 repo root: $m2Repo") + println("Bazel output base: $bazelOutputBase") val projectDir = ultimateRoot ?: communityRoot - val project = JpsSerializationManager.getInstance().loadProject(projectDir.toString(), mapOf("MAVEN_REPOSITORY" to m2Repo), true) + val project = JpsSerializationManager.getInstance().loadProject( + /* projectPath = */ projectDir, + /* externalConfigurationDirectory = */ null, + /* pathVariables = */ mapOf("MAVEN_REPOSITORY" to m2Repo), + /* loadUnloadedModules = */ true, + ) val jarRepositories = loadJarRepositories(projectDir) val modulesBazel = listOfNotNull( @@ -116,9 +134,30 @@ internal class JpsModuleToBazel { ) } + val communityTargetsFile = communityRoot.resolve("build/bazel-targets.json") + saveTargets( + file = communityTargetsFile, + targets = communityResult.moduleTargets, + moduleList = moduleList, + libs = generator.communityOnlyLibraries, + communityRoot = communityRoot, + ultimateRoot = null, + projectRoot = communityRoot, + bazelOutputBase = if (bazelWorkspaceRoot == communityRoot) bazelOutputBase else null, + ) + if (ultimateRoot != null) { - val targetsFile = ultimateRoot.resolve("build/bazel-targets.json") - saveTargets(targetsFile, communityResult.moduleTargets + ultimateResult.moduleTargets, moduleList, generator.mavenLibraries.values + generator.localLibraries.values, ultimateRoot) + val ultimateTargetsFile = ultimateRoot.resolve("build/bazel-targets.json") + saveTargets( + file = ultimateTargetsFile, + targets = communityResult.moduleTargets + ultimateResult.moduleTargets, + moduleList = moduleList, + libs = generator.allLibraries, + communityRoot = communityRoot, + ultimateRoot = ultimateRoot, + projectRoot = ultimateRoot, + bazelOutputBase = if (bazelWorkspaceRoot == ultimateRoot) bazelOutputBase else null, + ) } } @@ -167,7 +206,16 @@ internal class JpsModuleToBazel { } @OptIn(ExperimentalSerializationApi::class) - fun saveTargets(file: Path, targets: List, moduleList: ModuleList, libs: Collection, ultimateRoot: Path) { + fun saveTargets( + file: Path, + targets: List, + moduleList: ModuleList, + libs: Collection, + communityRoot: Path, + ultimateRoot: Path?, + projectRoot: Path, + bazelOutputBase: Path? + ) { @Serializable data class LibraryDescription( val target: String, @@ -199,11 +247,13 @@ internal class JpsModuleToBazel { "${file.mavenCoordinates.artifactId}-${file.mavenCoordinates.version}" + (if (file.mavenCoordinates.classifier != null) "-${file.mavenCoordinates.classifier}" else "") + ".jar" - // uncomment to assert, requires all libraries to be already downloaded (e.g. by ./bazel-build-all.cmd) - //val root = bazelOutputRoot - //check(root.resolve(path).isRegularFile()) { - // "Cannot find ${root.resolve(path)} (library ${library.target.jpsName} library module=${library.target.moduleLibraryModuleName})" - //} + + if (bazelOutputBase != null) { + check(bazelOutputBase.resolve(path).isRegularFile()) { + "Cannot find ${bazelOutputBase.resolve(path)} (library ${library.target.jpsName} library module=${library.target.moduleLibraryModuleName})" + } + } + return path } @@ -221,27 +271,34 @@ internal class JpsModuleToBazel { LibraryDescription( target = target, jars = library.files.map { - require(it.normalize().startsWith(ultimateRoot)) { - "Library file ${it.relativeTo(ultimateRoot)} is not under ultimateRoot ($it)" + val normalized = it.normalize() + require( + normalized.startsWith(communityRoot) || + (ultimateRoot != null && normalized.startsWith(ultimateRoot)) + ) { + "Library file $it is not under community root ($communityRoot) or ultimate root ($ultimateRoot)" } - val relativeToUltimateRoot = it.relativeTo(ultimateRoot).invariantSeparatorsPathString + val ultimateLibRoot = ultimateRoot?.resolve("lib") + val communityLibRoot = communityRoot.resolve("lib") - val relativeToBazelOutputRoot = when { - relativeToUltimateRoot.startsWith("lib/") -> - "external/ultimate_lib+/" + relativeToUltimateRoot.removePrefix("lib/") - relativeToUltimateRoot.startsWith("community/") -> - "external/community+/" + relativeToUltimateRoot.removePrefix("community/") - else -> "execroot/_main/$relativeToUltimateRoot" + val relativeToBazelOutputBase = when { + ultimateLibRoot != null && normalized.startsWith(ultimateLibRoot) -> + "external/ultimate_lib+/" + normalized.relativeTo(ultimateLibRoot).invariantSeparatorsPathString + normalized.startsWith(communityLibRoot) -> + "external/lib+/" + normalized.relativeTo(communityLibRoot).invariantSeparatorsPathString + projectRoot == ultimateRoot && normalized.startsWith(communityRoot) -> + "external/community+/" + normalized.relativeTo(communityRoot).invariantSeparatorsPathString + else -> "execroot/_main/${normalized.relativeTo(projectRoot).invariantSeparatorsPathString}" } - // uncomment to assert, requires all libraries to be already downloaded (e.g. by ./bazel-build-all.cmd) - //val root = bazelOutputRoot - //check(root.resolve(relativeToBazelOutputRoot).isRegularFile()) { - // "Cannot find ${root.resolve(relativeToBazelOutputRoot)} (library ${library.target.jpsName} library module=${library.target.moduleLibraryModuleName})" - //} + if (bazelOutputBase != null) { + check(bazelOutputBase.resolve(relativeToBazelOutputBase).isRegularFile()) { + "Cannot find ${bazelOutputBase.resolve(relativeToBazelOutputBase)} (library ${library.target.jpsName} library module=${library.target.moduleLibraryModuleName})" + } + } - relativeToBazelOutputRoot + relativeToBazelOutputBase }, sourceJars = emptyList(), ) @@ -258,7 +315,7 @@ internal class JpsModuleToBazel { val fileContent = jsonSerializer.encodeToString( serializer = jsonSerializer.serializersModule.serializer(), value = TargetsFile( - modules = targets.associate { moduleTarget -> + modules = targets.associateTo(TreeMap()) { moduleTarget -> val moduleName = moduleTarget.moduleDescriptor.module.name moduleName to TargetsFileModuleDescription( productionTargets = moduleTarget.productionTargets, @@ -267,13 +324,13 @@ internal class JpsModuleToBazel { testJars = moduleTarget.testJars, exports = moduleList.deps[moduleTarget.moduleDescriptor]?.exports?.map { it.label } ?: emptyList(), moduleLibraries = module2Libraries[moduleName] - ?.associate { it.target.jpsName to makeLibraryDescription(it) } ?: emptyMap(), + ?.associateTo(TreeMap()) { it.target.jpsName to makeLibraryDescription(it) } ?: emptyMap(), ) } + skippedModules.associateWith { emptyModule }, projectLibraries = libs.asSequence().mapNotNull { if (it.target.moduleLibraryModuleName != null) return@mapNotNull null return@mapNotNull it.target.jpsName to makeLibraryDescription(it) - }.sortedBy { it.first }.toMap() + }.toMap(TreeMap()) ) ) 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 bae223f0976b..50e525e408f5 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 @@ -432,7 +432,7 @@ private fun String.removeSuffixStrict(suffix: String): String { return result } -private fun String.removePrefixStrict(prefix: String): String { +internal fun String.removePrefixStrict(prefix: String): String { require(prefix.isNotEmpty()) { "prefix must not be empty" } diff --git a/platform/build-scripts/bazel/src/org/jetbrains/intellij/build/bazel/lib.kt b/platform/build-scripts/bazel/src/org/jetbrains/intellij/build/bazel/lib.kt index f4d333e1e05a..676a794dbb37 100644 --- a/platform/build-scripts/bazel/src/org/jetbrains/intellij/build/bazel/lib.kt +++ b/platform/build-scripts/bazel/src/org/jetbrains/intellij/build/bazel/lib.kt @@ -88,9 +88,24 @@ private fun getUrlAndSha256(jar: MavenFileDescription, jarRepositories: List): Boolean { + val trackerContent = "library_file has_source_jar:$hasSourceJar lib_visibility:$libVisibility" + val olderContent = labelTracker.put(targetName, trackerContent) + if (olderContent != null && olderContent != trackerContent) { + // was rendered earlier, but the context was different + error( + "The same library target $targetName was rendered twice with different contexts: '$olderContent' and '$trackerContent'. " + + "This is no allowed, please make sure that your library settings (e.g. having sources or visiblity) is consistent across all " + + "library usages" + ) + } + + return olderContent != null +} + internal fun BuildFile.generateMavenLib( lib: MavenLibrary, - labelTracker: MutableSet, + labelTracker: MutableMap, isLibraryProvided: (Library) -> Boolean, libVisibility: String?, ) { @@ -102,11 +117,12 @@ internal fun BuildFile.generateMavenLib( if (lib.jars.size == 1) { val jar = lib.jars.single() - if (!labelTracker.add(targetName)) { + val sourceJar = lib.sourceJars.firstOrNull { it.mavenCoordinates == jar.mavenCoordinates.copy(classifier = "sources") } + + if (checkLibraryFileWasAlreadyRendered(targetName, libVisibility, sourceJar != null, labelTracker)) { return } - val sourceJar = lib.sourceJars.singleOrNull { it.mavenCoordinates == jar.mavenCoordinates.copy(classifier = "sources") } target("jvm_import") { option("name", targetName) option("jar", "@${fileToHttpRuleFile(jar.mavenCoordinates)}") @@ -137,11 +153,12 @@ internal fun BuildFile.generateMavenLib( for (jar in lib.jars) { val bazelLabel = mavenCoordinatesToHttpRuleRepoName(jar.mavenCoordinates) val label = "${bazelLabel}_import" - if (!labelTracker.add(label)) { + val sourceJar = lib.sourceJars.firstOrNull { it.mavenCoordinates == jar.mavenCoordinates.copy(classifier = "sources") } + + if (checkLibraryFileWasAlreadyRendered(label, libVisibility, sourceJar != null, labelTracker)) { continue } - val sourceJar = lib.sourceJars.singleOrNull { it.mavenCoordinates == jar.mavenCoordinates.copy(classifier = "sources") } target("jvm_import") { option("name", label) option("jar", "@$bazelLabel//file") @@ -210,7 +227,7 @@ internal fun generateBazelModuleSectionsForLibs( jarRepositories: List, m2Repo: Path, urlCache: UrlCache, - moduleFileToLabelTracker: MutableMap>, + moduleFileToLabelTracker: MutableMap>, fileToUpdater: MutableMap, ) { val bazelFileUpdater = fileToUpdater.computeIfAbsent(owner.moduleFile) { @@ -220,12 +237,12 @@ internal fun generateBazelModuleSectionsForLibs( updater } - val labelTracker = moduleFileToLabelTracker.computeIfAbsent(owner.moduleFile) { HashSet() } + val labelTracker = moduleFileToLabelTracker.computeIfAbsent(owner.moduleFile) { mutableMapOf() } buildFile(bazelFileUpdater, owner.sectionName) { for (lib in list) { for (jar in lib.jars) { val label = mavenCoordinatesToHttpRuleRepoName(jar.mavenCoordinates) - if (!labelTracker.add(label)) { + if (labelTracker.put(label, "") != null) { continue } @@ -244,7 +261,7 @@ internal fun generateBazelModuleSectionsForLibs( for (jar in lib.sourceJars) { val label = mavenCoordinatesToHttpRuleRepoName(jar.mavenCoordinates) - if (!labelTracker.add(label)) { + if (labelTracker.put(label, "") != null) { continue }