Skip to content

Commit 1d40fa2

Browse files
committed
Rely on file providers as much as possible
1 parent 8420f77 commit 1d40fa2

File tree

1 file changed

+51
-42
lines changed

1 file changed

+51
-42
lines changed

src/main/kotlin/BinaryCompatibilityValidatorPlugin.kt

Lines changed: 51 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ private fun Project.configureKotlinCompilation(
212212
val projectName = project.name
213213
val dumpFileName = project.jvmDumpFileName
214214
val apiDirProvider = targetConfig.apiDir
215-
val apiBuildDir = apiDirProvider.map { layout.buildDirectory.asFile.get().resolve(it) }
215+
val apiBuildDir = apiDirProvider.flatMap { f -> layout.buildDirectory.asFile.map { it.resolve(f) } }
216216

217217
val apiBuild = task<KotlinApiBuildTask>(targetConfig.apiTaskName("Build")) {
218218
// Do not enable task for empty umbrella modules
@@ -259,7 +259,7 @@ private fun Project.configureApiTasks(
259259
) {
260260
val projectName = project.name
261261
val dumpFileName = project.jvmDumpFileName
262-
val apiBuildDir = targetConfig.apiDir.map { layout.buildDirectory.asFile.get().resolve(it) }
262+
val apiBuildDir = targetConfig.apiDir.flatMap { f -> layout.buildDirectory.asFile.map { it.resolve(f) } }
263263
val sourceSetsOutputsProvider = project.provider {
264264
sourceSets
265265
.filter { it.name == SourceSet.MAIN_SOURCE_SET_NAME || it.name in extension.additionalSourceSets }
@@ -297,7 +297,7 @@ private fun Project.configureCheckTasks(
297297
isEnabled = apiCheckEnabled(projectName, extension) && apiBuild.map { it.enabled }.getOrElse(true)
298298
group = "verification"
299299
description = "Checks signatures of public API against the golden value in API folder for $projectName"
300-
projectApiFile.set(apiCheckDir.get().resolve(jvmDumpFileName))
300+
projectApiFile.fileProvider(apiCheckDir.map { it.resolve(jvmDumpFileName) })
301301
generatedApiFile.fileProvider(apiBuild.map { it.outputApiFile })
302302
}
303303

@@ -372,13 +372,13 @@ private class KlibValidationPipelineBuilder(
372372
TargetConfig(project, extension, KLIB_INFERRED_DUMPS_DIRECTORY, intermediateFilesConfig)
373373

374374
val projectDir = project.projectDir
375-
val klibApiDir = klibApiDirConfig?.map {
376-
projectDir.resolve(it.apiDir.get())
375+
val klibApiDir = klibApiDirConfig?.flatMap {
376+
it.apiDir.map { projectDir.resolve(it) }
377377
}!!
378-
val projectBuildDir = project.layout.buildDirectory.asFile.get()
379-
val klibMergeDir = projectBuildDir.resolve(klibDumpConfig.apiDir.get())
380-
val klibMergeInferredDir = projectBuildDir.resolve(klibInferDumpConfig.apiDir.get())
381-
val klibExtractedFileDir = klibMergeInferredDir.resolve("extracted")
378+
val projectBuildDir = project.layout.buildDirectory.asFile
379+
val klibMergeDir = projectBuildDir.flatMap { pd -> klibDumpConfig.apiDir.map { pd.resolve(it) } }
380+
val klibMergeInferredDir = projectBuildDir.flatMap { pd -> klibInferDumpConfig.apiDir.map { pd.resolve(it) } }
381+
val klibExtractedFileDir = klibMergeInferredDir.map { it.resolve("extracted") }
382382

383383
val klibMerge = project.mergeKlibsUmbrellaTask(klibDumpConfig, klibMergeDir)
384384
val klibMergeInferred = project.mergeInferredKlibsUmbrellaTask(klibDumpConfig, klibMergeInferredDir)
@@ -399,27 +399,29 @@ private class KlibValidationPipelineBuilder(
399399
project.configureTargets(klibApiDir, klibMerge, klibMergeInferred)
400400
}
401401

402-
private fun Project.checkKlibsTask(klibDumpConfig: TargetConfig)
403-
= project.task<KotlinApiCompareTask>(klibDumpConfig.apiTaskName("Check")) {
404-
isEnabled = klibAbiCheckEnabled(project.name, extension)
405-
group = "verification"
406-
description = "Checks signatures of a public KLib ABI against the golden value in ABI folder for ${project.name}"
407-
}
402+
private fun Project.checkKlibsTask(klibDumpConfig: TargetConfig) =
403+
project.task<KotlinApiCompareTask>(klibDumpConfig.apiTaskName("Check")) {
404+
isEnabled = klibAbiCheckEnabled(project.name, extension)
405+
group = "verification"
406+
description =
407+
"Checks signatures of a public KLib ABI against the golden value in ABI folder for ${project.name}"
408+
}
408409

409-
private fun Project.dumpKlibsTask(klibDumpConfig: TargetConfig) = project.task<SyncFile>(klibDumpConfig.apiTaskName("Dump")) {
410-
isEnabled = klibAbiCheckEnabled(project.name, extension)
411-
description = "Syncs the KLib ABI file for ${project.name}"
412-
group = "other"
413-
onlyIf {
414-
it as SyncFile
415-
it.to.get().asFile.exists() || it.from.get().asFile.exists()
410+
private fun Project.dumpKlibsTask(klibDumpConfig: TargetConfig) =
411+
project.task<SyncFile>(klibDumpConfig.apiTaskName("Dump")) {
412+
isEnabled = klibAbiCheckEnabled(project.name, extension)
413+
description = "Syncs the KLib ABI file for ${project.name}"
414+
group = "other"
415+
onlyIf {
416+
it as SyncFile
417+
it.to.get().asFile.exists() || it.from.get().asFile.exists()
418+
}
416419
}
417-
}
418420

419421
private fun Project.extractAbi(
420422
klibDumpConfig: TargetConfig,
421423
klibApiDir: Provider<File>,
422-
klibOutputDir: File
424+
klibOutputDir: Provider<File>
423425
) = project.task<KotlinKlibExtractAbiTask>(
424426
klibDumpConfig.apiTaskName("ExtractForValidation")
425427
)
@@ -431,12 +433,12 @@ private class KlibValidationPipelineBuilder(
431433
strictValidation.set(extension.klib.strictValidation)
432434
requiredTargets.addAll(supportedTargets())
433435
inputAbiFile.fileProvider(klibApiDir.map { it.resolve(klibDumpFileName) })
434-
outputAbiFile.set(klibOutputDir.resolve(klibDumpFileName))
436+
outputAbiFile.fileProvider(klibOutputDir.map { it.resolve(klibDumpFileName) })
435437
}
436438

437439
private fun Project.mergeInferredKlibsUmbrellaTask(
438440
klibDumpConfig: TargetConfig,
439-
klibMergeDir: File,
441+
klibMergeDir: Provider<File>,
440442
) = project.task<KotlinKlibMergeAbiTask>(
441443
klibDumpConfig.apiTaskName("MergeInferred")
442444
)
@@ -445,17 +447,17 @@ private class KlibValidationPipelineBuilder(
445447
description = "Merges multiple KLib ABI dump files generated for " +
446448
"different targets (including inferred dumps for unsupported targets) " +
447449
"into a single merged KLib ABI dump"
448-
mergedApiFile.set(klibMergeDir.resolve(klibDumpFileName))
450+
mergedApiFile.fileProvider(klibMergeDir.map { it.resolve(klibDumpFileName) })
449451
}
450452

451453
private fun Project.mergeKlibsUmbrellaTask(
452454
klibDumpConfig: TargetConfig,
453-
klibMergeDir: File
455+
klibMergeDir: Provider<File>
454456
) = project.task<KotlinKlibMergeAbiTask>(klibDumpConfig.apiTaskName("Merge")) {
455457
isEnabled = klibAbiCheckEnabled(project.name, extension)
456458
description = "Merges multiple KLib ABI dump files generated for " +
457459
"different targets into a single merged KLib ABI dump"
458-
mergedApiFile.set(klibMergeDir.resolve(klibDumpFileName))
460+
mergedApiFile.fileProvider(klibMergeDir.map { it.resolve(klibDumpFileName) })
459461
}
460462

461463
fun Project.bannedTargets(): Set<String> {
@@ -494,14 +496,19 @@ private class KlibValidationPipelineBuilder(
494496
val target = currentTarget.toKlibTarget()
495497
val targetName = currentTarget.targetName
496498
val targetConfig = TargetConfig(project, extension, targetName, intermediateFilesConfig)
497-
val apiBuildDir = targetConfig.apiDir.map { project.layout.buildDirectory.asFile.get().resolve(it) }.get()
499+
val apiBuildDir =
500+
targetConfig.apiDir.flatMap { f -> project.layout.buildDirectory.asFile.map { it.resolve(f) } }
498501
val targetSupported = targetIsSupported(currentTarget)
499502
// If a target is supported, the workflow is simple: create a dump, then merge it along with other dumps.
500503
if (targetSupported) {
501-
val buildTargetAbi = configureKlibCompilation(mainCompilation, extension, targetConfig,
502-
target, apiBuildDir)
503-
generatedDumps.add(KlibDumpMetadata(target,
504-
objects.fileProperty().also { it.set(buildTargetAbi.flatMap { it.outputAbiFile }) }))
504+
val buildTargetAbi = configureKlibCompilation(
505+
mainCompilation, extension, targetConfig,
506+
target, apiBuildDir
507+
)
508+
generatedDumps.add(
509+
KlibDumpMetadata(target,
510+
objects.fileProperty().also { it.set(buildTargetAbi.flatMap { it.outputAbiFile }) })
511+
)
505512
return@configureEach
506513
}
507514
// If the target is unsupported, the regular merge task will only depend on a task complaining about
@@ -518,10 +525,12 @@ private class KlibValidationPipelineBuilder(
518525
apiBuildDir
519526
)
520527
proxy.configure { it.inputDumps.addAll(generatedDumps) }
521-
inferredDumps.add(KlibDumpMetadata(currentTarget.toKlibTarget(),
522-
objects.fileProperty().also {
523-
it.set(proxy.flatMap { it.outputAbiFile })
524-
}))
528+
inferredDumps.add(
529+
KlibDumpMetadata(currentTarget.toKlibTarget(),
530+
objects.fileProperty().also {
531+
it.set(proxy.flatMap { it.outputAbiFile })
532+
})
533+
)
525534
}
526535
}
527536

@@ -557,7 +566,7 @@ private class KlibValidationPipelineBuilder(
557566
extension: ApiValidationExtension,
558567
targetConfig: TargetConfig,
559568
target: KlibTarget,
560-
apiBuildDir: File
569+
apiBuildDir: Provider<File>
561570
): TaskProvider<KotlinKlibAbiBuildTask> {
562571
val projectName = project.name
563572
val buildTask = project.task<KotlinKlibAbiBuildTask>(targetConfig.apiTaskName("Build")) {
@@ -569,7 +578,7 @@ private class KlibValidationPipelineBuilder(
569578
this.target.set(target)
570579
klibFile.from(compilation.output.classesDirs)
571580
signatureVersion.set(extension.klib.signatureVersion)
572-
outputAbiFile.set(apiBuildDir.resolve(klibDumpFileName))
581+
outputAbiFile.fileProvider(apiBuildDir.map { it.resolve(klibDumpFileName) })
573582
}
574583
return buildTask
575584
}
@@ -591,7 +600,7 @@ private class KlibValidationPipelineBuilder(
591600
klibApiDir: Provider<File>,
592601
targetConfig: TargetConfig,
593602
unsupportedTarget: KlibTarget,
594-
apiBuildDir: File
603+
apiBuildDir: Provider<File>
595604
): TaskProvider<KotlinKlibInferAbiTask> {
596605
val targetName = targetConfig.targetName!!
597606
return project.task<KotlinKlibInferAbiTask>(targetConfig.apiTaskName("Infer")) {
@@ -601,7 +610,7 @@ private class KlibValidationPipelineBuilder(
601610
group = "other"
602611
target.set(unsupportedTarget)
603612
oldMergedKlibDump.fileProvider(klibApiDir.map { it.resolve(klibDumpFileName) })
604-
outputAbiFile.set(apiBuildDir.resolve(klibDumpFileName))
613+
outputAbiFile.fileProvider(apiBuildDir.map { it.resolve(klibDumpFileName) })
605614
}
606615
}
607616
}

0 commit comments

Comments
 (0)