Skip to content

Commit

Permalink
KotlinApiBuildTask finds extension by itself looking up in the projec…
Browse files Browse the repository at this point in the history
…t 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.
  • Loading branch information
ilya-g committed Oct 20, 2022
1 parent 37c8cec commit 6414bee
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 9 deletions.
12 changes: 6 additions & 6 deletions src/main/kotlin/BinaryCompatibilityValidatorPlugin.kt
Original file line number Diff line number Diff line change
Expand Up @@ -199,16 +199,19 @@ private fun Project.configureKotlinCompilation(
files(provider<Any> { if (isEnabled) compilation.compileDependencyFiles else emptyList<Any>() })
}
outputApiDir = apiBuildDir.get()
ignoredPackages = extension.ignoredPackages
ignoredClasses = extension.ignoredClasses
nonPublicMarkers = extension.nonPublicMarkers
}
configureCheckTasks(apiBuildDir, apiBuild, extension, targetConfig, commonApiDump, commonApiCheck)
}

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

internal val Project.apiValidationExtensionOrNull: ApiValidationExtension?
get() =
generateSequence(this) { it.parent }
.map { it.extensions.findByType(ApiValidationExtension::class.java) }
.firstOrNull { it != null }

fun apiCheckEnabled(projectName: String, extension: ApiValidationExtension): Boolean =
projectName !in extension.ignoredProjects && !extension.validationDisabled

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

configureCheckTasks(apiBuildDir, apiBuild, extension, targetConfig)
Expand Down
17 changes: 14 additions & 3 deletions src/main/kotlin/KotlinApiBuildTask.kt
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ import javax.inject.Inject
open class KotlinApiBuildTask @Inject constructor(
) : DefaultTask() {

private val extension = project.apiValidationExtensionOrNull

@InputFiles
@Optional
@PathSensitive(PathSensitivity.RELATIVE)
Expand All @@ -33,14 +35,23 @@ open class KotlinApiBuildTask @Inject constructor(
@OutputDirectory
lateinit var outputApiDir: File

private var _ignoredPackages: Set<String>? = null
@get:Input
var ignoredPackages : Set<String> = emptySet()
var ignoredPackages : Set<String>
get() = _ignoredPackages ?: extension?.ignoredPackages ?: emptySet()
set(value) { _ignoredPackages = value }

private var _nonPublicMarkes: Set<String>? = null
@get:Input
var nonPublicMarkers : Set<String> = emptySet()
var nonPublicMarkers : Set<String>
get() = _nonPublicMarkes ?: extension?.nonPublicMarkers ?: emptySet()
set(value) { _nonPublicMarkes = value }

private var _ignoredClasses: Set<String>? = null
@get:Input
var ignoredClasses : Set<String> = emptySet()
var ignoredClasses : Set<String>
get() = _ignoredClasses ?: extension?.ignoredClasses ?: emptySet()
set(value) { _ignoredClasses = value }

@get:Internal
internal val projectName = project.name
Expand Down

0 comments on commit 6414bee

Please sign in to comment.