From 99e06f0d8fc435d6742f72face8f766bf7d01d51 Mon Sep 17 00:00:00 2001 From: Brad Corso Date: Tue, 9 May 2023 15:15:40 -0700 Subject: [PATCH] Shade kotlinx metadata in Dagger's artifacts. This CL also removes an extra version of auto-common that we jarjared and shaded into the Hilt compiler artifacts. In particular, since Hilt's compiler artifacts depend transitively on the dagger-spi artifact, we can shade our auto-common references to use the version of auto-common shaded into dagger-spi instead of creating another version of the shaded classes in the hilt compiler artifacts. I've also updated the `gen_maven_artifact` macro to exclude are shaded dependencies from the `artifact_target_maven_deps` since that list is supposed to mimic our pom file dependencies. RELNOTES=Fixes #3701: Shade kotlinx metadata in Dagger's artifacts. PiperOrigin-RevId: 530726420 --- java/dagger/hilt/android/processor/BUILD | 6 ------ java/dagger/hilt/processor/BUILD | 6 ------ java/dagger/internal/codegen/BUILD | 2 -- java/dagger/spi/BUILD | 2 +- tools/maven.bzl | 16 +++++++++++++--- tools/shader/build.gradle | 3 +++ util/deploy-dagger.sh | 6 ++---- util/deploy-hilt.sh | 4 ++-- 8 files changed, 21 insertions(+), 24 deletions(-) diff --git a/java/dagger/hilt/android/processor/BUILD b/java/dagger/hilt/android/processor/BUILD index 296ae002d64..807ab5c024b 100644 --- a/java/dagger/hilt/android/processor/BUILD +++ b/java/dagger/hilt/android/processor/BUILD @@ -77,7 +77,6 @@ gen_maven_artifact( "//java/dagger/hilt/processor/internal/uninstallmodules:aggregated_uninstall_modules_metadata", ], artifact_target_maven_deps = [ - "com.google.auto:auto-common", "com.google.code.findbugs:jsr305", "com.google.dagger:dagger-compiler", "com.google.dagger:dagger", @@ -91,7 +90,6 @@ gen_maven_artifact( "javax.inject:javax.inject", "net.ltgt.gradle.incap:incap", "org.jetbrains.kotlin:kotlin-stdlib", - "org.jetbrains.kotlinx:kotlinx-metadata-jvm", ], javadoc_android_api_level = 32, javadoc_root_packages = [ @@ -102,10 +100,6 @@ gen_maven_artifact( javadoc_srcs = [ "//java/dagger/hilt:hilt_processing_filegroup", ], - # The shaded deps are added using jarjar, but they won't be shaded until later - # due to: https://github.com/google/dagger/issues/2765. For the shaded rules see - # util/deploy-hilt.sh - shaded_deps = ["//third_party/java/auto:common"], ) filegroup( diff --git a/java/dagger/hilt/processor/BUILD b/java/dagger/hilt/processor/BUILD index 64a48c9071e..bc8484266a9 100644 --- a/java/dagger/hilt/processor/BUILD +++ b/java/dagger/hilt/processor/BUILD @@ -99,7 +99,6 @@ gen_maven_artifact( "//java/dagger/hilt/processor/internal/uninstallmodules:aggregated_uninstall_modules_metadata", ], artifact_target_maven_deps = [ - "com.google.auto:auto-common", "com.google.code.findbugs:jsr305", "com.google.dagger:dagger-compiler", "com.google.dagger:dagger", @@ -113,7 +112,6 @@ gen_maven_artifact( "javax.inject:javax.inject", "net.ltgt.gradle.incap:incap", "org.jetbrains.kotlin:kotlin-stdlib", - "org.jetbrains.kotlinx:kotlinx-metadata-jvm", ], javadoc_android_api_level = 32, javadoc_root_packages = [ @@ -124,10 +122,6 @@ gen_maven_artifact( javadoc_srcs = [ "//java/dagger/hilt:hilt_processing_filegroup", ], - # The shaded deps are added using jarjar, but they won't be shaded until later - # due to: https://github.com/google/dagger/issues/2765. For the shaded rules see - # util/deploy-hilt.sh - shaded_deps = ["//third_party/java/auto:common"], ) filegroup( diff --git a/java/dagger/internal/codegen/BUILD b/java/dagger/internal/codegen/BUILD index a0a0388162f..a3868b5294e 100644 --- a/java/dagger/internal/codegen/BUILD +++ b/java/dagger/internal/codegen/BUILD @@ -88,7 +88,6 @@ gen_maven_artifact( "//java/dagger/internal/codegen/xprocessing", ], artifact_target_maven_deps = [ - "com.google.auto:auto-common", "com.google.code.findbugs:jsr305", "com.google.dagger:dagger-producers", "com.google.dagger:dagger-spi", @@ -103,7 +102,6 @@ gen_maven_artifact( "net.ltgt.gradle.incap:incap", "org.checkerframework:checker-compat-qual", "org.jetbrains.kotlin:kotlin-stdlib", - "org.jetbrains.kotlinx:kotlinx-metadata-jvm", ], javadoc_root_packages = ["dagger.internal.codegen"], # The javadocs should only include ComponentProcessor.java, since that is the only class used diff --git a/java/dagger/spi/BUILD b/java/dagger/spi/BUILD index 62e117eced5..13428c1a4f9 100644 --- a/java/dagger/spi/BUILD +++ b/java/dagger/spi/BUILD @@ -62,7 +62,6 @@ gen_maven_artifact( "//java/dagger/spi/model", ], artifact_target_maven_deps = [ - "com.google.auto:auto-common", "com.google.code.findbugs:jsr305", "com.google.dagger:dagger-producers", "com.google.dagger:dagger", @@ -82,6 +81,7 @@ gen_maven_artifact( # util/deploy-dagger.sh shaded_deps = [ "//third_party/java/auto:common", + "@maven//:org_jetbrains_kotlinx_kotlinx_metadata_jvm", "//java/dagger/internal/codegen/xprocessing:xprocessing-jar", ], ) diff --git a/tools/maven.bzl b/tools/maven.bzl index f842c88acef..bc763867382 100644 --- a/tools/maven.bzl +++ b/tools/maven.bzl @@ -20,6 +20,11 @@ load(":maven_info.bzl", "MavenInfo", "collect_maven_info") load("@google_bazel_common//tools/javadoc:javadoc.bzl", "javadoc_library") load("@google_bazel_common//tools/jarjar:jarjar.bzl", "jarjar_library") +SHADED_MAVEN_DEPS = [ + "com.google.auto:auto-common", + "org.jetbrains.kotlinx:kotlinx-metadata-jvm", +] + def pom_file(name, targets, artifact_name, artifact_id, packaging = None, **kwargs): default_pom_file( name = name, @@ -34,7 +39,12 @@ def pom_file(name, targets, artifact_name, artifact_id, packaging = None, **kwar "{artifact_id}": artifact_id, "{packaging}": packaging or "jar", }, - excluded_artifacts = ["com.google.auto:auto-common"], + # NOTE: The shaded maven dependencies are excluded from every Dagger pom file. + # Thus, if a Dagger artifact needs the dependencies it must jarjar the dependency + # into the artifact itself using the gen_maven_artifact.shaded_deps or get it from + # a transitive Dagger artifact as a dependency. In addition, the artifact must add + # the shade rules in the deploy scripts, e.g. deploy-dagger.sh. + excluded_artifacts = SHADED_MAVEN_DEPS, **kwargs ) @@ -54,7 +64,6 @@ def gen_maven_artifact( javadoc_exclude_packages = None, javadoc_android_api_level = None, shaded_deps = None, - shaded_rules = None, manifest = None, lint_deps = None, proguard_specs = None): @@ -282,7 +291,8 @@ def _validate_maven_deps_impl(ctx): actual_maven_deps = [_strip_artifact_version(artifact) for artifact in maven_nearest_artifacts] _validate_list( "artifact_target_maven_deps", - actual_maven_deps, + # Exclude shaded maven deps from this list since they're not actual dependencies. + [dep for dep in actual_maven_deps if dep not in SHADED_MAVEN_DEPS], expected_maven_deps, ctx.attr.banned_maven_deps, ) diff --git a/tools/shader/build.gradle b/tools/shader/build.gradle index aa9ba79be5e..51218ba3445 100644 --- a/tools/shader/build.gradle +++ b/tools/shader/build.gradle @@ -84,6 +84,9 @@ configurations { } shadowJar { + // This transform is needed so that services get relocated/shaded as well. + mergeServiceFiles() + archiveClassifier = "" // postfix for output jar configurations = [project.configurations.shaded] transform(ManifestMerger.class) diff --git a/util/deploy-dagger.sh b/util/deploy-dagger.sh index 7f59b462de6..2e7898bfb3a 100755 --- a/util/deploy-dagger.sh +++ b/util/deploy-dagger.sh @@ -51,10 +51,8 @@ _deploy \ gwt/libgwt.jar \ "" -# This artifact uses the shaded classes from dagger-spi, so we use the same -# shading rules so that our references to those classes are shaded the same way. _deploy \ - "com.google.auto.common,dagger.spi.shaded.auto.common;androidx.room.compiler,dagger.spi.shaded.androidx.room.compiler" \ + "com.google.auto.common,dagger.spi.shaded.auto.common;androidx.room.compiler,dagger.spi.shaded.androidx.room.compiler;kotlinx.metadata,dagger.spi.shaded.kotlinx.metadata" \ java/dagger/internal/codegen/artifact.jar \ java/dagger/internal/codegen/pom.xml \ java/dagger/internal/codegen/artifact-src.jar \ @@ -70,7 +68,7 @@ _deploy \ "" _deploy \ - "com.google.auto.common,dagger.spi.shaded.auto.common;androidx.room.compiler,dagger.spi.shaded.androidx.room.compiler" \ + "com.google.auto.common,dagger.spi.shaded.auto.common;androidx.room.compiler,dagger.spi.shaded.androidx.room.compiler;kotlinx.metadata,dagger.spi.shaded.kotlinx.metadata" \ java/dagger/spi/artifact.jar \ java/dagger/spi/pom.xml \ java/dagger/spi/artifact-src.jar \ diff --git a/util/deploy-hilt.sh b/util/deploy-hilt.sh index ed6e067c966..4e3f573b38d 100755 --- a/util/deploy-hilt.sh +++ b/util/deploy-hilt.sh @@ -52,7 +52,7 @@ _deploy \ "" _deploy \ - "com.google.auto.common,dagger.hilt.android.shaded.auto.common;androidx.room.compiler,dagger.spi.shaded.androidx.room.compiler" \ + "com.google.auto.common,dagger.spi.shaded.auto.common;androidx.room.compiler,dagger.spi.shaded.androidx.room.compiler;kotlinx.metadata,dagger.spi.shaded.kotlinx.metadata" \ java/dagger/hilt/processor/artifact.jar \ java/dagger/hilt/processor/pom.xml \ java/dagger/hilt/processor/artifact-src.jar \ @@ -60,7 +60,7 @@ _deploy \ "" _deploy \ - "com.google.auto.common,dagger.hilt.android.shaded.auto.common;androidx.room.compiler,dagger.spi.shaded.androidx.room.compiler" \ + "com.google.auto.common,dagger.spi.shaded.auto.common;androidx.room.compiler,dagger.spi.shaded.androidx.room.compiler;kotlinx.metadata,dagger.spi.shaded.kotlinx.metadata" \ java/dagger/hilt/android/processor/artifact.jar \ java/dagger/hilt/android/processor/pom.xml \ java/dagger/hilt/android/processor/artifact-src.jar \