11package dev.adamko.kotlin.binary_compatibility_validator
22
3+ import dev.adamko.kotlin.binary_compatibility_validator.BCVPlugin.Companion.API_CHECK_TASK_NAME
34import dev.adamko.kotlin.binary_compatibility_validator.BCVPlugin.Companion.API_DIR
5+ import dev.adamko.kotlin.binary_compatibility_validator.BCVPlugin.Companion.API_DUMP_TASK_NAME
6+ import dev.adamko.kotlin.binary_compatibility_validator.BCVPlugin.Companion.API_GENERATE_TASK_NAME
47import dev.adamko.kotlin.binary_compatibility_validator.BCVPlugin.Companion.EXTENSION_NAME
58import dev.adamko.kotlin.binary_compatibility_validator.BCVPlugin.Companion.RUNTIME_CLASSPATH_CONFIGURATION_NAME
6- import dev.adamko.kotlin.binary_compatibility_validator.internal.BCVInternalApi
7- import dev.adamko.kotlin.binary_compatibility_validator.internal.sourceSets
9+ import dev.adamko.kotlin.binary_compatibility_validator.BCVPlugin.Companion.RUNTIME_CLASSPATH_RESOLVER_CONFIGURATION_NAME
10+ import dev.adamko.kotlin.binary_compatibility_validator.internal.*
11+ import dev.adamko.kotlin.binary_compatibility_validator.internal.Dynamic.Companion.Dynamic
812import dev.adamko.kotlin.binary_compatibility_validator.tasks.BCVApiCheckTask
913import dev.adamko.kotlin.binary_compatibility_validator.tasks.BCVApiDumpTask
1014import dev.adamko.kotlin.binary_compatibility_validator.tasks.BCVApiGenerateTask
1115import dev.adamko.kotlin.binary_compatibility_validator.tasks.BCVDefaultTask
1216import javax.inject.Inject
17+ import org.gradle.api.NamedDomainObjectProvider
1318import org.gradle.api.Plugin
1419import org.gradle.api.Project
20+ import org.gradle.api.artifacts.Configuration
1521import org.gradle.api.file.ProjectLayout
22+ import org.gradle.api.logging.Logging
1623import org.gradle.api.provider.ProviderFactory
1724import org.gradle.api.tasks.SourceSet
1825import org.gradle.internal.component.external.model.TestFixturesSupport.TEST_FIXTURE_SOURCESET_NAME
1926import org.gradle.kotlin.dsl.*
2027import org.gradle.language.base.plugins.LifecycleBasePlugin
28+ import org.gradle.language.base.plugins.LifecycleBasePlugin.CHECK_TASK_NAME
2129import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
2230import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSetContainer
2331import org.jetbrains.kotlin.gradle.plugin.KotlinTargetsContainer
@@ -37,29 +45,15 @@ constructor(
3745
3846 val extension = createExtension(project)
3947
40- val bcvGenerateClasspath =
41- project.configurations.register(RUNTIME_CLASSPATH_CONFIGURATION_NAME ) {
42- isCanBeConsumed = false
43- isCanBeResolved = true
44- isVisible = false
45- defaultDependencies {
46- addLater(
47- extension.kotlinxBinaryCompatibilityValidatorVersion.map { version ->
48- project.dependencies.create(
49- " org.jetbrains.kotlinx:binary-compatibility-validator:$version "
50- )
51- }
52- )
53- }
54- }
48+ val bcvGenerateClasspath = createBcvMuClasspath(project, extension)
5549
5650 project.tasks.withType<BCVDefaultTask >().configureEach {
5751 bcvEnabled.convention(extension.enabled)
5852 onlyIf(" BCV is disabled" ) { bcvEnabled.get() }
5953 }
6054
6155 project.tasks.withType<BCVApiGenerateTask >().configureEach {
62- runtimeClasspath.from(bcvGenerateClasspath.map { it.incoming.files } )
56+ runtimeClasspath.from(bcvGenerateClasspath)
6357 targets.addAllLater(providers.provider { extension.targets })
6458 onlyIf(" Must have at least one target" ) { targets.isNotEmpty() }
6559 outputApiBuildDir.convention(layout.buildDirectory.dir(" bcv-api" ))
@@ -76,17 +70,17 @@ constructor(
7670 apiDirectory.convention(extension.outputApiDir)
7771 }
7872
79- val apiGenerateTask = project.tasks.register(" apiGenerate " , BCVApiGenerateTask ::class )
73+ val apiGenerateTask = project.tasks.register(API_GENERATE_TASK_NAME , BCVApiGenerateTask ::class )
8074
81- project.tasks.register(" apiDump " , BCVApiDumpTask ::class ) {
75+ project.tasks.register(API_DUMP_TASK_NAME , BCVApiDumpTask ::class ) {
8276 apiDumpFiles.from(apiGenerateTask.map { it.outputApiBuildDir })
8377 }
8478
85- val apiCheckTask = project.tasks.register(" apiCheck " , BCVApiCheckTask ::class ) {
79+ val apiCheckTask = project.tasks.register(API_CHECK_TASK_NAME , BCVApiCheckTask ::class ) {
8680 apiBuildDir.convention(apiGenerateTask.flatMap { it.outputApiBuildDir })
8781 }
8882
89- project.tasks.named(LifecycleBasePlugin . CHECK_TASK_NAME ).configure {
83+ project.tasks.named(CHECK_TASK_NAME ).configure {
9084 dependsOn(apiCheckTask)
9185 }
9286
@@ -122,6 +116,34 @@ constructor(
122116 return extension
123117 }
124118
119+ private fun createBcvMuClasspath (
120+ project : Project ,
121+ extension : BCVProjectExtension ,
122+ ): NamedDomainObjectProvider <Configuration > {
123+
124+ val bcvGenerateClasspath =
125+ project.configurations.register(RUNTIME_CLASSPATH_CONFIGURATION_NAME ) {
126+ description = " Runtime classpath for running binary-compatibility-validator."
127+ declarable()
128+ defaultDependencies {
129+ addLater(
130+ extension.kotlinxBinaryCompatibilityValidatorVersion.map { version ->
131+ project.dependencies.create(
132+ " org.jetbrains.kotlinx:binary-compatibility-validator:$version "
133+ )
134+ }
135+ )
136+ }
137+ }
138+
139+ return project.configurations.register(RUNTIME_CLASSPATH_RESOLVER_CONFIGURATION_NAME ) {
140+ description = " Resolve the runtime classpath for running binary-compatibility-validator."
141+ resolvable()
142+ isVisible = false
143+ extendsFrom(bcvGenerateClasspath.get())
144+ }
145+ }
146+
125147 private fun createKotlinJvmTargets (
126148 project : Project ,
127149 extension : BCVProjectExtension ,
@@ -179,7 +201,7 @@ constructor(
179201 }
180202 }
181203 }
182- }
204+ }
183205 }
184206
185207 private fun createJavaTestFixtureTargets (
@@ -199,4 +221,8 @@ constructor(
199221 }
200222 }
201223 }
224+
225+ companion object {
226+ private val logger = Logging .getLogger(BCVProjectPlugin ::class .java)
227+ }
202228}
0 commit comments