[Gradle] Migrate from ChangesFiles to SourcesChanges

It allows getting rid of the dependency on `:compiler:incremental-compilation-impl`
#KT-61449 In Progress
This commit is contained in:
Alexander.Likhachev
2023-08-14 13:35:38 +02:00
committed by Space Team
parent 4eb468443a
commit 3fb1f7bf42
9 changed files with 20 additions and 28 deletions
@@ -65,7 +65,7 @@ public final class org/jetbrains/kotlin/buildtools/api/SharedApiClassesClassLoad
public static final fun newInstance ()Ljava/lang/ClassLoader;
}
public abstract interface class org/jetbrains/kotlin/buildtools/api/SourcesChanges {
public abstract interface class org/jetbrains/kotlin/buildtools/api/SourcesChanges : java/io/Serializable {
}
public final class org/jetbrains/kotlin/buildtools/api/SourcesChanges$Known : org/jetbrains/kotlin/buildtools/api/SourcesChanges {
@@ -6,12 +6,12 @@
package org.jetbrains.kotlin.buildtools.api
import java.io.File
import java.io.Serializable
/**
* A hierarchy representing source files changes for incremental compilation
*/
@ExperimentalBuildToolsApi
public sealed interface SourcesChanges {
public sealed interface SourcesChanges : Serializable {
/**
* A marker object stating that the API consumer cannot calculate changes (either because it's an initial build or for some other reason).
* The Build Tools API will not enable its source file changes detector in this mode, expecting the API consumer to provide file changes as [Known] for the consequent builds.
@@ -9,6 +9,7 @@ import org.gradle.api.logging.Logger
import org.jetbrains.kotlin.build.report.metrics.*
import org.jetbrains.kotlin.build.report.statistics.StatTag
import org.jetbrains.kotlin.buildtools.api.KotlinLogger
import org.jetbrains.kotlin.buildtools.api.SourcesChanges
import org.jetbrains.kotlin.cli.common.ExitCode
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
import org.jetbrains.kotlin.config.Services
@@ -20,7 +21,6 @@ import org.jetbrains.kotlin.gradle.plugin.internal.state.TaskLoggers
import org.jetbrains.kotlin.gradle.report.*
import org.jetbrains.kotlin.gradle.tasks.*
import org.jetbrains.kotlin.gradle.utils.stackTraceAsString
import org.jetbrains.kotlin.incremental.ChangedFiles
import org.jetbrains.kotlin.incremental.ClasspathChanges
import org.jetbrains.kotlin.incremental.IncrementalModuleInfo
import org.jetbrains.kotlin.incremental.util.ExceptionLocation
@@ -309,12 +309,12 @@ internal class GradleKotlinCompilerWork @Inject constructor(
bufferingMessageCollector: GradleBufferingMessageCollector
): CompileService.CallResult<Int> {
val icEnv = incrementalCompilationEnvironment ?: error("incrementalCompilationEnvironment is null!")
val knownChangedFiles = icEnv.changedFiles as? ChangedFiles.Known
val knownChangedFiles = icEnv.changedFiles as? SourcesChanges.Known
val requestedCompilationResults = requestedCompilationResults()
val compilationOptions = IncrementalCompilationOptions(
areFileChangesKnown = knownChangedFiles != null,
modifiedFiles = knownChangedFiles?.modified,
deletedFiles = knownChangedFiles?.removed,
modifiedFiles = knownChangedFiles?.modifiedFiles,
deletedFiles = knownChangedFiles?.removedFiles,
classpathChanges = icEnv.classpathChanges,
workingDir = icEnv.workingDir,
reportCategories = reportCategories(isVerbose),
@@ -5,14 +5,14 @@
package org.jetbrains.kotlin.compilerRunner
import org.jetbrains.kotlin.buildtools.api.SourcesChanges
import org.jetbrains.kotlin.daemon.common.MultiModuleICSettings
import org.jetbrains.kotlin.incremental.ChangedFiles
import org.jetbrains.kotlin.incremental.ClasspathChanges
import java.io.File
import java.io.Serializable
internal class IncrementalCompilationEnvironment(
val changedFiles: ChangedFiles,
val changedFiles: SourcesChanges,
val classpathChanges: ClasspathChanges,
val workingDir: File,
val rootProjectDir: File,
@@ -27,18 +27,10 @@ import org.jetbrains.kotlin.gradle.plugin.internal.BuildIdService
import org.jetbrains.kotlin.gradle.plugin.internal.state.TaskLoggers
import org.jetbrains.kotlin.gradle.tasks.KotlinCompilerExecutionStrategy
import org.jetbrains.kotlin.gradle.tasks.throwExceptionIfCompilationFailed
import org.jetbrains.kotlin.incremental.ChangedFiles
import org.jetbrains.kotlin.incremental.ClasspathChanges
import org.slf4j.LoggerFactory
import java.io.File
@OptIn(ExperimentalBuildToolsApi::class)
private val ChangedFiles.asSourcesChanges: SourcesChanges
get() = when (this) {
is ChangedFiles.Known -> SourcesChanges.Known(modified, removed)
is ChangedFiles.Unknown -> SourcesChanges.Unknown
}
internal abstract class BuildToolsApiCompilationWork : WorkAction<BuildToolsApiCompilationWork.BuildToolsApiCompilationParameters> {
internal interface BuildToolsApiCompilationParameters : WorkParameters {
val buildIdService: Property<BuildIdService>
@@ -113,7 +105,7 @@ internal abstract class BuildToolsApiCompilationWork : WorkAction<BuildToolsApiC
}
jvmCompilationConfig.useIncrementalCompilation(
icEnv.workingDir,
icEnv.changedFiles.asSourcesChanges,
icEnv.changedFiles,
classpathSnapshotsParameters,
classpathSnapshotsConfig,
)
@@ -31,12 +31,12 @@ import org.jetbrains.kotlin.gradle.plugin.getKotlinPluginVersion
import org.jetbrains.kotlin.gradle.plugin.internal.state.TaskExecutionResults
import org.jetbrains.kotlin.build.report.statistics.BuildStartParameters
import org.jetbrains.kotlin.build.report.statistics.StatTag
import org.jetbrains.kotlin.buildtools.api.SourcesChanges
import org.jetbrains.kotlin.gradle.plugin.statistics.KotlinBuildStatsService
import org.jetbrains.kotlin.gradle.report.BuildReportsService.Companion.getStartParameters
import org.jetbrains.kotlin.gradle.report.data.BuildOperationRecord
import org.jetbrains.kotlin.gradle.tasks.withType
import org.jetbrains.kotlin.gradle.utils.SingleActionPerProject
import org.jetbrains.kotlin.incremental.ChangedFiles
import org.jetbrains.kotlin.statistics.metrics.BooleanMetrics
import org.jetbrains.kotlin.statistics.metrics.NumericalMetrics
import java.util.concurrent.ConcurrentHashMap
@@ -330,7 +330,7 @@ internal class TaskRecord(
override val skipMessage: String?,
override val icLogLines: List<String>,
val kotlinLanguageVersion: KotlinVersion?,
val changedFiles: ChangedFiles? = null,
val changedFiles: SourcesChanges? = null,
val compilerArguments: Array<String> = emptyArray(),
val statTags: Set<StatTag> = emptySet(),
) : BuildOperationRecord {
@@ -10,7 +10,7 @@ import org.jetbrains.kotlin.build.report.metrics.GradleBuildPerformanceMetric
import org.jetbrains.kotlin.build.report.metrics.GradleBuildTime
import org.jetbrains.kotlin.gradle.dsl.KotlinVersion
import org.jetbrains.kotlin.build.report.statistics.StatTag
import org.jetbrains.kotlin.incremental.ChangedFiles
import org.jetbrains.kotlin.buildtools.api.SourcesChanges
internal class TaskExecutionResult(
val buildMetrics: BuildMetrics<GradleBuildTime, GradleBuildPerformanceMetric>,
@@ -20,7 +20,7 @@ internal class TaskExecutionResult(
internal class TaskExecutionInfo(
val kotlinLanguageVersion: KotlinVersion? = null,
val changedFiles: ChangedFiles? = null,
val changedFiles: SourcesChanges? = null,
val compilerArguments: Array<String> = emptyArray(),
val tags: Set<StatTag> = emptySet(),
)
@@ -11,8 +11,8 @@ import org.gradle.tooling.events.task.TaskSkippedResult
import org.gradle.tooling.events.task.TaskSuccessResult
import org.jetbrains.kotlin.build.report.metrics.*
import org.jetbrains.kotlin.build.report.statistics.StatTag
import org.jetbrains.kotlin.buildtools.api.SourcesChanges
import org.jetbrains.kotlin.gradle.report.data.BuildOperationRecord
import org.jetbrains.kotlin.incremental.ChangedFiles
import java.util.concurrent.TimeUnit
import org.jetbrains.kotlin.gradle.dsl.KotlinVersion
import org.jetbrains.kotlin.gradle.report.data.GradleCompileStatisticsData
@@ -71,8 +71,8 @@ internal fun prepareData(
buildMetrics, startTime, System.currentTimeMillis()
)
val buildAttributes = collectBuildAttributes(buildMetrics)
val changes = if (buildOperationRecord is TaskRecord && buildOperationRecord.changedFiles is ChangedFiles.Known) {
buildOperationRecord.changedFiles.modified.map { it.absolutePath } + buildOperationRecord.changedFiles.removed.map { it.absolutePath }
val changes = if (buildOperationRecord is TaskRecord && buildOperationRecord.changedFiles is SourcesChanges.Known) {
buildOperationRecord.changedFiles.modifiedFiles.map { it.absolutePath } + buildOperationRecord.changedFiles.removedFiles.map { it.absolutePath }
} else {
emptyList<String>()
}
@@ -15,6 +15,7 @@ import org.gradle.api.tasks.*
import org.gradle.work.*
import org.gradle.workers.WorkerExecutor
import org.jetbrains.kotlin.build.report.metrics.*
import org.jetbrains.kotlin.buildtools.api.SourcesChanges
import org.jetbrains.kotlin.cli.common.CompilerSystemProperties
import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments
import org.jetbrains.kotlin.compilerRunner.CompilerExecutionSettings
@@ -37,7 +38,6 @@ import org.jetbrains.kotlin.gradle.plugin.internal.UsesBuildIdProviderService
import org.jetbrains.kotlin.gradle.plugin.statistics.KotlinBuildStatsService
import org.jetbrains.kotlin.gradle.report.*
import org.jetbrains.kotlin.gradle.utils.*
import org.jetbrains.kotlin.incremental.ChangedFiles
import org.jetbrains.kotlin.incremental.IncrementalCompilerRunner
import org.jetbrains.kotlin.statistics.metrics.BooleanMetrics
import org.jetbrains.kotlin.statistics.metrics.StringMetrics
@@ -332,7 +332,7 @@ abstract class AbstractKotlinCompile<T : CommonCompilerArguments> @Inject constr
inputChanges: InputChanges,
incrementalProps: List<FileCollection>
) = if (!inputChanges.isIncremental) {
ChangedFiles.Unknown()
SourcesChanges.Unknown
} else {
incrementalProps
.fold(mutableListOf<File>() to mutableListOf<File>()) { (modified, removed), prop ->
@@ -346,7 +346,7 @@ abstract class AbstractKotlinCompile<T : CommonCompilerArguments> @Inject constr
modified to removed
}
.run {
ChangedFiles.Known(first, second)
SourcesChanges.Known(first, second)
}
}