Skip to content

Commit f5b8819

Browse files
committed
Clean-up of Kotlin extensions
1 parent 870c1ce commit f5b8819

File tree

7 files changed

+49
-21
lines changed

7 files changed

+49
-21
lines changed

android-junit5/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ dependencies {
8383

8484
// Dependent Plugins
8585
compile "org.junit.platform:junit-platform-gradle-plugin:$JUNIT_PLATFORM_VERSION"
86+
compileOnly "org.jetbrains.kotlin:kotlin-gradle-plugin:$KOTLIN_VERSION"
8687
compileOnly "com.android.tools.build:gradle:$ANDROID_PLUGIN_3X_VERSION"
8788
}
8889

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

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import com.android.build.gradle.api.BaseVariant
55
import com.android.build.gradle.api.UnitTestVariant
66
import com.android.build.gradle.internal.api.TestedVariant
77
import de.mannodermaus.gradle.plugins.junit5.tasks.AndroidJUnit5JacocoReport
8+
import de.mannodermaus.gradle.plugins.junit5.tasks.AndroidJUnit5UnitTest
89
import groovy.lang.Closure
910
import org.gradle.api.GradleException
1011
import org.gradle.api.Project
@@ -13,6 +14,8 @@ import org.gradle.api.artifacts.dsl.DependencyHandler
1314
import org.gradle.api.plugins.ExtensionAware
1415
import org.gradle.api.plugins.ExtraPropertiesExtension
1516
import org.gradle.api.tasks.TaskContainer
17+
import org.gradle.testing.jacoco.plugins.JacocoPluginExtension
18+
import org.gradle.testing.jacoco.plugins.JacocoTaskExtension
1619
import org.gradle.util.GradleVersion
1720
import org.junit.platform.gradle.plugin.EnginesExtension
1821
import org.junit.platform.gradle.plugin.FiltersExtension
@@ -36,7 +39,10 @@ fun loadProperties(resource: String): Properties {
3639
return properties
3740
}
3841

39-
/* Extension Functions */
42+
/*
43+
* "Extension" Extension Functions:
44+
* Shorthand properties to access different plugins' extension models.
45+
*/
4046

4147
val AndroidJUnitPlatformExtension.selectors
4248
get() = extensionByName<SelectorsExtension>(SELECTORS_EXTENSION_NAME)
@@ -56,6 +62,15 @@ val FiltersExtension.engines
5662
val AndroidJUnitPlatformExtension.jacoco
5763
get() = extensionByName<AndroidJUnit5JacocoReport.Extension>(JACOCO_EXTENSION_NAME)
5864

65+
val Project.junit5
66+
get() = extensionByName<AndroidJUnitPlatformExtension>(EXTENSION_NAME)
67+
68+
val Project.jacoco
69+
get() = extensionByName<JacocoPluginExtension>("jacoco")
70+
71+
val AndroidJUnit5UnitTest.jacoco
72+
get() = extensionByName<JacocoTaskExtension>("jacoco")
73+
5974
/* Interoperability layer for Gradle */
6075

6176
/**
@@ -81,7 +96,7 @@ inline fun <reified T> Any.createExtension(
8196
* Obtain an Extension by name & directly cast it to the expected type.
8297
*/
8398
@Suppress("UNCHECKED_CAST")
84-
fun <T> Any.extensionByName(name: String): T {
99+
private fun <T> Any.extensionByName(name: String): T {
85100
if (this !is ExtensionAware) {
86101
throw IllegalArgumentException("Argument is not ExtensionAware: $this")
87102
}
@@ -93,7 +108,7 @@ fun <T> Any.extensionByName(name: String): T {
93108
* Log the provided info message using the plugin's Log Tag.
94109
*/
95110
fun Project.logInfo(text: String) {
96-
logger.info("${LOG_TAG}: $text")
111+
logger.info("$LOG_TAG: $text")
97112
}
98113

99114
/**
@@ -157,7 +172,7 @@ fun TaskContainer.maybeCreate(name: String, group: String? = null): Task {
157172
fun Project.withDependencies(defaults: Properties, config: (Versions) -> Any): Any {
158173
val versions = Versions(
159174
project = this,
160-
extension = extensionByName(EXTENSION_NAME),
175+
extension = project.junit5,
161176
defaults = defaults)
162177
return config(versions)
163178
}

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

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,7 @@ package de.mannodermaus.gradle.plugins.junit5.tasks
33
import com.android.build.gradle.api.BaseVariant
44
import com.android.build.gradle.internal.scope.TaskConfigAction
55
import com.android.build.gradle.internal.scope.VariantScope
6-
import de.mannodermaus.gradle.plugins.junit5.AndroidJUnitPlatformExtension
7-
import de.mannodermaus.gradle.plugins.junit5.EXTENSION_NAME
8-
import de.mannodermaus.gradle.plugins.junit5.extensionByName
6+
import de.mannodermaus.gradle.plugins.junit5.junit5
97
import de.mannodermaus.gradle.plugins.junit5.variantData
108
import org.gradle.api.Project
119
import org.gradle.api.Task
@@ -21,5 +19,5 @@ abstract class JUnit5TaskConfigAction<T : Task>(
2119

2220
protected val variant: BaseVariant = testTask.variant
2321
protected val scope: VariantScope = variant.variantData.scope
24-
protected val junit5 = project.extensionByName<AndroidJUnitPlatformExtension>(EXTENSION_NAME)
22+
protected val junit5 = project.junit5
2523
}

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

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,9 @@
11
package de.mannodermaus.gradle.plugins.junit5.tasks
22

3-
import de.mannodermaus.gradle.plugins.junit5.JACOCO_EXTENSION_NAME
4-
import de.mannodermaus.gradle.plugins.junit5.extensionByName
3+
import de.mannodermaus.gradle.plugins.junit5.jacoco
54
import de.mannodermaus.gradle.plugins.junit5.logInfo
65
import de.mannodermaus.gradle.plugins.junit5.maybeCreate
76
import org.gradle.api.Project
8-
import org.gradle.testing.jacoco.plugins.JacocoPluginExtension
9-
import org.gradle.testing.jacoco.plugins.JacocoTaskExtension
107
import org.gradle.testing.jacoco.tasks.JacocoReport
118

129
private const val TASK_NAME_DEFAULT = "jacocoTestReport"
@@ -53,15 +50,15 @@ open class AndroidJUnit5JacocoReport : JacocoReport() {
5350

5451
override fun execute(reportTask: AndroidJUnit5JacocoReport) {
5552
// Project-level configuration
56-
val projectJacoco = project.extensionByName<JacocoPluginExtension>(JACOCO_PLUGIN_EXT)
53+
val projectJacoco = project.jacoco
5754
projectJacoco.applyTo(testTask)
5855
reportTask.dependsOn(testTask)
5956
reportTask.group = GROUP_REPORTING
6057
reportTask.description = "Generates Jacoco coverage reports " +
6158
"for the ${variant.name.capitalize()} variant."
6259

6360
// Task-level Configuration
64-
val taskJacoco = testTask.extensionByName<JacocoTaskExtension>(JACOCO_TASK_EXT)
61+
val taskJacoco = testTask.jacoco
6562
reportTask.executionData = project.files(taskJacoco.destinationFile.path)
6663
reportTask.classDirectories = project.files(scope.javaOutputDir)
6764
reportTask.sourceDirectories = project.files(variant.sourceSets
@@ -70,9 +67,7 @@ open class AndroidJUnit5JacocoReport : JacocoReport() {
7067
.map { it.path })
7168

7269
// Apply JUnit 5 configuration parameters
73-
val junit5Jacoco = junit5
74-
.extensionByName<AndroidJUnit5JacocoReport.Extension>(JACOCO_EXTENSION_NAME)
75-
70+
val junit5Jacoco = junit5.jacoco
7671
reportTask.reports.apply {
7772
csv.isEnabled = junit5Jacoco.csvReport
7873
html.isEnabled = junit5Jacoco.htmlReport

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,5 @@ open class AndroidJUnit5CopyKotlin : Copy() {
3636

3737
testTask.dependsOn(copyTask)
3838
}
39-
4039
}
4140
}

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,12 @@ import com.android.build.gradle.internal.scope.VariantScope
66
import com.android.build.gradle.tasks.factory.AndroidUnitTest
77
import com.android.builder.core.VariantType
88
import de.mannodermaus.gradle.plugins.junit5.AndroidJUnitPlatformExtension
9-
import de.mannodermaus.gradle.plugins.junit5.EXTENSION_NAME
109
import de.mannodermaus.gradle.plugins.junit5.engines
11-
import de.mannodermaus.gradle.plugins.junit5.extensionByName
1210
import de.mannodermaus.gradle.plugins.junit5.filters
1311
import de.mannodermaus.gradle.plugins.junit5.getExcludeClassNamePatterns
1412
import de.mannodermaus.gradle.plugins.junit5.getIncludeClassNamePatterns
1513
import de.mannodermaus.gradle.plugins.junit5.isEmpty
14+
import de.mannodermaus.gradle.plugins.junit5.junit5
1615
import de.mannodermaus.gradle.plugins.junit5.logInfo
1716
import de.mannodermaus.gradle.plugins.junit5.packages
1817
import de.mannodermaus.gradle.plugins.junit5.selectors
@@ -80,7 +79,7 @@ open class AndroidJUnit5UnitTest : JavaExec() {
8079
"for the ${variant.name.capitalize()} variant."
8180

8281
// JUnit 5 properties configuration
83-
val junit5 = project.extensionByName<AndroidJUnitPlatformExtension>(EXTENSION_NAME)
82+
val junit5 = project.junit5
8483
configureTaskInputs(task, junit5)
8584
configureTaskDependencies(task, junit5)
8685
val reportsDir = configureTaskOutputs(task, junit5)

sample/build.gradle

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import com.android.build.gradle.BaseExtension
2+
13
buildscript {
24
repositories {
35
jcenter()
@@ -13,6 +15,20 @@ apply plugin: "kotlin-android"
1315
apply plugin: "de.mannodermaus.android-junit5"
1416
apply plugin: "jacoco"
1517

18+
project.afterEvaluate {
19+
20+
def mi = BaseExtension.class.getDeclaredField("extraModelInfo")
21+
mi.accessible = true
22+
23+
def val = mi.get(android)
24+
println "Extra Model Info: $val"
25+
26+
val.class.getDeclaredFields().each {
27+
it.accessible = true
28+
println " |__ $it --> ${it.get(val)}"
29+
}
30+
}
31+
1632
android {
1733
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1834
// A Note to my forgetful self:
@@ -52,3 +68,8 @@ dependencies {
5268
testImplementation junit5Params()
5369
testCompileOnly junit5EmbeddedRuntime()
5470
}
71+
72+
project.afterEvaluate {
73+
// tasks.getByName("copyKotlinUnitTestClassesDebug").enabled = false
74+
// tasks.getByName("junitPlatformTestDebug").enabled = false
75+
}

0 commit comments

Comments
 (0)