Make 'kapt.verbose' property compatible with configuration cache.

^KT-46651 In Progress
This commit is contained in:
Yahor Berdnikau
2021-05-31 12:21:01 +02:00
committed by Space
parent c4b1fa8ec0
commit 3d36e11e80
5 changed files with 34 additions and 9 deletions
@@ -595,7 +595,6 @@ class Kapt3GradleSubplugin @Inject internal constructor(private val registry: To
if (taskClass == KaptWithoutKotlincTask::class.java) { if (taskClass == KaptWithoutKotlincTask::class.java) {
kaptTaskProvider.configure { kaptTaskProvider.configure {
it as KaptWithoutKotlincTask it as KaptWithoutKotlincTask
it.isVerbose = project.isKaptVerbose()
it.mapDiagnosticLocations = kaptExtension.mapDiagnosticLocations it.mapDiagnosticLocations = kaptExtension.mapDiagnosticLocations
it.annotationProcessorFqNames = kaptExtension.processors.split(',').filter { it.isNotEmpty() } it.annotationProcessorFqNames = kaptExtension.processors.split(',').filter { it.isNotEmpty() }
it.javacOptions = dslJavacOptions.get() it.javacOptions = dslJavacOptions.get()
@@ -63,6 +63,7 @@ abstract class KaptGenerateStubsTask : KotlinCompile(KotlinJvmOptionsImpl()) {
} }
} }
) )
task.verbose.set(KaptTask.queryKaptVerboseProperty(task.project))
} }
} }
@@ -85,7 +86,7 @@ abstract class KaptGenerateStubsTask : KotlinCompile(KotlinJvmOptionsImpl()) {
internal abstract val kotlinTaskPluginClasspath: ConfigurableFileCollection internal abstract val kotlinTaskPluginClasspath: ConfigurableFileCollection
@get:Input @get:Input
val verbose = (project.hasProperty("kapt.verbose") && project.property("kapt.verbose").toString().toBoolean() == true) abstract val verbose: Property<Boolean>
override fun source(vararg sources: Any): SourceTask { override fun source(vararg sources: Any): SourceTask {
return super.source(sourceRootsContainer.add(sources)) return super.source(sourceRootsContainer.add(sources))
@@ -112,7 +113,7 @@ abstract class KaptGenerateStubsTask : KotlinCompile(KotlinJvmOptionsImpl()) {
val pluginOptionsWithKapt = pluginOptions.withWrappedKaptOptions(withApClasspath = kaptClasspath) val pluginOptionsWithKapt = pluginOptions.withWrappedKaptOptions(withApClasspath = kaptClasspath)
args.pluginOptions = (pluginOptionsWithKapt.arguments + args.pluginOptions!!).toTypedArray() args.pluginOptions = (pluginOptionsWithKapt.arguments + args.pluginOptions!!).toTypedArray()
args.verbose = verbose args.verbose = verbose.get()
args.classpathAsList = this.classpath.filter { it.exists() }.toList() args.classpathAsList = this.classpath.filter { it.exists() }.toList()
args.destinationAsFile = this.destinationDir args.destinationAsFile = this.destinationDir
} }
@@ -1,5 +1,6 @@
package org.jetbrains.kotlin.gradle.internal package org.jetbrains.kotlin.gradle.internal
import org.gradle.api.Project
import org.gradle.api.file.ConfigurableFileCollection import org.gradle.api.file.ConfigurableFileCollection
import org.gradle.api.file.DirectoryProperty import org.gradle.api.file.DirectoryProperty
import org.gradle.api.file.FileCollection import org.gradle.api.file.FileCollection
@@ -22,6 +23,8 @@ import org.jetbrains.kotlin.gradle.tasks.*
import org.jetbrains.kotlin.gradle.tasks.cacheOnlyIfEnabledForKotlin import org.jetbrains.kotlin.gradle.tasks.cacheOnlyIfEnabledForKotlin
import org.jetbrains.kotlin.gradle.tasks.clearLocalState import org.jetbrains.kotlin.gradle.tasks.clearLocalState
import org.jetbrains.kotlin.gradle.utils.getValue import org.jetbrains.kotlin.gradle.utils.getValue
import org.jetbrains.kotlin.gradle.utils.isConfigurationCacheAvailable
import org.jetbrains.kotlin.gradle.utils.property
import org.jetbrains.kotlin.gradle.utils.propertyWithNewInstance import org.jetbrains.kotlin.gradle.utils.propertyWithNewInstance
import java.io.File import java.io.File
import java.util.concurrent.Callable import java.util.concurrent.Callable
@@ -56,6 +59,7 @@ abstract class KaptTask @Inject constructor(
.matching { it.include("**/*.java") } .matching { it.include("**/*.java") }
.filter { f -> task.isRootAllowed(f) } .filter { f -> task.isRootAllowed(f) }
).disallowChanges() ).disallowChanges()
task.verbose.set(queryKaptVerboseProperty(task.project))
} }
} }
@@ -166,6 +170,9 @@ abstract class KaptTask @Inject constructor(
override val metrics: BuildMetricsReporter = override val metrics: BuildMetricsReporter =
BuildMetricsReporterImpl() BuildMetricsReporterImpl()
@get:Input
abstract val verbose: Property<Boolean>
private fun isRootAllowed(file: File): Boolean = private fun isRootAllowed(file: File): Boolean =
file.exists() && file.exists() &&
!isAncestor(destinationDir, file) && !isAncestor(destinationDir, file) &&
@@ -332,4 +339,26 @@ abstract class KaptTask @Inject constructor(
} }
return false return false
} }
companion object {
const val KAPT_VERBOSE_OPTION_NAME = "kapt.verbose"
internal fun queryKaptVerboseProperty(
project: Project
): Provider<Boolean> {
return if (isConfigurationCacheAvailable(project.gradle)) {
project
.providers
.gradleProperty(KAPT_VERBOSE_OPTION_NAME)
.forUseAtConfigurationTime()
.map { it.toString().toBoolean() }
.orElse(false)
} else {
project.objects.property(
project.hasProperty(KAPT_VERBOSE_OPTION_NAME) &&
project.property(KAPT_VERBOSE_OPTION_NAME).toString().toBoolean()
)
}
}
}
} }
@@ -75,8 +75,7 @@ abstract class KaptWithKotlincTask @Inject constructor(
) )
args.pluginOptions = (pluginOptionsWithKapt.arguments + args.pluginOptions!!).toTypedArray() args.pluginOptions = (pluginOptionsWithKapt.arguments + args.pluginOptions!!).toTypedArray()
args.verbose = verbose.get()
args.verbose = project.hasProperty("kapt.verbose") && project.property("kapt.verbose").toString().toBoolean() == true
} }
/** /**
@@ -54,9 +54,6 @@ abstract class KaptWithoutKotlincTask @Inject constructor(
@Suppress("unused") @Suppress("unused")
abstract val kaptJars: ConfigurableFileCollection abstract val kaptJars: ConfigurableFileCollection
@get:Input
var isVerbose: Boolean = false
@get:Input @get:Input
var classLoadersCacheSize: Int = 0 var classLoadersCacheSize: Int = 0
@@ -119,7 +116,7 @@ abstract class KaptWithoutKotlincTask @Inject constructor(
} }
val kaptFlagsForWorker = mutableSetOf<String>().apply { val kaptFlagsForWorker = mutableSetOf<String>().apply {
if (isVerbose) add("VERBOSE") if (verbose.get()) add("VERBOSE")
if (mapDiagnosticLocations) add("MAP_DIAGNOSTIC_LOCATIONS") if (mapDiagnosticLocations) add("MAP_DIAGNOSTIC_LOCATIONS")
if (includeCompileClasspath) add("INCLUDE_COMPILE_CLASSPATH") if (includeCompileClasspath) add("INCLUDE_COMPILE_CLASSPATH")
if (incrementalChanges is KaptIncrementalChanges.Known) add("INCREMENTAL_APT") if (incrementalChanges is KaptIncrementalChanges.Known) add("INCREMENTAL_APT")