Skip to content

Commit 716437d

Browse files
committed
Bridge binary incompatibility in Gradle 4.3 for TaskInputs#property()
* Fixes #34
1 parent d46add0 commit 716437d

File tree

3 files changed

+45
-17
lines changed

3 files changed

+45
-17
lines changed

android-junit5/src/main/groovy/de/mannodermaus/gradle/plugins/junit5/GroovyInterop.groovy

+23
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package de.mannodermaus.gradle.plugins.junit5
22

33
import com.android.annotations.NonNull
4+
import com.android.annotations.Nullable
45
import com.android.build.gradle.api.BaseVariant
56
import com.android.build.gradle.internal.variant.BaseVariantData
7+
import org.gradle.api.tasks.TaskInputs
68
import org.junit.platform.gradle.plugin.FiltersExtension
79
import org.junit.platform.gradle.plugin.SelectorsExtension
810

@@ -15,6 +17,27 @@ class GroovyInterop {
1517
// No instances
1618
private GroovyInterop() { throw new AssertionError() }
1719

20+
/**
21+
* Add the provided key-value pair to the given TaskInputs object.
22+
* Gradle 4.3 included a binary-incompatible change to this method's
23+
* return type, which fails for clients running older versions of the
24+
* build system.
25+
*
26+
* Refer to the related issue on GitHub:
27+
* https://github.com/mannodermaus/android-junit5/issues/34
28+
*
29+
* FIXME Once the plugin's minimal Gradle version reaches 4.3, remove this.
30+
*
31+
* @param inputs TaskInputs to update
32+
* @param key Key of the property to set
33+
* @param value Value of the property to set
34+
* @return Self reference with a backwards-compatible type
35+
*/
36+
@NonNull
37+
static TaskInputs taskInputs_safeProperty(TaskInputs inputs, String key, @Nullable Object value) {
38+
return inputs.property(key, value) as TaskInputs
39+
}
40+
1841
/**
1942
* Obtains the VariantData of the provided Variant.
2043
* BaseVariant#variantData is protected

android-junit5/src/main/kotlin/de/mannodermaus/gradle/plugins/junit5/Interop.kt

+4
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package de.mannodermaus.gradle.plugins.junit5
22

33
import com.android.build.gradle.api.BaseVariant
44
import com.android.build.gradle.internal.variant.BaseVariantData
5+
import org.gradle.api.tasks.TaskInputs
56
import org.junit.platform.gradle.plugin.FiltersExtension
67
import org.junit.platform.gradle.plugin.SelectorsExtension
78

@@ -23,3 +24,6 @@ fun FiltersExtension.getExcludeClassNamePatterns(): List<String> =
2324

2425
val BaseVariant.variantData: BaseVariantData
2526
get() = GroovyInterop.baseVariant_variantData(this)
27+
28+
fun TaskInputs.safeProperty(key: String, value: Any?) =
29+
GroovyInterop.taskInputs_safeProperty(this, key, value)

android-junit5/src/main/kotlin/de/mannodermaus/gradle/plugins/junit5/tasks/UnitTest.kt

+18-17
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import de.mannodermaus.gradle.plugins.junit5.junit5Info
1616
import de.mannodermaus.gradle.plugins.junit5.packages
1717
import de.mannodermaus.gradle.plugins.junit5.providers.DirectoryProvider
1818
import de.mannodermaus.gradle.plugins.junit5.providers.classDirectories
19+
import de.mannodermaus.gradle.plugins.junit5.safeProperty
1920
import de.mannodermaus.gradle.plugins.junit5.selectors
2021
import de.mannodermaus.gradle.plugins.junit5.tags
2122
import de.mannodermaus.gradle.plugins.junit5.variantData
@@ -147,24 +148,24 @@ open class AndroidJUnit5UnitTest : JavaExec() {
147148
private fun configureTaskInputs(
148149
task: AndroidJUnit5UnitTest,
149150
junit5: AndroidJUnitPlatformExtension) {
150-
task.inputs.property("enableStandardTestTask", junit5.enableStandardTestTask)
151-
task.inputs.property("configurationParameters", junit5.configurationParameters)
152-
task.inputs.property("selectors.uris", junit5.selectors.uris)
153-
task.inputs.property("selectors.files", junit5.selectors.files)
154-
task.inputs.property("selectors.directories", junit5.selectors.directories)
155-
task.inputs.property("selectors.packages", junit5.selectors.packages)
156-
task.inputs.property("selectors.classes", junit5.selectors.classes)
157-
task.inputs.property("selectors.methods", junit5.selectors.methods)
158-
task.inputs.property("selectors.resources", junit5.selectors.resources)
159-
task.inputs.property("selectors.modules", junit5.selectors.modules)
160-
task.inputs.property("filters.engines.include", junit5.filters.engines.include)
161-
task.inputs.property("filters.engines.exclude", junit5.filters.engines.exclude)
162-
task.inputs.property("filters.tags.include", junit5.filters.tags.include)
163-
task.inputs.property("filters.tags.exclude", junit5.filters.tags.exclude)
164-
task.inputs.property("filters.includeClassNamePatterns",
151+
task.inputs.safeProperty("enableStandardTestTask", junit5.enableStandardTestTask)
152+
task.inputs.safeProperty("configurationParameters", junit5.configurationParameters)
153+
task.inputs.safeProperty("selectors.uris", junit5.selectors.uris)
154+
task.inputs.safeProperty("selectors.files", junit5.selectors.files)
155+
task.inputs.safeProperty("selectors.directories", junit5.selectors.directories)
156+
task.inputs.safeProperty("selectors.packages", junit5.selectors.packages)
157+
task.inputs.safeProperty("selectors.classes", junit5.selectors.classes)
158+
task.inputs.safeProperty("selectors.methods", junit5.selectors.methods)
159+
task.inputs.safeProperty("selectors.resources", junit5.selectors.resources)
160+
task.inputs.safeProperty("selectors.modules", junit5.selectors.modules)
161+
task.inputs.safeProperty("filters.engines.include", junit5.filters.engines.include)
162+
task.inputs.safeProperty("filters.engines.exclude", junit5.filters.engines.exclude)
163+
task.inputs.safeProperty("filters.tags.include", junit5.filters.tags.include)
164+
task.inputs.safeProperty("filters.tags.exclude", junit5.filters.tags.exclude)
165+
task.inputs.safeProperty("filters.includeClassNamePatterns",
165166
junit5.filters.getIncludeClassNamePatterns())
166-
task.inputs.property("filters.packages.include", junit5.filters.packages.include)
167-
task.inputs.property("filters.packages.exclude", junit5.filters.packages.exclude)
167+
task.inputs.safeProperty("filters.packages.include", junit5.filters.packages.include)
168+
task.inputs.safeProperty("filters.packages.exclude", junit5.filters.packages.exclude)
168169

169170
junit5.logManager?.let {
170171
task.systemProperty("java.util.logging.manager", junit5.logManager)

0 commit comments

Comments
 (0)