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) {
kaptTaskProvider.configure {
it as KaptWithoutKotlincTask
it.isVerbose = project.isKaptVerbose()
it.mapDiagnosticLocations = kaptExtension.mapDiagnosticLocations
it.annotationProcessorFqNames = kaptExtension.processors.split(',').filter { it.isNotEmpty() }
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
@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 {
return super.source(sourceRootsContainer.add(sources))
@@ -112,7 +113,7 @@ abstract class KaptGenerateStubsTask : KotlinCompile(KotlinJvmOptionsImpl()) {
val pluginOptionsWithKapt = pluginOptions.withWrappedKaptOptions(withApClasspath = kaptClasspath)
args.pluginOptions = (pluginOptionsWithKapt.arguments + args.pluginOptions!!).toTypedArray()
args.verbose = verbose
args.verbose = verbose.get()
args.classpathAsList = this.classpath.filter { it.exists() }.toList()
args.destinationAsFile = this.destinationDir
}
@@ -1,5 +1,6 @@
package org.jetbrains.kotlin.gradle.internal
import org.gradle.api.Project
import org.gradle.api.file.ConfigurableFileCollection
import org.gradle.api.file.DirectoryProperty
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.clearLocalState
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 java.io.File
import java.util.concurrent.Callable
@@ -56,6 +59,7 @@ abstract class KaptTask @Inject constructor(
.matching { it.include("**/*.java") }
.filter { f -> task.isRootAllowed(f) }
).disallowChanges()
task.verbose.set(queryKaptVerboseProperty(task.project))
}
}
@@ -166,6 +170,9 @@ abstract class KaptTask @Inject constructor(
override val metrics: BuildMetricsReporter =
BuildMetricsReporterImpl()
@get:Input
abstract val verbose: Property<Boolean>
private fun isRootAllowed(file: File): Boolean =
file.exists() &&
!isAncestor(destinationDir, file) &&
@@ -332,4 +339,26 @@ abstract class KaptTask @Inject constructor(
}
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.verbose = project.hasProperty("kapt.verbose") && project.property("kapt.verbose").toString().toBoolean() == true
args.verbose = verbose.get()
}
/**
@@ -54,9 +54,6 @@ abstract class KaptWithoutKotlincTask @Inject constructor(
@Suppress("unused")
abstract val kaptJars: ConfigurableFileCollection
@get:Input
var isVerbose: Boolean = false
@get:Input
var classLoadersCacheSize: Int = 0
@@ -119,7 +116,7 @@ abstract class KaptWithoutKotlincTask @Inject constructor(
}
val kaptFlagsForWorker = mutableSetOf<String>().apply {
if (isVerbose) add("VERBOSE")
if (verbose.get()) add("VERBOSE")
if (mapDiagnosticLocations) add("MAP_DIAGNOSTIC_LOCATIONS")
if (includeCompileClasspath) add("INCLUDE_COMPILE_CLASSPATH")
if (incrementalChanges is KaptIncrementalChanges.Known) add("INCREMENTAL_APT")