Skip to content

Commit 09087db

Browse files
danysantiagoDagger Team
authored and
Dagger Team
committed
Reflect to getAndroidTest() in ApplicationVariant and LibraryVariant
Reflect into the property getter since the return type is different between earlier betas and RC but we are only interested that they return a com.android.build.api.variant.Component implementation. This change also adds a few deprecation suppressions to old variant APIs and old transform APIs usages, these are deprecated but we keep using them for backwards compatibility reasons. Fixes google#2762 RELNOTES=Fix an incompatibility issue with AGP 7.0.0-beta05 and 7.0.0-rc01 PiperOrigin-RevId: 387098587
1 parent 666df50 commit 09087db

File tree

8 files changed

+39
-23
lines changed

8 files changed

+39
-23
lines changed

.github/workflows/ci.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ jobs:
110110
runs-on: ubuntu-latest
111111
strategy:
112112
matrix:
113-
agp: ['4.1.0', '4.2.0', '7.0.0-beta04']
113+
agp: ['4.1.0', '4.2.0', '7.0.0-rc01']
114114
steps:
115115
- name: 'Check out repository'
116116
uses: actions/checkout@v2

java/dagger/hilt/android/plugin/build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
buildscript {
1818
ext {
19-
agp_version = System.getenv('AGP_VERSION') ?: "7.0.0-beta04"
19+
agp_version = System.getenv('AGP_VERSION') ?: "7.0.0-rc01"
2020
}
2121
repositories {
2222
google()

java/dagger/hilt/android/plugin/src/main/kotlin/dagger/hilt/android/plugin/AndroidEntryPointTransform.kt

+2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
* limitations under the License.
1515
*/
1616

17+
@file:Suppress("DEPRECATION") // com.android.build.api.transform is deprecated
18+
1719
package dagger.hilt.android.plugin
1820

1921
import com.android.build.api.transform.DirectoryInput

java/dagger/hilt/android/plugin/src/main/kotlin/dagger/hilt/android/plugin/HiltGradlePlugin.kt

+17-11
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,6 @@ import com.android.build.gradle.LibraryExtension
2626
import com.android.build.gradle.TestExtension
2727
import com.android.build.gradle.TestedExtension
2828
import com.android.build.gradle.api.AndroidBasePlugin
29-
import com.android.build.gradle.api.BaseVariant
30-
import com.android.build.gradle.api.TestVariant
31-
import com.android.build.gradle.api.UnitTestVariant
3229
import dagger.hilt.android.plugin.task.AggregateDepsTask
3330
import dagger.hilt.android.plugin.task.HiltTransformTestClassesTask
3431
import dagger.hilt.android.plugin.util.AggregatedPackagesTransform
@@ -124,7 +121,9 @@ class HiltGradlePlugin @Inject constructor(
124121

125122
// Invokes the [block] function for each Android variant that is considered a Hilt root, where
126123
// dependencies are aggregated and components are generated.
127-
private fun BaseExtension.forEachRootVariant(block: (variant: BaseVariant) -> Unit) {
124+
private fun BaseExtension.forEachRootVariant(
125+
@Suppress("DEPRECATION") block: (variant: com.android.build.gradle.api.BaseVariant) -> Unit
126+
) {
128127
when (this) {
129128
is AppExtension -> {
130129
// For an app project we configure the app variant and both androidTest and unitTest
@@ -150,7 +149,7 @@ class HiltGradlePlugin @Inject constructor(
150149
project: Project,
151150
hiltExtension: HiltExtension,
152151
androidExtension: BaseExtension,
153-
variant: BaseVariant
152+
@Suppress("DEPRECATION") variant: com.android.build.gradle.api.BaseVariant
154153
) {
155154
if (
156155
!hiltExtension.enableExperimentalClasspathAggregation || hiltExtension.enableAggregatingTask
@@ -192,7 +191,8 @@ class HiltGradlePlugin @Inject constructor(
192191
return
193192
}
194193

195-
val runtimeConfiguration = if (variant is TestVariant) {
194+
@Suppress("DEPRECATION") // Older variant API is deprecated
195+
val runtimeConfiguration = if (variant is com.android.build.gradle.api.TestVariant) {
196196
// For Android test variants, the tested runtime classpath is used since the test app has
197197
// tested dependencies removed.
198198
variant.testedVariant.runtimeConfiguration
@@ -219,10 +219,11 @@ class HiltGradlePlugin @Inject constructor(
219219
// debugUnitTest -> testDebugCompileOnly
220220
// release -> releaseCompileOnly
221221
// releaseUnitTest -> testReleaseCompileOnly
222+
@Suppress("DEPRECATION") // Older variant API is deprecated
222223
val compileOnlyConfigName = when (variant) {
223-
is TestVariant ->
224+
is com.android.build.gradle.api.TestVariant ->
224225
"androidTest${variant.name.substringBeforeLast("AndroidTest").capitalize()}CompileOnly"
225-
is UnitTestVariant ->
226+
is com.android.build.gradle.api.UnitTestVariant ->
226227
"test${variant.name.substringBeforeLast("UnitTest").capitalize()}CompileOnly"
227228
else ->
228229
"${variant.name}CompileOnly"
@@ -284,7 +285,7 @@ class HiltGradlePlugin @Inject constructor(
284285
project: Project,
285286
hiltExtension: HiltExtension,
286287
androidExtension: BaseExtension,
287-
variant: BaseVariant
288+
@Suppress("DEPRECATION") variant: com.android.build.gradle.api.BaseVariant
288289
) {
289290
if (!hiltExtension.enableAggregatingTask) {
290291
// Option is not enabled, don't configure aggregating task.
@@ -295,7 +296,8 @@ class HiltGradlePlugin @Inject constructor(
295296
"hiltCompileOnly${variant.name.capitalize()}"
296297
).apply {
297298
// The runtime config of the test APK differs from the tested one.
298-
if (variant is TestVariant) {
299+
@Suppress("DEPRECATION") // Older variant API is deprecated
300+
if (variant is com.android.build.gradle.api.TestVariant) {
299301
extendsFrom(variant.testedVariant.runtimeConfiguration)
300302
}
301303
extendsFrom(variant.runtimeConfiguration)
@@ -350,7 +352,11 @@ class HiltGradlePlugin @Inject constructor(
350352
it.outputDir.set(
351353
project.file(project.buildDir.resolve("generated/hilt/component_trees/${variant.name}/"))
352354
)
353-
it.testEnvironment.set(variant is TestVariant || variant is UnitTestVariant)
355+
@Suppress("DEPRECATION") // Older variant API is deprecated
356+
it.testEnvironment.set(
357+
variant is com.android.build.gradle.api.TestVariant ||
358+
variant is com.android.build.gradle.api.UnitTestVariant
359+
)
354360
it.crossCompilationRootValidationDisabled.set(
355361
hiltExtension.disableCrossCompilationRootValidation
356362
)

java/dagger/hilt/android/plugin/src/main/kotlin/dagger/hilt/android/plugin/task/HiltTransformTestClassesTask.kt

+1-2
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
*/
1616
package dagger.hilt.android.plugin.task
1717

18-
import com.android.build.gradle.api.UnitTestVariant
1918
import dagger.hilt.android.plugin.AndroidEntryPointClassTransformer
2019
import dagger.hilt.android.plugin.HiltExtension
2120
import dagger.hilt.android.plugin.util.getCompileKotlin
@@ -114,7 +113,7 @@ abstract class HiltTransformTestClassesTask @Inject constructor(
114113

115114
fun create(
116115
project: Project,
117-
unitTestVariant: UnitTestVariant,
116+
@Suppress("DEPRECATION") unitTestVariant: com.android.build.gradle.api.UnitTestVariant,
118117
extension: HiltExtension
119118
) {
120119
if (!extension.enableTransformForLocalTests) {

java/dagger/hilt/android/plugin/src/main/kotlin/dagger/hilt/android/plugin/util/AndroidGradleCompat.kt

+9-2
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,17 @@ sealed class AndroidComponentsExtensionCompat {
4545
) : AndroidComponentsExtensionCompat() {
4646
override fun onAllVariants(block: (ComponentCompat) -> Unit) {
4747
actual.onVariants { variant ->
48+
// Use reflection to get the AndroidTest component out of the variant because a binary
49+
// incompatible change was introduced in AGP 7.0-beta05 that changed the return type of the
50+
// method.
51+
fun ApplicationVariant.getAndroidTest() =
52+
this::class.java.getDeclaredMethod("getAndroidTest").invoke(this) as? Component
53+
fun LibraryVariant.getAndroidTest() =
54+
this::class.java.getDeclaredMethod("getAndroidTest").invoke(this) as? Component
4855
block.invoke(ComponentCompat.Api70Impl(variant))
4956
when (variant) {
50-
is ApplicationVariant -> variant.androidTest
51-
is LibraryVariant -> variant.androidTest
57+
is ApplicationVariant -> variant.getAndroidTest()
58+
is LibraryVariant -> variant.getAndroidTest()
5259
else -> null
5360
}?.let { block.invoke(ComponentCompat.Api70Impl(it)) }
5461
variant.unitTest?.let { block.invoke(ComponentCompat.Api70Impl(it)) }
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package dagger.hilt.android.plugin.util
22

3-
import com.android.build.gradle.api.BaseVariant
43
import org.gradle.api.Project
54
import org.gradle.api.tasks.TaskProvider
65
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
@@ -9,7 +8,9 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
98
* Gets [KotlinCompile] task of an Android variant.
109
*/
1110
@Suppress("UNCHECKED_CAST")
12-
internal fun getCompileKotlin(variant: BaseVariant, project: Project) =
13-
project.tasks.named(
14-
"compile${variant.name.capitalize()}Kotlin"
15-
) as TaskProvider<KotlinCompile>
11+
internal fun getCompileKotlin(
12+
@Suppress("DEPRECATION") variant: com.android.build.gradle.api.BaseVariant,
13+
project: Project
14+
) = project.tasks.named(
15+
"compile${variant.name.capitalize()}Kotlin"
16+
) as TaskProvider<KotlinCompile>

util/run-local-tests.sh

+2-1
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,6 @@ pushd examples/maven && mvn compile && popd
1818
util/run-local-gradle-tests.sh
1919
util/run-local-gradle-android-tests.sh "4.1.0"
2020
util/run-local-gradle-android-tests.sh "4.2.0"
21-
util/run-local-gradle-android-tests.sh "7.0.0-beta04"
21+
util/run-local-gradle-android-tests.sh "7.0.0-rc01"
22+
2223

0 commit comments

Comments
 (0)