From dfe176efca992db83224659ed30cf6eaf5da1be6 Mon Sep 17 00:00:00 2001 From: Alexey Tsvetkov Date: Fri, 1 Dec 2017 22:08:52 +0300 Subject: [PATCH] Avoid computing source files changes in IC for Gradle --- .../kotlin/daemon/CompileServiceImpl.kt | 6 +++--- .../incremental/IncrementalCompilerRunner.kt | 18 +++++++++++------- .../incremental/IncrementalJsCompilerRunner.kt | 4 +--- .../IncrementalJvmCompilerRunner.kt | 5 +---- 4 files changed, 16 insertions(+), 17 deletions(-) diff --git a/compiler/daemon/src/org/jetbrains/kotlin/daemon/CompileServiceImpl.kt b/compiler/daemon/src/org/jetbrains/kotlin/daemon/CompileServiceImpl.kt index 1f3236c01fd..057cb961bc2 100644 --- a/compiler/daemon/src/org/jetbrains/kotlin/daemon/CompileServiceImpl.kt +++ b/compiler/daemon/src/org/jetbrains/kotlin/daemon/CompileServiceImpl.kt @@ -453,8 +453,8 @@ class CompileServiceImpl( workingDir, enabled = true) - return IncrementalJsCompilerRunner(workingDir, versions, reporter) - .compile(allKotlinFiles, args, compilerMessageCollector, { changedFiles }) + val compiler = IncrementalJsCompilerRunner(workingDir, versions, reporter) + return compiler.compile(allKotlinFiles, args, compilerMessageCollector, changedFiles) } private fun execIncrementalCompiler( @@ -514,7 +514,7 @@ class CompileServiceImpl( friendBuildHistoryFile = incrementalCompilationOptions.friendDifferenceFile, usePreciseJavaTracking = incrementalCompilationOptions.usePreciseJavaTracking ) - return compiler.compile(allKotlinFiles, k2jvmArgs, compilerMessageCollector, { changedFiles }) + return compiler.compile(allKotlinFiles, k2jvmArgs, compilerMessageCollector, changedFiles) } override fun leaseReplSession( 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 a8f3db6567b..22f9e17142a 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,10 +54,12 @@ abstract class IncrementalCompilerRunner< protected abstract fun destinationDir(args: Args): File fun compile( - allKotlinSources: List, + allSourceFiles: List, args: Args, messageCollector: MessageCollector, - getChangedFiles: (CacheManager)-> ChangedFiles + // when [providedChangedFiles] is not null, changes are provided by external system (e.g. Gradle) + // otherwise we track source files changes ourselves. + providedChangedFiles: ChangedFiles? ): ExitCode { assert(isICEnabled()) { "Incremental compilation is not enabled" } var caches = createCacheManager(args) @@ -70,18 +72,20 @@ abstract class IncrementalCompilerRunner< destinationDir(args).deleteRecursively() caches = createCacheManager(args) - // todo more optimal fix - caches.inputsCache.sourceSnapshotMap.compareAndUpdate(allKotlinSources) - return compileIncrementally(args, caches, allKotlinSources, CompilationMode.Rebuild(), messageCollector) + if (providedChangedFiles == null) { + caches.inputsCache.sourceSnapshotMap.compareAndUpdate(allSourceFiles) + } + val allKotlinFiles = allSourceFiles.filter { it.isKotlinFile() } + return compileIncrementally(args, caches, allKotlinFiles, CompilationMode.Rebuild(), messageCollector) } return try { - val changedFiles = getChangedFiles(caches) + val changedFiles = providedChangedFiles ?: caches.inputsCache.sourceSnapshotMap.compareAndUpdate(allSourceFiles) val compilationMode = sourcesToCompile(caches, changedFiles, args) val exitCode = when (compilationMode) { is CompilationMode.Incremental -> { - compileIncrementally(args, caches, allKotlinSources, compilationMode, messageCollector) + compileIncrementally(args, caches, allSourceFiles, compilationMode, messageCollector) } is CompilationMode.Rebuild -> { rebuild { "Non-incremental compilation will be performed: ${compilationMode.reason}" } 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 24014ad0f22..b40bd835f03 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 @@ -41,9 +41,7 @@ fun makeJsIncrementally( withJsIC { val compiler = IncrementalJsCompilerRunner(cachesDir, versions, reporter) - compiler.compile(allKotlinFiles, args, messageCollector) { - it.inputsCache.sourceSnapshotMap.compareAndUpdate(allKotlinFiles) - } + compiler.compile(allKotlinFiles, args, messageCollector, providedChangedFiles = null) } } 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 24472ada58b..1cc4c5bed34 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,6 @@ fun makeIncrementally( val rootsWalk = sourceRoots.asSequence().flatMap { it.walk() } val files = rootsWalk.filter(File::isFile) val sourceFiles = files.filter { it.extension.toLowerCase() in allExtensions }.toList() - val kotlinFiles = sourceFiles.filter { it.extension.toLowerCase() in kotlinExtensions } withIC { val compiler = IncrementalJvmCompilerRunner( @@ -73,9 +72,7 @@ fun makeIncrementally( // Use precise setting in case of non-Gradle build usePreciseJavaTracking = true ) - compiler.compile(kotlinFiles, args, messageCollector) { - it.inputsCache.sourceSnapshotMap.compareAndUpdate(sourceFiles) - } + compiler.compile(sourceFiles, args, messageCollector, providedChangedFiles = null) } }