diff --git a/.bazelrc b/.bazelrc index ad0deb36f74..100797635f7 100644 --- a/.bazelrc +++ b/.bazelrc @@ -12,10 +12,10 @@ build --experimental_disk_cache_gc_max_size=2G build --javacopt=-g build --host_javacopt=-g -# Disable The Guava Beta Checker. +# Enable The Guava Beta Checker. # TODO(ronshapiro): explore how much work it would be to reenable this -build --javacopt="-Xep:BetaApi:OFF" -build --host_javacopt="-Xep:BetaApi:OFF" +build --javacopt="-Xep:BetaApi:ERROR" +build --host_javacopt="-Xep:BetaApi:ERROR" # Sets the JDK for compiling sources. # TODO(b/394093156): Upgrade to JDK 21. diff --git a/MODULE.bazel b/MODULE.bazel index c7b62893199..276954e684b 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -42,7 +42,7 @@ ECLIPSE_SISU_VERSION = "0.3.0" ERROR_PRONE_VERSION = "2.23.0" -GUAVA_VERSION = "33.0.0" +GUAVA_VERSION = "33.6.0" GRPC_VERSION = "1.2.0" diff --git a/dagger-kythe/main/java/dagger/internal/codegen/kythe/DaggerKythePlugin.java b/dagger-kythe/main/java/dagger/internal/codegen/kythe/DaggerKythePlugin.java index 9c1e21c0956..ed4e6a4934f 100644 --- a/dagger-kythe/main/java/dagger/internal/codegen/kythe/DaggerKythePlugin.java +++ b/dagger-kythe/main/java/dagger/internal/codegen/kythe/DaggerKythePlugin.java @@ -89,6 +89,8 @@ private void addNodesForGraph(dagger.internal.codegen.binding.BindingGraph graph addChildComponentEdges(graph); } + @SuppressWarnings( + "BetaApi") // Kythe's bundled Guava still has @Beta on com.google.common.graph APIs. private void addDependencyEdges(BindingGraph graph) { for (DependencyEdge dependencyEdge : graph.dependencyEdges()) { DependencyRequest dependency = dependencyEdge.dependencyRequest(); @@ -106,6 +108,8 @@ private void addDependencyEdges(BindingGraph graph) { * points to all of the contributions for the multibound object. It does so by recursively calling * this method, with each dependency's key as the {@code targetKey}. */ + @SuppressWarnings( + "BetaApi") // Kythe's bundled Guava still has @Beta on com.google.common.graph APIs. private void addEdgesForDependencyRequest( DependencyRequest dependency, BindingNode bindingNode, BindingGraph graph) { if (!dependency.requestElement().isPresent()) { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 1dfc1155f8a..fcb6b5576c2 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -7,7 +7,7 @@ autoService = "1.0" autoValue = "1.9" lifecycle = "2.5.1" lint = "30.3.1" -guava = "33.0.0-jre" +guava = "33.6.0-jre" gradleIncap = "0.2" grpc = "1.2.0" jdk = "17" diff --git a/javatests/artifacts/dagger-android/simple/app/build.gradle b/javatests/artifacts/dagger-android/simple/app/build.gradle index 4f0c06bf563..68dd0e9e224 100644 --- a/javatests/artifacts/dagger-android/simple/app/build.gradle +++ b/javatests/artifacts/dagger-android/simple/app/build.gradle @@ -70,7 +70,7 @@ dependencies { androidTestAnnotationProcessor 'com.google.dagger:dagger-android-processor:LOCAL-SNAPSHOT' // To help us catch usages of Guava APIs for Java 8 in the '-jre' variant. - annotationProcessor'com.google.guava:guava:28.1-android' - testAnnotationProcessor'com.google.guava:guava:28.1-android' - androidTestAnnotationProcessor'com.google.guava:guava:28.1-android' + annotationProcessor'com.google.guava:guava:33.6.0-android' + testAnnotationProcessor'com.google.guava:guava:33.6.0-android' + androidTestAnnotationProcessor'com.google.guava:guava:33.6.0-android' } diff --git a/javatests/artifacts/hilt-android/simple/app/build.gradle.kts b/javatests/artifacts/hilt-android/simple/app/build.gradle.kts index ae969ce8e8b..26e5da8e347 100644 --- a/javatests/artifacts/hilt-android/simple/app/build.gradle.kts +++ b/javatests/artifacts/hilt-android/simple/app/build.gradle.kts @@ -17,8 +17,8 @@ import java.io.File plugins { - id("com.android.application") - id("com.google.dagger.hilt.android") + id("com.android.application") + id("com.google.dagger.hilt.android") } data class AgpVersion( @@ -27,40 +27,37 @@ data class AgpVersion( val patch: Int, val qualifierName: String?, val qualifierVersion: Int?, -): Comparable { +) : Comparable { override fun compareTo(other: AgpVersion): Int { val versionComparison = compareValuesBy(this, other, { it.major }, { it.minor }, { it.patch }) return if (versionComparison != 0) { - versionComparison + versionComparison } else { // If the versions are equal then compare qualifiers: when { qualifierName == null && other.qualifierName == null -> 0 qualifierName == null && other.qualifierName != null -> -1 qualifierName != null && other.qualifierName == null -> 1 - else -> compareValuesBy( - this, other, - { it.qualifierName!! }, - { it.qualifierVersion!! }, - ) + else -> compareValuesBy(this, other, { it.qualifierName!! }, { it.qualifierVersion!! }) } } } companion object { - val VERSION_REGEX = Regex( - "(?\\d+)\\.(?\\d+)\\.(?\\d+)" + + val VERSION_REGEX = + Regex( + "(?\\d+)\\.(?\\d+)\\.(?\\d+)" + "(?:-(?[a-zA-Z]+)(?\\d+))?" - ) + ) fun parse(versionStr: String): AgpVersion { return VERSION_REGEX.matchEntire(versionStr)?.let { match -> AgpVersion( - major = match.groups["major"]!!.value.toInt(), - minor = match.groups["minor"]!!.value.toInt(), - patch = match.groups["patch"]!!.value.toInt(), - qualifierName = match.groups["qualifierName"]?.value, - qualifierVersion = match.groups["qualifierVersion"]?.value?.toInt() + major = match.groups["major"]!!.value.toInt(), + minor = match.groups["minor"]!!.value.toInt(), + patch = match.groups["patch"]!!.value.toInt(), + qualifierName = match.groups["qualifierName"]?.value, + qualifierVersion = match.groups["qualifierVersion"]?.value?.toInt(), ) } ?: error("Version string has incorrect format: $versionStr") } @@ -71,130 +68,119 @@ data class AgpVersion( // sets. If the directory name is appended with '-agp-x.x.x' then the directory // is conditionally added based on the AGP version of the project. fun getAdditionalTestDirs(variant: String): List { - val testDirs = mutableMapOf( - "androidTest" to mutableListOf(), - "sharedTest" to mutableListOf("src/sharedTest/java"), - "test" to mutableListOf() + val testDirs = + mutableMapOf( + "androidTest" to mutableListOf(), + "sharedTest" to mutableListOf("src/sharedTest/java"), + "test" to mutableListOf(), ) - val suffix = "-agp-" - - val agpVersionString = properties["agp_version"] as String - val agpVersion = AgpVersion.parse(agpVersionString) - - File("${project.projectDir.absolutePath}/src").listFiles()?.forEach { file -> - if (file.isDirectory) { - val indexOf = file.name.indexOf(suffix) - if (indexOf != -1) { - try { - val dirAgpVersionStr = file.name.substring(indexOf + suffix.length) - val dirAgpVersion = AgpVersion.parse(dirAgpVersionStr) - if (agpVersion >= dirAgpVersion) { - val dirName = file.name.substring(0, indexOf) - testDirs[dirName]?.add("src/${file.name}/java") - } - } catch (e: IllegalArgumentException) { - // Handle cases where the version string is not valid - println("Warning: Could not parse version from directory name: ${file.name}") - } - } + val suffix = "-agp-" + + val agpVersionString = properties["agp_version"] as String + val agpVersion = AgpVersion.parse(agpVersionString) + + File("${project.projectDir.absolutePath}/src").listFiles()?.forEach { file -> + if (file.isDirectory) { + val indexOf = file.name.indexOf(suffix) + if (indexOf != -1) { + try { + val dirAgpVersionStr = file.name.substring(indexOf + suffix.length) + val dirAgpVersion = AgpVersion.parse(dirAgpVersionStr) + if (agpVersion >= dirAgpVersion) { + val dirName = file.name.substring(0, indexOf) + testDirs[dirName]?.add("src/${file.name}/java") + } + } catch (e: IllegalArgumentException) { + // Handle cases where the version string is not valid + println("Warning: Could not parse version from directory name: ${file.name}") } + } } - return (testDirs[variant] ?: emptyList()) + (testDirs["sharedTest"] ?: emptyList()) + } + return (testDirs[variant] ?: emptyList()) + (testDirs["sharedTest"] ?: emptyList()) } android { - compileSdk = 36 - buildToolsVersion = "36.0.0" - - defaultConfig { - applicationId = "dagger.hilt.android.simple" - minSdk = 16 - targetSdk = 36 - versionCode = 1 - versionName = "1.0" - testInstrumentationRunner = "dagger.hilt.android.simple.SimpleEmulatorTestRunner" - } - namespace = "dagger.hilt.android.simple" - compileOptions { - sourceCompatibility = JavaVersion.VERSION_11 - targetCompatibility = JavaVersion.VERSION_11 - } - testOptions { - unitTests.isIncludeAndroidResources = true - } - lint { - checkReleaseBuilds = false - } - sourceSets { - named("test").configure { - java.srcDirs(getAdditionalTestDirs("test")) - } - named("androidTest").configure { - java.srcDirs(getAdditionalTestDirs("androidTest")) - } - } - flavorDimensions += "tier" - productFlavors { - create("free") { - dimension = "tier" - } - create("pro") { - dimension = "tier" - matchingFallbacks += "free" - } + compileSdk = 36 + buildToolsVersion = "36.0.0" + + defaultConfig { + applicationId = "dagger.hilt.android.simple" + minSdk = 16 + targetSdk = 36 + versionCode = 1 + versionName = "1.0" + testInstrumentationRunner = "dagger.hilt.android.simple.SimpleEmulatorTestRunner" + } + namespace = "dagger.hilt.android.simple" + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } + testOptions { unitTests.isIncludeAndroidResources = true } + lint { checkReleaseBuilds = false } + sourceSets { + named("test").configure { java.srcDirs(getAdditionalTestDirs("test")) } + named("androidTest").configure { java.srcDirs(getAdditionalTestDirs("androidTest")) } + } + flavorDimensions += "tier" + productFlavors { + create("free") { dimension = "tier" } + create("pro") { + dimension = "tier" + matchingFallbacks += "free" } + } } -hilt { - enableAggregatingTask = true -} +hilt { enableAggregatingTask = true } val dagger_version: String by project configurations.all { - resolutionStrategy.eachDependency { - if (dagger_version == "LOCAL-SNAPSHOT" && requested.group == "com.google.dagger") { - useVersion("LOCAL-SNAPSHOT") - because("LOCAL-SNAPSHOT should act as latest version.") - } + resolutionStrategy.eachDependency { + if (dagger_version == "LOCAL-SNAPSHOT" && requested.group == "com.google.dagger") { + useVersion("LOCAL-SNAPSHOT") + because("LOCAL-SNAPSHOT should act as latest version.") } + } } dependencies { - implementation(project(":feature")) - implementation(project(":lib")) - implementation("androidx.appcompat:appcompat:1.2.0") - implementation("com.google.dagger:hilt-android:$dagger_version") - annotationProcessor("com.google.dagger:hilt-compiler:$dagger_version") - compileOnly("com.google.errorprone:error_prone_annotations:2.45.0") - - testImplementation("com.google.truth:truth:1.0.1") - testImplementation("junit:junit:4.13") - testImplementation("org.robolectric:robolectric:4.11.1") - testImplementation("androidx.core:core:1.3.2") - testImplementation("androidx.test.ext:junit:1.1.3") - testImplementation("androidx.test:runner:1.4.0") - testImplementation("androidx.test.espresso:espresso-core:3.5.1") - testImplementation("com.google.dagger:hilt-android-testing:$dagger_version") - testAnnotationProcessor("com.google.dagger:hilt-compiler:$dagger_version") - - androidTestImplementation("com.google.truth:truth:1.0.1") - androidTestImplementation("junit:junit:4.13") - androidTestImplementation("androidx.test.ext:junit:1.1.3") - androidTestImplementation("androidx.test:runner:1.4.0") - androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") - androidTestImplementation("com.google.dagger:hilt-android-testing:$dagger_version") - androidTestAnnotationProcessor("com.google.dagger:hilt-compiler:$dagger_version") - - // To help us catch usages of Guava APIs for Java 8 in the '-jre' variant. - annotationProcessor("com.google.guava:guava:28.1-android") - testAnnotationProcessor("com.google.guava:guava:28.1-android") - androidTestAnnotationProcessor("com.google.guava:guava:28.1-android") - - // To help us catch version skew related issues in hilt extensions. - // TODO(bcorso): Add examples testing the actual API. - implementation("androidx.hilt:hilt-work:1.0.0") - annotationProcessor("androidx.hilt:hilt-compiler:1.0.0") - testAnnotationProcessor("androidx.hilt:hilt-compiler:1.0.0") - androidTestAnnotationProcessor("androidx.hilt:hilt-compiler:1.0.0") + implementation(project(":feature")) + implementation(project(":lib")) + implementation("androidx.appcompat:appcompat:1.2.0") + implementation("com.google.dagger:hilt-android:$dagger_version") + annotationProcessor("com.google.dagger:hilt-compiler:$dagger_version") + compileOnly("com.google.errorprone:error_prone_annotations:2.45.0") + + testImplementation("com.google.truth:truth:1.0.1") + testImplementation("junit:junit:4.13") + testImplementation("org.robolectric:robolectric:4.11.1") + testImplementation("androidx.core:core:1.3.2") + testImplementation("androidx.test.ext:junit:1.1.3") + testImplementation("androidx.test:runner:1.4.0") + testImplementation("androidx.test.espresso:espresso-core:3.5.1") + testImplementation("com.google.dagger:hilt-android-testing:$dagger_version") + testAnnotationProcessor("com.google.dagger:hilt-compiler:$dagger_version") + + androidTestImplementation("com.google.truth:truth:1.0.1") + androidTestImplementation("junit:junit:4.13") + androidTestImplementation("androidx.test.ext:junit:1.1.3") + androidTestImplementation("androidx.test:runner:1.4.0") + androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") + androidTestImplementation("com.google.dagger:hilt-android-testing:$dagger_version") + androidTestAnnotationProcessor("com.google.dagger:hilt-compiler:$dagger_version") + + // To help us catch usages of Guava APIs for Java 8 in the '-jre' variant. + annotationProcessor("com.google.guava:guava:33.6.0-android") + testAnnotationProcessor("com.google.guava:guava:33.6.0-android") + androidTestAnnotationProcessor("com.google.guava:guava:33.6.0-android") + + // To help us catch version skew related issues in hilt extensions. + // TODO(bcorso): Add examples testing the actual API. + implementation("androidx.hilt:hilt-work:1.0.0") + annotationProcessor("androidx.hilt:hilt-compiler:1.0.0") + testAnnotationProcessor("androidx.hilt:hilt-compiler:1.0.0") + androidTestAnnotationProcessor("androidx.hilt:hilt-compiler:1.0.0") } diff --git a/maven_install.json b/maven_install.json index 19bd2d68b21..5bd265f01f1 100644 --- a/maven_install.json +++ b/maven_install.json @@ -1,15 +1,16 @@ { "__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": "THERE_IS_NO_DATA_ONLY_ZUUL", - "__INPUT_ARTIFACTS_HASH": -1547398391, - "__RESOLVED_ARTIFACTS_HASH": -6353407, + "__INPUT_ARTIFACTS_HASH": 749072457, + "__RESOLVED_ARTIFACTS_HASH": 1934045346, "conflict_resolution": { "androidx.test:monitor:1.4.0": "androidx.test:monitor:1.8.0", "com.google.auto.value:auto-value-annotations:1.9": "com.google.auto.value:auto-value-annotations:1.11.0", "com.google.code.findbugs:jsr305:3.0.1": "com.google.code.findbugs:jsr305:3.0.2", "com.google.errorprone:error_prone_annotation:2.23.0": "com.google.errorprone:error_prone_annotation:2.41.0", - "com.google.errorprone:error_prone_annotations:2.23.0": "com.google.errorprone:error_prone_annotations:2.45.0", - "com.google.errorprone:error_prone_annotations:2.5.1": "com.google.errorprone:error_prone_annotations:2.45.0", - "com.google.guava:failureaccess:1.0.1": "com.google.guava:failureaccess:1.0.2", + "com.google.errorprone:error_prone_annotations:2.23.0": "com.google.errorprone:error_prone_annotations:2.47.0", + "com.google.errorprone:error_prone_annotations:2.5.1": "com.google.errorprone:error_prone_annotations:2.47.0", + "com.google.guava:failureaccess:1.0.1": "com.google.guava:failureaccess:1.0.3", + "com.google.j2objc:j2objc-annotations:2.8": "com.google.j2objc:j2objc-annotations:3.1", "io.github.java-diff-utils:java-diff-utils:4.11": "io.github.java-diff-utils:java-diff-utils:4.12", "net.bytebuddy:byte-buddy-agent:1.9.10": "net.bytebuddy:byte-buddy-agent:1.14.5", "net.bytebuddy:byte-buddy:1.9.10": "net.bytebuddy:byte-buddy:1.14.5", @@ -615,9 +616,9 @@ }, "com.google.errorprone:error_prone_annotations": { "shasums": { - "jar": "6ba61510e22944e8aec3fe970972d088d8da132a24f2bc817a43c7b70665cc2b" + "jar": "5364bc6f22e72e98195e406a58d3ba1c09ffa11dea0729592cb870dc2de4056d" }, - "version": "2.45.0" + "version": "2.47.0" }, "com.google.errorprone:error_prone_check_api": { "shasums": { @@ -633,15 +634,15 @@ }, "com.google.guava:failureaccess": { "shasums": { - "jar": "8a8f81cf9b359e3f6dfa691a1e776985c061ef2f223c9b2c80753e1b458e8064" + "jar": "cbfc3906b19b8f55dd7cfd6dfe0aa4532e834250d7f080bd8d211a3e246b59cb" }, - "version": "1.0.2" + "version": "1.0.3" }, "com.google.guava:guava": { "shasums": { - "jar": "f4d85c3e4d411694337cb873abea09b242b664bb013320be6105327c45991537" + "jar": "dc573e1fca4fd5454f4a5fd3d7da2df03002876a4175bafc14a95980dd7713b3" }, - "version": "33.0.0-jre" + "version": "33.6.0-jre" }, "com.google.guava:guava-beta-checker": { "shasums": { @@ -651,9 +652,9 @@ }, "com.google.guava:guava-testlib": { "shasums": { - "jar": "79626019fed282b70eef91f645a9febd5f6b9f7be46484b6b328313a481f05f0" + "jar": "61796b530b22fc45e94f808ac954bd437e605335995a3bfeaf8452dbfc9e26df" }, - "version": "33.0.0-jre" + "version": "33.6.0-jre" }, "com.google.guava:listenablefuture": { "shasums": { @@ -675,9 +676,9 @@ }, "com.google.j2objc:j2objc-annotations": { "shasums": { - "jar": "f02a95fa1a5e95edb3ed859fd0fb7df709d121a35290eff8b74dce2ab7f4d6ed" + "jar": "84d3a150518485f8140ea99b8a985656749629f6433c92b80c75b36aba3b099b" }, - "version": "2.8" + "version": "3.1" }, "com.google.jimfs:jimfs": { "shasums": { @@ -1937,20 +1938,18 @@ "com.google.guava:guava" ], "com.google.guava:guava": [ - "com.google.code.findbugs:jsr305", "com.google.errorprone:error_prone_annotations", "com.google.guava:failureaccess", "com.google.guava:listenablefuture", "com.google.j2objc:j2objc-annotations", - "org.checkerframework:checker-qual" + "org.jspecify:jspecify" ], "com.google.guava:guava-testlib": [ - "com.google.code.findbugs:jsr305", "com.google.errorprone:error_prone_annotations", "com.google.guava:guava", "com.google.j2objc:j2objc-annotations", "junit:junit", - "org.checkerframework:checker-qual" + "org.jspecify:jspecify" ], "com.google.inject:guice": [ "aopalliance:aopalliance",