[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 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 { 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 package org.jetbrains.kotlin.buildtools.api
import java.io.File import java.io.File
import java.io.Serializable
/** /**
* A hierarchy representing source files changes for incremental compilation * A hierarchy representing source files changes for incremental compilation
*/ */
@ExperimentalBuildToolsApi public sealed interface SourcesChanges : Serializable {
public sealed interface SourcesChanges {
/** /**
* A marker object stating that the API consumer cannot calculate changes (either because it's an initial build or for some other reason). * 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. * 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.metrics.*
import org.jetbrains.kotlin.build.report.statistics.StatTag import org.jetbrains.kotlin.build.report.statistics.StatTag
import org.jetbrains.kotlin.buildtools.api.KotlinLogger 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.ExitCode
import org.jetbrains.kotlin.cli.common.messages.MessageCollector import org.jetbrains.kotlin.cli.common.messages.MessageCollector
import org.jetbrains.kotlin.config.Services 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.report.*
import org.jetbrains.kotlin.gradle.tasks.* import org.jetbrains.kotlin.gradle.tasks.*
import org.jetbrains.kotlin.gradle.utils.stackTraceAsString import org.jetbrains.kotlin.gradle.utils.stackTraceAsString
import org.jetbrains.kotlin.incremental.ChangedFiles
import org.jetbrains.kotlin.incremental.ClasspathChanges import org.jetbrains.kotlin.incremental.ClasspathChanges
import org.jetbrains.kotlin.incremental.IncrementalModuleInfo import org.jetbrains.kotlin.incremental.IncrementalModuleInfo
import org.jetbrains.kotlin.incremental.util.ExceptionLocation import org.jetbrains.kotlin.incremental.util.ExceptionLocation
@@ -309,12 +309,12 @@ internal class GradleKotlinCompilerWork @Inject constructor(
bufferingMessageCollector: GradleBufferingMessageCollector bufferingMessageCollector: GradleBufferingMessageCollector
): CompileService.CallResult<Int> { ): CompileService.CallResult<Int> {
val icEnv = incrementalCompilationEnvironment ?: error("incrementalCompilationEnvironment is null!") 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 requestedCompilationResults = requestedCompilationResults()
val compilationOptions = IncrementalCompilationOptions( val compilationOptions = IncrementalCompilationOptions(
areFileChangesKnown = knownChangedFiles != null, areFileChangesKnown = knownChangedFiles != null,
modifiedFiles = knownChangedFiles?.modified, modifiedFiles = knownChangedFiles?.modifiedFiles,
deletedFiles = knownChangedFiles?.removed, deletedFiles = knownChangedFiles?.removedFiles,
classpathChanges = icEnv.classpathChanges, classpathChanges = icEnv.classpathChanges,
workingDir = icEnv.workingDir, workingDir = icEnv.workingDir,
reportCategories = reportCategories(isVerbose), reportCategories = reportCategories(isVerbose),
@@ -5,14 +5,14 @@
package org.jetbrains.kotlin.compilerRunner package org.jetbrains.kotlin.compilerRunner
import org.jetbrains.kotlin.buildtools.api.SourcesChanges
import org.jetbrains.kotlin.daemon.common.MultiModuleICSettings import org.jetbrains.kotlin.daemon.common.MultiModuleICSettings
import org.jetbrains.kotlin.incremental.ChangedFiles
import org.jetbrains.kotlin.incremental.ClasspathChanges import org.jetbrains.kotlin.incremental.ClasspathChanges
import java.io.File import java.io.File
import java.io.Serializable import java.io.Serializable
internal class IncrementalCompilationEnvironment( internal class IncrementalCompilationEnvironment(
val changedFiles: ChangedFiles, val changedFiles: SourcesChanges,
val classpathChanges: ClasspathChanges, val classpathChanges: ClasspathChanges,
val workingDir: File, val workingDir: File,
val rootProjectDir: 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.plugin.internal.state.TaskLoggers
import org.jetbrains.kotlin.gradle.tasks.KotlinCompilerExecutionStrategy import org.jetbrains.kotlin.gradle.tasks.KotlinCompilerExecutionStrategy
import org.jetbrains.kotlin.gradle.tasks.throwExceptionIfCompilationFailed import org.jetbrains.kotlin.gradle.tasks.throwExceptionIfCompilationFailed
import org.jetbrains.kotlin.incremental.ChangedFiles
import org.jetbrains.kotlin.incremental.ClasspathChanges import org.jetbrains.kotlin.incremental.ClasspathChanges
import org.slf4j.LoggerFactory import org.slf4j.LoggerFactory
import java.io.File 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 abstract class BuildToolsApiCompilationWork : WorkAction<BuildToolsApiCompilationWork.BuildToolsApiCompilationParameters> {
internal interface BuildToolsApiCompilationParameters : WorkParameters { internal interface BuildToolsApiCompilationParameters : WorkParameters {
val buildIdService: Property<BuildIdService> val buildIdService: Property<BuildIdService>
@@ -113,7 +105,7 @@ internal abstract class BuildToolsApiCompilationWork : WorkAction<BuildToolsApiC
} }
jvmCompilationConfig.useIncrementalCompilation( jvmCompilationConfig.useIncrementalCompilation(
icEnv.workingDir, icEnv.workingDir,
icEnv.changedFiles.asSourcesChanges, icEnv.changedFiles,
classpathSnapshotsParameters, classpathSnapshotsParameters,
classpathSnapshotsConfig, 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.gradle.plugin.internal.state.TaskExecutionResults
import org.jetbrains.kotlin.build.report.statistics.BuildStartParameters import org.jetbrains.kotlin.build.report.statistics.BuildStartParameters
import org.jetbrains.kotlin.build.report.statistics.StatTag 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.plugin.statistics.KotlinBuildStatsService
import org.jetbrains.kotlin.gradle.report.BuildReportsService.Companion.getStartParameters import org.jetbrains.kotlin.gradle.report.BuildReportsService.Companion.getStartParameters
import org.jetbrains.kotlin.gradle.report.data.BuildOperationRecord import org.jetbrains.kotlin.gradle.report.data.BuildOperationRecord
import org.jetbrains.kotlin.gradle.tasks.withType import org.jetbrains.kotlin.gradle.tasks.withType
import org.jetbrains.kotlin.gradle.utils.SingleActionPerProject 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.BooleanMetrics
import org.jetbrains.kotlin.statistics.metrics.NumericalMetrics import org.jetbrains.kotlin.statistics.metrics.NumericalMetrics
import java.util.concurrent.ConcurrentHashMap import java.util.concurrent.ConcurrentHashMap
@@ -330,7 +330,7 @@ internal class TaskRecord(
override val skipMessage: String?, override val skipMessage: String?,
override val icLogLines: List<String>, override val icLogLines: List<String>,
val kotlinLanguageVersion: KotlinVersion?, val kotlinLanguageVersion: KotlinVersion?,
val changedFiles: ChangedFiles? = null, val changedFiles: SourcesChanges? = null,
val compilerArguments: Array<String> = emptyArray(), val compilerArguments: Array<String> = emptyArray(),
val statTags: Set<StatTag> = emptySet(), val statTags: Set<StatTag> = emptySet(),
) : BuildOperationRecord { ) : 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.build.report.metrics.GradleBuildTime
import org.jetbrains.kotlin.gradle.dsl.KotlinVersion import org.jetbrains.kotlin.gradle.dsl.KotlinVersion
import org.jetbrains.kotlin.build.report.statistics.StatTag import org.jetbrains.kotlin.build.report.statistics.StatTag
import org.jetbrains.kotlin.incremental.ChangedFiles import org.jetbrains.kotlin.buildtools.api.SourcesChanges
internal class TaskExecutionResult( internal class TaskExecutionResult(
val buildMetrics: BuildMetrics<GradleBuildTime, GradleBuildPerformanceMetric>, val buildMetrics: BuildMetrics<GradleBuildTime, GradleBuildPerformanceMetric>,
@@ -20,7 +20,7 @@ internal class TaskExecutionResult(
internal class TaskExecutionInfo( internal class TaskExecutionInfo(
val kotlinLanguageVersion: KotlinVersion? = null, val kotlinLanguageVersion: KotlinVersion? = null,
val changedFiles: ChangedFiles? = null, val changedFiles: SourcesChanges? = null,
val compilerArguments: Array<String> = emptyArray(), val compilerArguments: Array<String> = emptyArray(),
val tags: Set<StatTag> = emptySet(), 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.gradle.tooling.events.task.TaskSuccessResult
import org.jetbrains.kotlin.build.report.metrics.* import org.jetbrains.kotlin.build.report.metrics.*
import org.jetbrains.kotlin.build.report.statistics.StatTag 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.gradle.report.data.BuildOperationRecord
import org.jetbrains.kotlin.incremental.ChangedFiles
import java.util.concurrent.TimeUnit import java.util.concurrent.TimeUnit
import org.jetbrains.kotlin.gradle.dsl.KotlinVersion import org.jetbrains.kotlin.gradle.dsl.KotlinVersion
import org.jetbrains.kotlin.gradle.report.data.GradleCompileStatisticsData import org.jetbrains.kotlin.gradle.report.data.GradleCompileStatisticsData
@@ -71,8 +71,8 @@ internal fun prepareData(
buildMetrics, startTime, System.currentTimeMillis() buildMetrics, startTime, System.currentTimeMillis()
) )
val buildAttributes = collectBuildAttributes(buildMetrics) val buildAttributes = collectBuildAttributes(buildMetrics)
val changes = if (buildOperationRecord is TaskRecord && buildOperationRecord.changedFiles is ChangedFiles.Known) { val changes = if (buildOperationRecord is TaskRecord && buildOperationRecord.changedFiles is SourcesChanges.Known) {
buildOperationRecord.changedFiles.modified.map { it.absolutePath } + buildOperationRecord.changedFiles.removed.map { it.absolutePath } buildOperationRecord.changedFiles.modifiedFiles.map { it.absolutePath } + buildOperationRecord.changedFiles.removedFiles.map { it.absolutePath }
} else { } else {
emptyList<String>() emptyList<String>()
} }
@@ -15,6 +15,7 @@ import org.gradle.api.tasks.*
import org.gradle.work.* import org.gradle.work.*
import org.gradle.workers.WorkerExecutor import org.gradle.workers.WorkerExecutor
import org.jetbrains.kotlin.build.report.metrics.* 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.CompilerSystemProperties
import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments
import org.jetbrains.kotlin.compilerRunner.CompilerExecutionSettings 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.plugin.statistics.KotlinBuildStatsService
import org.jetbrains.kotlin.gradle.report.* import org.jetbrains.kotlin.gradle.report.*
import org.jetbrains.kotlin.gradle.utils.* import org.jetbrains.kotlin.gradle.utils.*
import org.jetbrains.kotlin.incremental.ChangedFiles
import org.jetbrains.kotlin.incremental.IncrementalCompilerRunner import org.jetbrains.kotlin.incremental.IncrementalCompilerRunner
import org.jetbrains.kotlin.statistics.metrics.BooleanMetrics import org.jetbrains.kotlin.statistics.metrics.BooleanMetrics
import org.jetbrains.kotlin.statistics.metrics.StringMetrics import org.jetbrains.kotlin.statistics.metrics.StringMetrics
@@ -332,7 +332,7 @@ abstract class AbstractKotlinCompile<T : CommonCompilerArguments> @Inject constr
inputChanges: InputChanges, inputChanges: InputChanges,
incrementalProps: List<FileCollection> incrementalProps: List<FileCollection>
) = if (!inputChanges.isIncremental) { ) = if (!inputChanges.isIncremental) {
ChangedFiles.Unknown() SourcesChanges.Unknown
} else { } else {
incrementalProps incrementalProps
.fold(mutableListOf<File>() to mutableListOf<File>()) { (modified, removed), prop -> .fold(mutableListOf<File>() to mutableListOf<File>()) { (modified, removed), prop ->
@@ -346,7 +346,7 @@ abstract class AbstractKotlinCompile<T : CommonCompilerArguments> @Inject constr
modified to removed modified to removed
} }
.run { .run {
ChangedFiles.Known(first, second) SourcesChanges.Known(first, second)
} }
} }