From e33611a88ae9dc96ef9b34f0eb47ecf11192e671 Mon Sep 17 00:00:00 2001 From: "Alexander.Likhachev" Date: Mon, 27 Mar 2023 15:03:21 +0200 Subject: [PATCH] [IC] Allow to not specify the build history file --- .../daemon/common/CompilationOptions.kt | 2 +- .../kotlin/daemon/CompileServiceImpl.kt | 17 +++++++------ .../incremental/IncrementalCompilerRunner.kt | 25 +++++++++++-------- .../IncrementalFirJvmCompilerRunner.kt | 2 +- .../IncrementalJsCompilerRunner.kt | 5 +++- .../IncrementalJvmCompilerRunner.kt | 7 ++++-- 6 files changed, 34 insertions(+), 24 deletions(-) diff --git a/compiler/daemon/daemon-common/src/org/jetbrains/kotlin/daemon/common/CompilationOptions.kt b/compiler/daemon/daemon-common/src/org/jetbrains/kotlin/daemon/common/CompilationOptions.kt index 6740a0bbfc7..35da79dbe1b 100644 --- a/compiler/daemon/daemon-common/src/org/jetbrains/kotlin/daemon/common/CompilationOptions.kt +++ b/compiler/daemon/daemon-common/src/org/jetbrains/kotlin/daemon/common/CompilationOptions.kt @@ -68,7 +68,7 @@ class IncrementalCompilationOptions( * Directories that should be cleared when IC decides to rebuild */ val outputFiles: List, - val multiModuleICSettings: MultiModuleICSettings, + val multiModuleICSettings: MultiModuleICSettings? = null, val modulesInfo: IncrementalModuleInfo, kotlinScriptExtensions: Array? = null, val withAbiSnapshot: Boolean = false, diff --git a/compiler/daemon/src/org/jetbrains/kotlin/daemon/CompileServiceImpl.kt b/compiler/daemon/src/org/jetbrains/kotlin/daemon/CompileServiceImpl.kt index ef6888ab0f8..b785558760e 100644 --- a/compiler/daemon/src/org/jetbrains/kotlin/daemon/CompileServiceImpl.kt +++ b/compiler/daemon/src/org/jetbrains/kotlin/daemon/CompileServiceImpl.kt @@ -55,6 +55,7 @@ import org.jetbrains.kotlin.incremental.components.InlineConstTracker import org.jetbrains.kotlin.incremental.components.LookupTracker import org.jetbrains.kotlin.incremental.js.IncrementalDataProvider import org.jetbrains.kotlin.incremental.js.IncrementalResultsConsumer +import org.jetbrains.kotlin.incremental.multiproject.EmptyModulesApiHistory import org.jetbrains.kotlin.incremental.multiproject.ModulesApiHistoryAndroid import org.jetbrains.kotlin.incremental.multiproject.ModulesApiHistoryJs import org.jetbrains.kotlin.incremental.multiproject.ModulesApiHistoryJvm @@ -560,7 +561,7 @@ abstract class CompileServiceImplBase( val compiler = IncrementalJsCompilerRunner( workingDir = workingDir, reporter = reporter, - buildHistoryFile = incrementalCompilationOptions.multiModuleICSettings.buildHistoryFile, + buildHistoryFile = incrementalCompilationOptions.multiModuleICSettings?.buildHistoryFile, scopeExpansion = if (args.isIrBackendEnabled()) CompileScopeExpansionMode.ALWAYS else CompileScopeExpansionMode.NEVER, modulesApiHistory = modulesApiHistory, withAbiSnapshot = incrementalCompilationOptions.withAbiSnapshot, @@ -605,15 +606,15 @@ abstract class CompileServiceImplBase( val workingDir = incrementalCompilationOptions.workingDir - val modulesApiHistory = incrementalCompilationOptions.run { - reporter.info { "Use module detection: ${multiModuleICSettings.useModuleDetection}" } + val modulesApiHistory = incrementalCompilationOptions.multiModuleICSettings?.run { + reporter.info { "Use module detection: ${useModuleDetection}" } - if (!multiModuleICSettings.useModuleDetection) { - ModulesApiHistoryJvm(modulesInfo) + if (!useModuleDetection) { + ModulesApiHistoryJvm(incrementalCompilationOptions.modulesInfo) } else { - ModulesApiHistoryAndroid(modulesInfo) + ModulesApiHistoryAndroid(incrementalCompilationOptions.modulesInfo) } - } + } ?: EmptyModulesApiHistory val projectRoot = incrementalCompilationOptions.modulesInfo.projectRoot val useK2 = k2jvmArgs.useK2 || LanguageVersion.fromVersionString(k2jvmArgs.languageVersion)?.usesK2 == true @@ -624,7 +625,7 @@ abstract class CompileServiceImplBase( val compiler = IncrementalJvmCompilerRunner( workingDir, reporter, - buildHistoryFile = incrementalCompilationOptions.multiModuleICSettings.buildHistoryFile, + buildHistoryFile = incrementalCompilationOptions.multiModuleICSettings?.buildHistoryFile, outputDirs = incrementalCompilationOptions.outputFiles, usePreciseJavaTracking = usePreciseJavaTracking, modulesApiHistory = modulesApiHistory, diff --git a/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalCompilerRunner.kt b/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalCompilerRunner.kt index aa5f95fa6a3..2c75cecc090 100644 --- a/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalCompilerRunner.kt +++ b/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalCompilerRunner.kt @@ -54,7 +54,7 @@ abstract class IncrementalCompilerRunner< private val workingDir: File, cacheDirName: String, protected val reporter: BuildReporter, - protected val buildHistoryFile: File, + protected val buildHistoryFile: File?, /** * Output directories of the compilation. These include: @@ -416,7 +416,7 @@ abstract class IncrementalCompilerRunner< reporter.measure(GradleBuildTime.CALCULATE_OUTPUT_SIZE) { reporter.addMetric( GradleBuildPerformanceMetric.SNAPSHOT_SIZE, - buildHistoryFile.length() + lastBuildInfoFile.length() + abiSnapshotFile.length() + (buildHistoryFile?.length() ?: 0) + lastBuildInfoFile.length() + abiSnapshotFile.length() ) reporter.addMetric(GradleBuildPerformanceMetric.CACHE_DIRECTORY_SIZE, cacheDirectory.walk().sumOf { it.length() }) } @@ -608,16 +608,19 @@ abstract class IncrementalCompilerRunner< compilationMode: CompilationMode, currentBuildInfo: BuildInfo, dirtyData: DirtyData, - ) = reporter.measure(GradleBuildTime.IC_WRITE_HISTORY_FILE) { - val prevDiffs = BuildDiffsStorage.readFromFile(buildHistoryFile, reporter)?.buildDiffs ?: emptyList() - val newDiff = if (compilationMode is CompilationMode.Incremental) { - BuildDifference(currentBuildInfo.startTS, true, dirtyData) - } else { - val emptyDirtyData = DirtyData() - BuildDifference(currentBuildInfo.startTS, false, emptyDirtyData) - } + ) { + if (buildHistoryFile == null) return + reporter.measure(GradleBuildTime.IC_WRITE_HISTORY_FILE) { + val prevDiffs = BuildDiffsStorage.readFromFile(buildHistoryFile, reporter)?.buildDiffs ?: emptyList() + val newDiff = if (compilationMode is CompilationMode.Incremental) { + BuildDifference(currentBuildInfo.startTS, true, dirtyData) + } else { + val emptyDirtyData = DirtyData() + BuildDifference(currentBuildInfo.startTS, false, emptyDirtyData) + } - BuildDiffsStorage.writeToFile(icContext, buildHistoryFile, BuildDiffsStorage(prevDiffs + newDiff)) + BuildDiffsStorage.writeToFile(icContext, buildHistoryFile, BuildDiffsStorage(prevDiffs + newDiff)) + } } companion object { diff --git a/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalFirJvmCompilerRunner.kt b/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalFirJvmCompilerRunner.kt index 16dd7a35287..6f7988a3db7 100644 --- a/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalFirJvmCompilerRunner.kt +++ b/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalFirJvmCompilerRunner.kt @@ -64,7 +64,7 @@ import java.io.File open class IncrementalFirJvmCompilerRunner( workingDir: File, reporter: BuildReporter, - buildHistoryFile: File, + buildHistoryFile: File?, outputDirs: Collection?, modulesApiHistory: ModulesApiHistory, kotlinSourceFilesExtensions: List = DEFAULT_KOTLIN_SOURCE_FILES_EXTENSIONS, diff --git a/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalJsCompilerRunner.kt b/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalJsCompilerRunner.kt index 1f96c17540e..81120d88e56 100644 --- a/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalJsCompilerRunner.kt +++ b/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalJsCompilerRunner.kt @@ -86,7 +86,7 @@ inline fun withJsIC(args: CommonCompilerArguments, enabled: Boolean = true, class IncrementalJsCompilerRunner( workingDir: File, reporter: BuildReporter, - buildHistoryFile: File, + buildHistoryFile: File?, private val modulesApiHistory: ModulesApiHistory, private val scopeExpansion: CompileScopeExpansionMode = CompileScopeExpansionMode.NEVER, withAbiSnapshot: Boolean = false, @@ -125,6 +125,9 @@ class IncrementalJsCompilerRunner( messageCollector: MessageCollector, classpathAbiSnapshots: Map //Ignore for now ): CompilationMode { + if (buildHistoryFile == null) { + error("The build is configured to use the build-history based IC approach, but doesn't specify the buildHistoryFile") + } if (!withAbiSnapshot && !buildHistoryFile.isFile) { return CompilationMode.Rebuild(BuildAttribute.NO_BUILD_HISTORY) } diff --git a/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalJvmCompilerRunner.kt b/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalJvmCompilerRunner.kt index c1cabe901af..4f8d6868d1c 100644 --- a/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalJvmCompilerRunner.kt +++ b/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalJvmCompilerRunner.kt @@ -63,7 +63,7 @@ open class IncrementalJvmCompilerRunner( workingDir: File, reporter: BuildReporter, private val usePreciseJavaTracking: Boolean, - buildHistoryFile: File, + buildHistoryFile: File?, outputDirs: Collection?, private val modulesApiHistory: ModulesApiHistory, override val kotlinSourceFilesExtensions: List = DEFAULT_KOTLIN_SOURCE_FILES_EXTENSIONS, @@ -207,7 +207,10 @@ open class IncrementalJvmCompilerRunner( is NotAvailableDueToMissingClasspathSnapshot -> ChangesEither.Unknown(BuildAttribute.CLASSPATH_SNAPSHOT_NOT_FOUND) is NotAvailableForNonIncrementalRun -> ChangesEither.Unknown(BuildAttribute.UNKNOWN_CHANGES_IN_GRADLE_INPUTS) is ClasspathSnapshotDisabled -> reporter.measure(GradleBuildTime.IC_ANALYZE_CHANGES_IN_DEPENDENCIES) { - if (!withAbiSnapshot && !buildHistoryFile.isFile) { + if (buildHistoryFile == null) { + error("The build is configured to use the build-history based IC approach, but doesn't specify the buildHistoryFile") + } + if (!withAbiSnapshot && buildHistoryFile.isFile != true) { // If the previous build was a Gradle cache hit, the build history file must have been deleted as it is marked as // @LocalState in the Gradle task. Therefore, this compilation will need to run non-incrementally. // (Note that buildHistoryFile is outside workingDir. We don't need to perform the same check for files inside