diff --git a/build.gradle b/build.gradle index 8fb15a6566f..fc4ed9af3d6 100644 --- a/build.gradle +++ b/build.gradle @@ -17,6 +17,24 @@ plugins { apply from: "$rootDir/gradle/ci-support.gradle" +/** + * Allows build cache relocatability for Delombok task + */ +class DelombokArgumentProvider implements CommandLineArgumentProvider { + + @InputFiles + @PathSensitive(PathSensitivity.RELATIVE) + Set srcDirs + + @Internal + File outputDir + + @Override + Iterable asArguments() { + return [srcDirs.collect { it.absolutePath }.join(" "), "-d", outputDir.absolutePath, "-f", "generateDelombokComment:skip"] + } +} + subprojects { apply plugin: 'java-library' apply plugin: 'idea' @@ -43,18 +61,22 @@ subprojects { version = '1.18.20' } + task delombok(type: io.franzbecker.gradle.lombok.task.DelombokTask) { def outputDir = file("$buildDir/delombok") outputs.dir(outputDir) outputs.cacheIf { true } + def i = 1 for (srcDir in project.sourceSets.main.java.srcDirs) { - // TODO: named input and relative path for `srcDir` to make task more cacheable inputs.dir(srcDir) - // TODO: `outputDir` as relative path to make task more cacheable - args(srcDir, "-d", outputDir, "-f", "generateDelombokComment:skip") + .withPropertyName("srcDir${i++}") + .withPathSensitivity(PathSensitivity.RELATIVE) } + argumentProviders.addAll( + new DelombokArgumentProvider(srcDirs: project.sourceSets.main.java.srcDirs, outputDir: outputDir) + ) } delombok.onlyIf { project.sourceSets.main.java.srcDirs.find { it.exists() }