Avoid computing source files changes in IC for Gradle

This commit is contained in:
Alexey Tsvetkov
2017-12-01 22:08:52 +03:00
parent 5a8c0f8f42
commit dfe176efca
4 changed files with 16 additions and 17 deletions
@@ -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(
@@ -54,10 +54,12 @@ abstract class IncrementalCompilerRunner<
protected abstract fun destinationDir(args: Args): File
fun compile(
allKotlinSources: List<File>,
allSourceFiles: List<File>,
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}" }
@@ -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)
}
}
@@ -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)
}
}