Skip to content

Commit 6414bee

Browse files
committed
KotlinApiBuildTask finds extension by itself looking up in the project hierarchy
If there's an ApiValidationExtension somewhere in the project or in its parent projects, it uses its properties as defaults for the corresponding task properties. It is still possible to instantiate a task without extension and to set or override properties individually.
1 parent 37c8cec commit 6414bee

File tree

2 files changed

+20
-9
lines changed

2 files changed

+20
-9
lines changed

src/main/kotlin/BinaryCompatibilityValidatorPlugin.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -199,16 +199,19 @@ private fun Project.configureKotlinCompilation(
199199
files(provider<Any> { if (isEnabled) compilation.compileDependencyFiles else emptyList<Any>() })
200200
}
201201
outputApiDir = apiBuildDir.get()
202-
ignoredPackages = extension.ignoredPackages
203-
ignoredClasses = extension.ignoredClasses
204-
nonPublicMarkers = extension.nonPublicMarkers
205202
}
206203
configureCheckTasks(apiBuildDir, apiBuild, extension, targetConfig, commonApiDump, commonApiCheck)
207204
}
208205

209206
val Project.sourceSets: SourceSetContainer
210207
get() = convention.getPlugin(JavaPluginConvention::class.java).sourceSets
211208

209+
internal val Project.apiValidationExtensionOrNull: ApiValidationExtension?
210+
get() =
211+
generateSequence(this) { it.parent }
212+
.map { it.extensions.findByType(ApiValidationExtension::class.java) }
213+
.firstOrNull { it != null }
214+
212215
fun apiCheckEnabled(projectName: String, extension: ApiValidationExtension): Boolean =
213216
projectName !in extension.ignoredProjects && !extension.validationDisabled
214217

@@ -227,9 +230,6 @@ private fun Project.configureApiTasks(
227230
inputClassesDirs = files(provider<Any> { if (isEnabled) sourceSet.output.classesDirs else emptyList<Any>() })
228231
inputDependencies = files(provider<Any> { if (isEnabled) sourceSet.output.classesDirs else emptyList<Any>() })
229232
outputApiDir = apiBuildDir.get()
230-
ignoredPackages = extension.ignoredPackages
231-
ignoredClasses = extension.ignoredClasses
232-
nonPublicMarkers = extension.nonPublicMarkers
233233
}
234234

235235
configureCheckTasks(apiBuildDir, apiBuild, extension, targetConfig)

src/main/kotlin/KotlinApiBuildTask.kt

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ import javax.inject.Inject
1616
open class KotlinApiBuildTask @Inject constructor(
1717
) : DefaultTask() {
1818

19+
private val extension = project.apiValidationExtensionOrNull
20+
1921
@InputFiles
2022
@Optional
2123
@PathSensitive(PathSensitivity.RELATIVE)
@@ -33,14 +35,23 @@ open class KotlinApiBuildTask @Inject constructor(
3335
@OutputDirectory
3436
lateinit var outputApiDir: File
3537

38+
private var _ignoredPackages: Set<String>? = null
3639
@get:Input
37-
var ignoredPackages : Set<String> = emptySet()
40+
var ignoredPackages : Set<String>
41+
get() = _ignoredPackages ?: extension?.ignoredPackages ?: emptySet()
42+
set(value) { _ignoredPackages = value }
3843

44+
private var _nonPublicMarkes: Set<String>? = null
3945
@get:Input
40-
var nonPublicMarkers : Set<String> = emptySet()
46+
var nonPublicMarkers : Set<String>
47+
get() = _nonPublicMarkes ?: extension?.nonPublicMarkers ?: emptySet()
48+
set(value) { _nonPublicMarkes = value }
4149

50+
private var _ignoredClasses: Set<String>? = null
4251
@get:Input
43-
var ignoredClasses : Set<String> = emptySet()
52+
var ignoredClasses : Set<String>
53+
get() = _ignoredClasses ?: extension?.ignoredClasses ?: emptySet()
54+
set(value) { _ignoredClasses = value }
4455

4556
@get:Internal
4657
internal val projectName = project.name

0 commit comments

Comments
 (0)