Skip to content

Commit 8411246

Browse files
committed
Use Gradle properties for all task settings
1 parent d8271ab commit 8411246

File tree

5 files changed

+74
-91
lines changed

5 files changed

+74
-91
lines changed

api/binary-compatibility-validator.api

Lines changed: 15 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -32,18 +32,16 @@ public final class kotlinx/validation/BinaryCompatibilityValidatorPlugin : org/g
3232

3333
public abstract class kotlinx/validation/BuildTaskBase : org/gradle/api/DefaultTask {
3434
public fun <init> ()V
35-
public final fun getIgnoredClasses ()Ljava/util/Set;
36-
public final fun getIgnoredPackages ()Ljava/util/Set;
37-
public final fun getNonPublicMarkers ()Ljava/util/Set;
38-
public final fun getPublicClasses ()Ljava/util/Set;
39-
public final fun getPublicMarkers ()Ljava/util/Set;
40-
public final fun getPublicPackages ()Ljava/util/Set;
41-
public final fun setIgnoredClasses (Ljava/util/Set;)V
42-
public final fun setIgnoredPackages (Ljava/util/Set;)V
43-
public final fun setNonPublicMarkers (Ljava/util/Set;)V
44-
public final fun setPublicClasses (Ljava/util/Set;)V
45-
public final fun setPublicMarkers (Ljava/util/Set;)V
46-
public final fun setPublicPackages (Ljava/util/Set;)V
35+
public final fun getIgnoredClasses ()Lorg/gradle/api/provider/SetProperty;
36+
public final fun getIgnoredPackages ()Lorg/gradle/api/provider/SetProperty;
37+
public final fun getNonPublicMarkers ()Lorg/gradle/api/provider/SetProperty;
38+
public final fun getPublicClasses ()Lorg/gradle/api/provider/SetProperty;
39+
public final fun getPublicMarkers ()Lorg/gradle/api/provider/SetProperty;
40+
public final fun getPublicPackages ()Lorg/gradle/api/provider/SetProperty;
41+
public final fun setIgnoredClasses (Lorg/gradle/api/provider/SetProperty;)V
42+
public final fun setPublicClasses (Lorg/gradle/api/provider/SetProperty;)V
43+
public final fun setPublicMarkers (Lorg/gradle/api/provider/SetProperty;)V
44+
public final fun setPublicPackages (Lorg/gradle/api/provider/SetProperty;)V
4745
}
4846

4947
public abstract interface annotation class kotlinx/validation/ExperimentalBCVApi : java/lang/annotation/Annotation {
@@ -68,17 +66,12 @@ public class kotlinx/validation/KlibValidationSettings {
6866
public final fun setStrictValidation (Z)V
6967
}
7068

71-
public class kotlinx/validation/KotlinApiBuildTask : kotlinx/validation/BuildTaskBase {
72-
public field inputDependencies Lorg/gradle/api/file/FileCollection;
73-
public field outputApiFile Ljava/io/File;
69+
public abstract class kotlinx/validation/KotlinApiBuildTask : kotlinx/validation/BuildTaskBase {
7470
public fun <init> ()V
75-
public final fun getInputClassesDirs ()Lorg/gradle/api/file/FileCollection;
76-
public final fun getInputDependencies ()Lorg/gradle/api/file/FileCollection;
77-
public final fun getInputJar ()Lorg/gradle/api/file/RegularFileProperty;
78-
public final fun getOutputApiFile ()Ljava/io/File;
79-
public final fun setInputClassesDirs (Lorg/gradle/api/file/FileCollection;)V
80-
public final fun setInputDependencies (Lorg/gradle/api/file/FileCollection;)V
81-
public final fun setOutputApiFile (Ljava/io/File;)V
71+
public abstract fun getInputClassesDirs ()Lorg/gradle/api/file/ConfigurableFileCollection;
72+
public abstract fun getInputDependencies ()Lorg/gradle/api/file/ConfigurableFileCollection;
73+
public abstract fun getInputJar ()Lorg/gradle/api/file/RegularFileProperty;
74+
public abstract fun getOutputApiFile ()Lorg/gradle/api/file/RegularFileProperty;
8275
}
8376

8477
public class kotlinx/validation/KotlinApiCompareTask : org/gradle/api/DefaultTask {

src/main/kotlin/BinaryCompatibilityValidatorPlugin.kt

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@ public class BinaryCompatibilityValidatorPlugin : Plugin<Project> {
5050
}
5151
}
5252

53-
@OptIn(ExperimentalBCVApi::class)
5453
private fun configureProject(project: Project, extension: ApiValidationExtension) {
5554
configureKotlinPlugin(project, extension)
5655
configureAndroidPlugin(project, extension)
@@ -222,17 +221,12 @@ private fun Project.configureKotlinCompilation(
222221
"Builds Kotlin API for 'main' compilations of $projectName. Complementary task and shouldn't be called manually"
223222
if (useOutput) {
224223
// Workaround for #4
225-
inputClassesDirs =
226-
files(provider<Any> { if (isEnabled) compilation.output.classesDirs else emptyList<Any>() })
227-
inputDependencies =
228-
files(provider<Any> { if (isEnabled) compilation.output.classesDirs else emptyList<Any>() })
224+
inputClassesDirs.from(compilation.output.classesDirs)
229225
} else {
230-
inputClassesDirs =
231-
files(provider<Any> { if (isEnabled) compilation.output.classesDirs else emptyList<Any>() })
232-
inputDependencies =
233-
files(provider<Any> { if (isEnabled) compilation.compileDependencyFiles else emptyList<Any>() })
226+
inputClassesDirs.from(compilation.output.classesDirs)
227+
inputDependencies.from(compilation.compileDependencyFiles)
234228
}
235-
outputApiFile = apiBuildDir.get().resolve(dumpFileName)
229+
outputApiFile.fileProvider(apiBuildDir.map { it.resolve(dumpFileName) })
236230
}
237231
configureCheckTasks(apiBuild, extension, targetConfig, commonApiDump, commonApiCheck)
238232
}
@@ -271,10 +265,8 @@ private fun Project.configureApiTasks(
271265
// 'group' is not specified deliberately, so it will be hidden from ./gradlew tasks
272266
description =
273267
"Builds Kotlin API for 'main' compilations of $projectName. Complementary task and shouldn't be called manually"
274-
inputClassesDirs = files(provider<Any> { if (isEnabled) sourceSetsOutputsProvider.get() else emptyList<Any>() })
275-
inputDependencies =
276-
files(provider<Any> { if (isEnabled) sourceSetsOutputsProvider.get() else emptyList<Any>() })
277-
outputApiFile = apiBuildDir.get().resolve(dumpFileName)
268+
inputClassesDirs.from(sourceSetsOutputsProvider)
269+
outputApiFile.fileProvider(apiBuildDir.map { it.resolve(dumpFileName) })
278270
}
279271

280272
configureCheckTasks(apiBuild, extension, targetConfig)
@@ -298,15 +290,15 @@ private fun Project.configureCheckTasks(
298290
group = "verification"
299291
description = "Checks signatures of public API against the golden value in API folder for $projectName"
300292
projectApiFile.fileProvider(apiCheckDir.map { it.resolve(jvmDumpFileName) })
301-
generatedApiFile.fileProvider(apiBuild.map { it.outputApiFile })
293+
generatedApiFile.set(apiBuild.flatMap { it.outputApiFile })
302294
}
303295

304296
val dumpFileName = project.jvmDumpFileName
305297
val apiDump = task<SyncFile>(targetConfig.apiTaskName("Dump")) {
306298
isEnabled = apiCheckEnabled(projectName, extension) && apiBuild.map { it.enabled }.getOrElse(true)
307299
group = "other"
308300
description = "Syncs the API file for $projectName"
309-
from.fileProvider(apiBuild.map { it.outputApiFile })
301+
from.set(apiBuild.flatMap { it.outputApiFile })
310302
to.fileProvider(apiCheckDir.map { it.resolve(dumpFileName) })
311303
}
312304

src/main/kotlin/BuildTaskBase.kt

Lines changed: 20 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -6,47 +6,43 @@
66
package kotlinx.validation
77

88
import org.gradle.api.DefaultTask
9+
import org.gradle.api.provider.SetProperty
910
import org.gradle.api.tasks.Input
1011
import org.gradle.api.tasks.Internal
1112

13+
1214
public abstract class BuildTaskBase : DefaultTask() {
1315
private val extension = project.apiValidationExtensionOrNull
1416

15-
private var _ignoredPackages: Set<String>? = null
17+
private fun stringSetProperty(provider: ApiValidationExtension.() -> Set<String>): SetProperty<String> {
18+
return project.objects.setProperty(String::class.java).convention(
19+
project.provider {
20+
if (extension == null) {
21+
emptySet<String>()
22+
} else {
23+
provider(extension)
24+
}
25+
}
26+
)
27+
}
28+
1629
@get:Input
17-
public var ignoredPackages : Set<String>
18-
get() = _ignoredPackages ?: extension?.ignoredPackages ?: emptySet()
19-
set(value) { _ignoredPackages = value }
30+
public val ignoredPackages: SetProperty<String> = stringSetProperty { ignoredPackages }
2031

21-
private var _nonPublicMarkes: Set<String>? = null
2232
@get:Input
23-
public var nonPublicMarkers : Set<String>
24-
get() = _nonPublicMarkes ?: extension?.nonPublicMarkers ?: emptySet()
25-
set(value) { _nonPublicMarkes = value }
33+
public val nonPublicMarkers: SetProperty<String> = stringSetProperty { nonPublicMarkers }
2634

27-
private var _ignoredClasses: Set<String>? = null
2835
@get:Input
29-
public var ignoredClasses : Set<String>
30-
get() = _ignoredClasses ?: extension?.ignoredClasses ?: emptySet()
31-
set(value) { _ignoredClasses = value }
36+
public var ignoredClasses: SetProperty<String> = stringSetProperty { ignoredClasses }
3237

33-
private var _publicPackages: Set<String>? = null
3438
@get:Input
35-
public var publicPackages: Set<String>
36-
get() = _publicPackages ?: extension?.publicPackages ?: emptySet()
37-
set(value) { _publicPackages = value }
39+
public var publicPackages: SetProperty<String> = stringSetProperty { publicPackages }
3840

39-
private var _publicMarkers: Set<String>? = null
4041
@get:Input
41-
public var publicMarkers: Set<String>
42-
get() = _publicMarkers ?: extension?.publicMarkers ?: emptySet()
43-
set(value) { _publicMarkers = value}
42+
public var publicMarkers: SetProperty<String> = stringSetProperty { publicMarkers }
4443

45-
private var _publicClasses: Set<String>? = null
4644
@get:Input
47-
public var publicClasses: Set<String>
48-
get() = _publicClasses ?: extension?.publicClasses ?: emptySet()
49-
set(value) { _publicClasses = value }
45+
public var publicClasses: SetProperty<String> = stringSetProperty { publicClasses }
5046

5147
@get:Internal
5248
internal val projectName = project.name

src/main/kotlin/KotlinApiBuildTask.kt

Lines changed: 28 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -9,60 +9,62 @@ import kotlinx.validation.api.*
99
import org.gradle.api.*
1010
import org.gradle.api.file.*
1111
import org.gradle.api.tasks.*
12-
import java.io.File
1312
import java.util.jar.JarFile
1413
import javax.inject.Inject
1514

16-
public open class KotlinApiBuildTask @Inject constructor(
15+
public abstract class KotlinApiBuildTask @Inject constructor(
1716
) : BuildTaskBase() {
18-
@OutputFile
19-
public lateinit var outputApiFile: File
17+
@get:OutputFile
18+
public abstract val outputApiFile: RegularFileProperty
2019

21-
@InputFiles
22-
@Optional
23-
@PathSensitive(PathSensitivity.RELATIVE)
24-
public var inputClassesDirs: FileCollection? = null
20+
@get:InputFiles
21+
@get:Optional
22+
@get:PathSensitive(PathSensitivity.RELATIVE)
23+
public abstract val inputClassesDirs: ConfigurableFileCollection
2524

26-
@InputFile
27-
@Optional
28-
@PathSensitive(PathSensitivity.RELATIVE)
29-
public val inputJar: RegularFileProperty = this.project.objects.fileProperty()
25+
@get:InputFile
26+
@get:Optional
27+
@get:PathSensitive(PathSensitivity.RELATIVE)
28+
public abstract val inputJar: RegularFileProperty
3029

31-
@InputFiles
32-
@PathSensitive(PathSensitivity.RELATIVE)
33-
public lateinit var inputDependencies: FileCollection
30+
@get:InputFiles
31+
@get:Optional
32+
@get:PathSensitive(PathSensitivity.RELATIVE)
33+
public abstract val inputDependencies: ConfigurableFileCollection
3434

3535
@TaskAction
3636
internal fun generate() {
37-
outputApiFile.delete()
38-
outputApiFile.parentFile.mkdirs()
39-
4037
val inputClassesDirs = inputClassesDirs
4138
val signatures = when {
4239
// inputJar takes precedence if specified
4340
inputJar.isPresent ->
4441
JarFile(inputJar.get().asFile).use { it.loadApiFromJvmClasses() }
45-
inputClassesDirs != null ->
42+
43+
inputClassesDirs.any() ->
4644
inputClassesDirs.asFileTree.asSequence()
4745
.filter {
4846
!it.isDirectory && it.name.endsWith(".class") && !it.name.startsWith("META-INF/")
4947
}
5048
.map { it.inputStream() }
5149
.loadApiFromJvmClasses()
50+
5251
else ->
5352
throw GradleException("KotlinApiBuildTask should have either inputClassesDirs, or inputJar property set")
5453
}
5554

56-
val publicPackagesNames = signatures.extractAnnotatedPackages(publicMarkers.map(::replaceDots).toSet())
57-
val ignoredPackagesNames = signatures.extractAnnotatedPackages(nonPublicMarkers.map(::replaceDots).toSet())
55+
val publicPackagesNames = signatures.extractAnnotatedPackages(publicMarkers.get().map(::replaceDots).toSet())
56+
val ignoredPackagesNames =
57+
signatures.extractAnnotatedPackages(nonPublicMarkers.get().map(::replaceDots).toSet())
5858

5959
val filteredSignatures = signatures
60-
.retainExplicitlyIncludedIfDeclared(publicPackages + publicPackagesNames,
61-
publicClasses, publicMarkers)
62-
.filterOutNonPublic(ignoredPackages + ignoredPackagesNames, ignoredClasses)
63-
.filterOutAnnotated(nonPublicMarkers.map(::replaceDots).toSet())
60+
.retainExplicitlyIncludedIfDeclared(
61+
publicPackages.get() + publicPackagesNames,
62+
publicClasses.get(), publicMarkers.get()
63+
)
64+
.filterOutNonPublic(ignoredPackages.get() + ignoredPackagesNames, ignoredClasses.get())
65+
.filterOutAnnotated(nonPublicMarkers.get().map(::replaceDots).toSet())
6466

65-
outputApiFile.bufferedWriter().use { writer ->
67+
outputApiFile.asFile.get().bufferedWriter().use { writer ->
6668
filteredSignatures.dump(writer)
6769
}
6870
}

src/main/kotlin/KotlinKlibAbiBuildTask.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,9 @@ public abstract class KotlinKlibAbiBuildTask : BuildTaskBase() {
5959
outputFile.parentFile.mkdirs()
6060

6161
val dump = KlibDump.fromKlib(klibFile.singleFile, target.get().configurableName, KLibDumpFilters {
62-
ignoredClasses.addAll(this@KotlinKlibAbiBuildTask.ignoredClasses)
63-
ignoredPackages.addAll(this@KotlinKlibAbiBuildTask.ignoredPackages)
64-
nonPublicMarkers.addAll(this@KotlinKlibAbiBuildTask.nonPublicMarkers)
62+
ignoredClasses.addAll(this@KotlinKlibAbiBuildTask.ignoredClasses.get())
63+
ignoredPackages.addAll(this@KotlinKlibAbiBuildTask.ignoredPackages.get())
64+
nonPublicMarkers.addAll(this@KotlinKlibAbiBuildTask.nonPublicMarkers.get())
6565
signatureVersion = this@KotlinKlibAbiBuildTask.signatureVersion.get()
6666
})
6767

0 commit comments

Comments
 (0)