Skip to content

Commit 9b14442

Browse files
committed
allow setting default BCV target values in BCVSettingsPlugin
1 parent 7173747 commit 9b14442

File tree

1 file changed

+38
-4
lines changed

1 file changed

+38
-4
lines changed

modules/bcv-gradle-plugin/src/main/kotlin/BCVSettingsPlugin.kt

Lines changed: 38 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,35 @@
11
package dev.adamko.kotlin.binary_compatibility_validator
22

33
import dev.adamko.kotlin.binary_compatibility_validator.internal.globToRegex
4+
import dev.adamko.kotlin.binary_compatibility_validator.targets.BCVTargetSpec
5+
import javax.inject.Inject
46
import org.gradle.api.Plugin
57
import org.gradle.api.Project
68
import org.gradle.api.initialization.Settings
9+
import org.gradle.api.model.ObjectFactory
710
import org.gradle.api.provider.SetProperty
811
import org.gradle.kotlin.dsl.apply
12+
import org.gradle.kotlin.dsl.configure
913
import org.gradle.kotlin.dsl.create
14+
import org.gradle.kotlin.dsl.newInstance
1015

11-
abstract class BCVSettingsPlugin : Plugin<Settings> {
16+
abstract class BCVSettingsPlugin @Inject constructor(
17+
private val objects: ObjectFactory
18+
) : Plugin<Settings> {
1219

1320
override fun apply(settings: Settings) {
14-
val extension = settings.extensions.create("bcvSettings", Extension::class).apply {
21+
val extension = settings.extensions.create<Extension>(
22+
"bcvSettings",
23+
objects.newInstance<BCVTargetSpec>(),
24+
).apply {
1525
ignoredProjects.convention(emptySet())
26+
27+
defaultTargetValues {
28+
enabled.convention(true)
29+
ignoredClasses.convention(emptySet())
30+
ignoredMarkers.convention(emptySet())
31+
ignoredPackages.convention(emptySet())
32+
}
1633
}
1734

1835
settings.gradle.beforeProject {
@@ -22,11 +39,24 @@ abstract class BCVSettingsPlugin : Plugin<Settings> {
2239
}
2340
) {
2441
project.pluginManager.apply(BCVProjectPlugin::class)
42+
project.extensions.configure<BCVProjectExtension> {
43+
enabled.convention(extension.defaultTargetValues.enabled)
44+
ignoredClasses.convention(extension.defaultTargetValues.ignoredClasses)
45+
ignoredMarkers.convention(extension.defaultTargetValues.ignoredMarkers)
46+
ignoredPackages.convention(extension.defaultTargetValues.ignoredPackages)
47+
}
2548
}
2649
}
2750
}
2851

29-
interface Extension {
52+
abstract class Extension @Inject constructor(
53+
54+
/**
55+
* Set [BCVTargetSpec] values that will be used as defaults for all
56+
* [BCVProjectExtension.targets] in subprojects.
57+
*/
58+
val defaultTargetValues: BCVTargetSpec
59+
) {
3060

3161
/**
3262
* Paths of projects.
@@ -37,6 +67,10 @@ abstract class BCVSettingsPlugin : Plugin<Settings> {
3767
* - `*` will match zero, or many characters, excluding `:`
3868
* - `**` will match 0 to many characters, including `:`
3969
*/
40-
val ignoredProjects: SetProperty<String>
70+
abstract val ignoredProjects: SetProperty<String>
71+
72+
73+
fun defaultTargetValues(configure: BCVTargetSpec.() -> Unit) =
74+
defaultTargetValues.configure()
4175
}
4276
}

0 commit comments

Comments
 (0)