From 3fb1f7bf424bf976b1d0bedfba879dfb1069d1b6 Mon Sep 17 00:00:00 2001 From: "Alexander.Likhachev" Date: Mon, 14 Aug 2023 13:35:38 +0200 Subject: [PATCH] [Gradle] Migrate from ChangesFiles to SourcesChanges It allows getting rid of the dependency on `:compiler:incremental-compilation-impl` #KT-61449 In Progress --- .../api/kotlin-build-tools-api.api | 2 +- .../jetbrains/kotlin/buildtools/api/SourcesChanges.kt | 4 ++-- .../kotlin/compilerRunner/GradleKotlinCompilerWork.kt | 8 ++++---- .../IncrementalCompilationEnvironment.kt | 4 ++-- .../btapi/BuildToolsApiCompilationWork.kt | 10 +--------- .../kotlin/gradle/report/BuildMetricsService.kt | 4 ++-- .../kotlin/gradle/report/TaskExecutionResult.kt | 4 ++-- .../jetbrains/kotlin/gradle/report/reportDataUtil.kt | 6 +++--- .../kotlin/gradle/tasks/AbstractKotlinCompile.kt | 6 +++--- 9 files changed, 20 insertions(+), 28 deletions(-) diff --git a/compiler/build-tools/kotlin-build-tools-api/api/kotlin-build-tools-api.api b/compiler/build-tools/kotlin-build-tools-api/api/kotlin-build-tools-api.api index 3df6793b7df..b3861d4b30a 100644 --- a/compiler/build-tools/kotlin-build-tools-api/api/kotlin-build-tools-api.api +++ b/compiler/build-tools/kotlin-build-tools-api/api/kotlin-build-tools-api.api @@ -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 { diff --git a/compiler/build-tools/kotlin-build-tools-api/src/main/kotlin/org/jetbrains/kotlin/buildtools/api/SourcesChanges.kt b/compiler/build-tools/kotlin-build-tools-api/src/main/kotlin/org/jetbrains/kotlin/buildtools/api/SourcesChanges.kt index 34ccc7a5b7d..2d8a7d494e3 100644 --- a/compiler/build-tools/kotlin-build-tools-api/src/main/kotlin/org/jetbrains/kotlin/buildtools/api/SourcesChanges.kt +++ b/compiler/build-tools/kotlin-build-tools-api/src/main/kotlin/org/jetbrains/kotlin/buildtools/api/SourcesChanges.kt @@ -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. diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/GradleKotlinCompilerWork.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/GradleKotlinCompilerWork.kt index 5aefbe49284..5001f736a2f 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/GradleKotlinCompilerWork.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/GradleKotlinCompilerWork.kt @@ -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 { 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), diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/IncrementalCompilationEnvironment.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/IncrementalCompilationEnvironment.kt index f3d855d4d15..21234340733 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/IncrementalCompilationEnvironment.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/IncrementalCompilationEnvironment.kt @@ -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, diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/btapi/BuildToolsApiCompilationWork.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/btapi/BuildToolsApiCompilationWork.kt index 35ebe0a481e..9ef7c02fc8e 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/btapi/BuildToolsApiCompilationWork.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/btapi/BuildToolsApiCompilationWork.kt @@ -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 { internal interface BuildToolsApiCompilationParameters : WorkParameters { val buildIdService: Property @@ -113,7 +105,7 @@ internal abstract class BuildToolsApiCompilationWork : WorkAction, val kotlinLanguageVersion: KotlinVersion?, - val changedFiles: ChangedFiles? = null, + val changedFiles: SourcesChanges? = null, val compilerArguments: Array = emptyArray(), val statTags: Set = emptySet(), ) : BuildOperationRecord { diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/report/TaskExecutionResult.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/report/TaskExecutionResult.kt index dc331a63993..8e35da653f1 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/report/TaskExecutionResult.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/report/TaskExecutionResult.kt @@ -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, @@ -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 = emptyArray(), val tags: Set = emptySet(), ) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/report/reportDataUtil.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/report/reportDataUtil.kt index 7071e09ae4a..0bfbd4d8363 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/report/reportDataUtil.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/report/reportDataUtil.kt @@ -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() } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/AbstractKotlinCompile.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/AbstractKotlinCompile.kt index 5df9d970f56..7ac7d3df3d8 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/AbstractKotlinCompile.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/AbstractKotlinCompile.kt @@ -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 @Inject constr inputChanges: InputChanges, incrementalProps: List ) = if (!inputChanges.isIncremental) { - ChangedFiles.Unknown() + SourcesChanges.Unknown } else { incrementalProps .fold(mutableListOf() to mutableListOf()) { (modified, removed), prop -> @@ -346,7 +346,7 @@ abstract class AbstractKotlinCompile @Inject constr modified to removed } .run { - ChangedFiles.Known(first, second) + SourcesChanges.Known(first, second) } }