[KGP] Introduce Incremental Compilation Feature Toggles
Makes it easier to introduce a Gradle property for configuring IncrementalCompilerRunner. ^KT-64513 Fixed ^KT-63837 In Progress Merge-request: KT-MR-13671 Merged-by: Evgenii Mazhukin <evgenii.mazhukin@jetbrains.com>
This commit is contained in:
committed by
Space Team
parent
97f8f7a734
commit
ee3119e9d2
+2
-4
@@ -132,7 +132,7 @@ internal class GradleKotlinCompilerWork @Inject constructor(
|
||||
|
||||
private fun collectStatTags(): Set<StatTag> {
|
||||
val statTags = HashSet<StatTag>()
|
||||
config.incrementalCompilationEnvironment?.withAbiSnapshot?.ifTrue { statTags.add(StatTag.ABI_SNAPSHOT) }
|
||||
config.incrementalCompilationEnvironment?.icFeatures?.withAbiSnapshot?.ifTrue { statTags.add(StatTag.ABI_SNAPSHOT) }
|
||||
if (config.incrementalCompilationEnvironment?.classpathChanges is ClasspathChanges.ClasspathSnapshotEnabled) {
|
||||
statTags.add(StatTag.ARTIFACT_TRANSFORM)
|
||||
}
|
||||
@@ -320,9 +320,7 @@ internal class GradleKotlinCompilerWork @Inject constructor(
|
||||
rootProjectDir = icEnv.rootProjectDir,
|
||||
buildDir = icEnv.buildDir,
|
||||
kotlinScriptExtensions = config.kotlinScriptExtensions,
|
||||
withAbiSnapshot = icEnv.withAbiSnapshot,
|
||||
preciseCompilationResultsBackup = icEnv.preciseCompilationResultsBackup,
|
||||
keepIncrementalCompilationCachesInMemory = icEnv.keepIncrementalCompilationCachesInMemory
|
||||
icFeatures = icEnv.icFeatures,
|
||||
)
|
||||
|
||||
log.info("Options for KOTLIN DAEMON: $compilationOptions")
|
||||
|
||||
+3
-4
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.compilerRunner
|
||||
import org.jetbrains.kotlin.buildtools.api.SourcesChanges
|
||||
import org.jetbrains.kotlin.daemon.common.MultiModuleICSettings
|
||||
import org.jetbrains.kotlin.incremental.ClasspathChanges
|
||||
import org.jetbrains.kotlin.incremental.IncrementalCompilationFeatures
|
||||
import java.io.File
|
||||
import java.io.Serializable
|
||||
|
||||
@@ -20,11 +21,9 @@ internal class IncrementalCompilationEnvironment(
|
||||
val usePreciseJavaTracking: Boolean = false,
|
||||
val disableMultiModuleIC: Boolean = false,
|
||||
val multiModuleICSettings: MultiModuleICSettings,
|
||||
val withAbiSnapshot: Boolean = false,
|
||||
val preciseCompilationResultsBackup: Boolean = false,
|
||||
val keepIncrementalCompilationCachesInMemory: Boolean = false,
|
||||
val icFeatures: IncrementalCompilationFeatures = IncrementalCompilationFeatures.DEFAULT_CONFIGURATION,
|
||||
) : Serializable {
|
||||
companion object {
|
||||
const val serialVersionUID: Long = 3
|
||||
const val serialVersionUID: Long = 4
|
||||
}
|
||||
}
|
||||
+4
-2
@@ -86,12 +86,14 @@ internal abstract class BuildToolsApiCompilationWork @Inject constructor(
|
||||
val icEnv = workArguments.incrementalCompilationEnvironment
|
||||
val classpathChanges = icEnv?.classpathChanges
|
||||
if (classpathChanges is ClasspathChanges.ClasspathSnapshotEnabled) {
|
||||
// important detail: by using primitive-type single-field setters,
|
||||
// we maintain compatibility of this KGP code with future BuildToolsApi implementations
|
||||
val classpathSnapshotsConfig = jvmCompilationConfig.makeClasspathSnapshotBasedIncrementalCompilationConfiguration()
|
||||
.setRootProjectDir(icEnv.rootProjectDir)
|
||||
.setBuildDir(icEnv.buildDir)
|
||||
.usePreciseJavaTracking(icEnv.usePreciseJavaTracking)
|
||||
.usePreciseCompilationResultsBackup(icEnv.preciseCompilationResultsBackup)
|
||||
.keepIncrementalCompilationCachesInMemory(icEnv.keepIncrementalCompilationCachesInMemory)
|
||||
.usePreciseCompilationResultsBackup(icEnv.icFeatures.preciseCompilationResultsBackup)
|
||||
.keepIncrementalCompilationCachesInMemory(icEnv.icFeatures.keepIncrementalCompilationCachesInMemory)
|
||||
.useOutputDirs(workArguments.outputFiles)
|
||||
.forceNonIncrementalMode(classpathChanges !is ClasspathChanges.ClasspathSnapshotEnabled.IncrementalRun)
|
||||
val classpathSnapshotsParameters = ClasspathSnapshotBasedIncrementalCompilationApproachParameters(
|
||||
|
||||
+12
-1
@@ -6,7 +6,6 @@
|
||||
package org.jetbrains.kotlin.gradle.tasks
|
||||
|
||||
import org.gradle.api.file.*
|
||||
import org.gradle.api.logging.Logging
|
||||
import org.gradle.api.model.ObjectFactory
|
||||
import org.gradle.api.provider.Property
|
||||
import org.gradle.api.provider.Provider
|
||||
@@ -38,6 +37,7 @@ import org.jetbrains.kotlin.gradle.plugin.internal.UsesBuildIdProviderService
|
||||
import org.jetbrains.kotlin.gradle.plugin.statistics.UsesBuildFusService
|
||||
import org.jetbrains.kotlin.gradle.report.*
|
||||
import org.jetbrains.kotlin.gradle.utils.*
|
||||
import org.jetbrains.kotlin.incremental.IncrementalCompilationFeatures
|
||||
import org.jetbrains.kotlin.statistics.metrics.BooleanMetrics
|
||||
import org.jetbrains.kotlin.statistics.metrics.StringMetrics
|
||||
import java.io.File
|
||||
@@ -294,6 +294,17 @@ abstract class AbstractKotlinCompile<T : CommonCompilerArguments> @Inject constr
|
||||
commonSourceSet
|
||||
)
|
||||
|
||||
/**
|
||||
* Entry point for getting IC feature toggles in Gradle. Child classes should override it
|
||||
* if they have a platform-specific Input.
|
||||
*/
|
||||
protected open fun makeIncrementalCompilationFeatures(): IncrementalCompilationFeatures {
|
||||
return IncrementalCompilationFeatures(
|
||||
preciseCompilationResultsBackup = preciseCompilationResultsBackup.get(),
|
||||
keepIncrementalCompilationCachesInMemory = keepIncrementalCompilationCachesInMemory.get(),
|
||||
)
|
||||
}
|
||||
|
||||
private fun executeImpl(
|
||||
inputChanges: InputChanges,
|
||||
taskOutputsBackup: TaskOutputsBackup?
|
||||
|
||||
+1
-2
@@ -267,8 +267,7 @@ abstract class Kotlin2JsCompile @Inject constructor(
|
||||
rootProjectDir = rootProjectDir,
|
||||
buildDir = projectLayout.buildDirectory.getFile(),
|
||||
multiModuleICSettings = multiModuleICSettings,
|
||||
preciseCompilationResultsBackup = preciseCompilationResultsBackup.get(),
|
||||
keepIncrementalCompilationCachesInMemory = keepIncrementalCompilationCachesInMemory.get(),
|
||||
icFeatures = makeIncrementalCompilationFeatures(),
|
||||
)
|
||||
} else null
|
||||
|
||||
|
||||
+9
-3
@@ -48,6 +48,7 @@ import org.jetbrains.kotlin.incremental.ClasspathChanges.ClasspathSnapshotEnable
|
||||
import org.jetbrains.kotlin.incremental.ClasspathChanges.ClasspathSnapshotEnabled.NotAvailableDueToMissingClasspathSnapshot
|
||||
import org.jetbrains.kotlin.incremental.ClasspathChanges.ClasspathSnapshotEnabled.NotAvailableForNonIncrementalRun
|
||||
import org.jetbrains.kotlin.incremental.ClasspathSnapshotFiles
|
||||
import org.jetbrains.kotlin.incremental.IncrementalCompilationFeatures
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.cast
|
||||
import javax.inject.Inject
|
||||
|
||||
@@ -326,9 +327,7 @@ abstract class KotlinCompile @Inject constructor(
|
||||
usePreciseJavaTracking = usePreciseJavaTracking,
|
||||
disableMultiModuleIC = disableMultiModuleIC,
|
||||
multiModuleICSettings = multiModuleICSettings,
|
||||
withAbiSnapshot = useKotlinAbiSnapshot.get(),
|
||||
preciseCompilationResultsBackup = preciseCompilationResultsBackup.get(),
|
||||
keepIncrementalCompilationCachesInMemory = keepIncrementalCompilationCachesInMemory.get(),
|
||||
icFeatures = makeIncrementalCompilationFeatures(),
|
||||
)
|
||||
} else null
|
||||
|
||||
@@ -466,6 +465,13 @@ abstract class KotlinCompile @Inject constructor(
|
||||
super.setSource(*sources)
|
||||
}
|
||||
|
||||
// override incremental compilation features, while withAbiSnapshot is JVM-only
|
||||
override fun makeIncrementalCompilationFeatures(): IncrementalCompilationFeatures {
|
||||
return super.makeIncrementalCompilationFeatures().copy(
|
||||
withAbiSnapshot = useKotlinAbiSnapshot.get(),
|
||||
)
|
||||
}
|
||||
|
||||
private fun getClasspathChanges(inputChanges: InputChanges): ClasspathChanges = when {
|
||||
!classpathSnapshotProperties.useClasspathSnapshot.get() -> ClasspathSnapshotDisabled
|
||||
else -> {
|
||||
|
||||
Reference in New Issue
Block a user