From 2ffb0abb590abb8838a553463c670cbe3b65d4d2 Mon Sep 17 00:00:00 2001 From: Alexey Tsvetkov Date: Fri, 28 Oct 2016 21:40:37 +0300 Subject: [PATCH] Fix caches closing/flushing when IC builds non-incrementally --- .../incremental/IncrementalCachesManager.kt | 46 +++++++++++-------- .../IncrementalJvmCompilerRunner.kt | 7 +-- 2 files changed, 30 insertions(+), 23 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/incremental/IncrementalCachesManager.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/incremental/IncrementalCachesManager.kt index 6aa1ec84fcb..b0bb9f95fc6 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/incremental/IncrementalCachesManager.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/incremental/IncrementalCachesManager.kt @@ -26,20 +26,26 @@ internal class IncrementalCachesManager ( ) { private val incrementalCacheDir = File(cacheDirectory, "increCache.${targetId.name}") private val lookupCacheDir = File(cacheDirectory, "lookups") - private var incrementalCacheOpen = false - private var lookupCacheOpen = false + private var incrementalCacheField: GradleIncrementalCacheImpl? = null + private var lookupCacheField: LookupStorage? = null - val incrementalCache: GradleIncrementalCacheImpl by lazy { - val cache = GradleIncrementalCacheImpl(targetDataRoot = incrementalCacheDir.apply { mkdirs() }, targetOutputDir = outputDir, target = targetId) - incrementalCacheOpen = true - cache - } + val incrementalCache: GradleIncrementalCacheImpl + get() { + if (incrementalCacheField == null) { + incrementalCacheField = GradleIncrementalCacheImpl(targetDataRoot = incrementalCacheDir.apply { mkdirs() }, targetOutputDir = outputDir, target = targetId) + } - val lookupCache: LookupStorage by lazy { - val cache = LookupStorage(lookupCacheDir.apply { mkdirs() }) - lookupCacheOpen = true - cache - } + return incrementalCacheField!! + } + + val lookupCache: LookupStorage + get() { + if (lookupCacheField == null) { + lookupCacheField = LookupStorage(lookupCacheDir.apply { mkdirs() }) + } + + return lookupCacheField!! + } fun clean() { close(flush = false) @@ -47,20 +53,20 @@ internal class IncrementalCachesManager ( } fun close(flush: Boolean = false) { - if (incrementalCacheOpen) { + incrementalCacheField?.let { if (flush) { - incrementalCache.flush(false) + it.flush(false) } - incrementalCache.close() - incrementalCacheOpen = false + it.close() + incrementalCacheField = null } - if (lookupCacheOpen) { + lookupCacheField?.let { if (flush) { - lookupCache.flush(false) + it.flush(false) } - lookupCache.close() - lookupCacheOpen = false + it.close() + lookupCacheField = null } } } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/incremental/IncrementalJvmCompilerRunner.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/incremental/IncrementalJvmCompilerRunner.kt index e7f1813ed5b..db6709f1310 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/incremental/IncrementalJvmCompilerRunner.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/incremental/IncrementalJvmCompilerRunner.kt @@ -132,7 +132,7 @@ internal class IncrementalJvmCompilerRunner( return try { val javaFilesProcessor = ChangedJavaFilesProcessor() val changedFiles = getChangedFiles(caches) - val compilationMode = calculateSourcesToCompile(javaFilesProcessor, caches, changedFiles, args.classpathAsList) + val compilationMode = calculateSourcesToCompile(javaFilesProcessor, caches, changedFiles, args) compileIncrementally(args, caches, javaFilesProcessor, allKotlinSources, targetId, compilationMode, messageCollector) } catch (e: PersistentEnumeratorBase.CorruptedException) { @@ -161,12 +161,13 @@ internal class IncrementalJvmCompilerRunner( javaFilesProcessor: ChangedJavaFilesProcessor, caches: IncrementalCachesManager, changedFiles: ChangedFiles, - classpath: Iterable + args: K2JVMCompilerArguments ): CompilationMode { fun rebuild(reason: ()->String): CompilationMode { reporter.report {"Non-incremental compilation will be performed: ${reason()}"} caches.clean() dirtySourcesSinceLastTimeFile.delete() + args.destinationAsFile.deleteRecursively() return CompilationMode.Rebuild } @@ -178,7 +179,7 @@ internal class IncrementalJvmCompilerRunner( val modifiedClassFiles = changedFiles.modified.filter(File::isClassFile) if (modifiedClassFiles.any()) return rebuild {"Modified class files: ${reporter.pathsAsString(modifiedClassFiles)}"} - val classpathSet = classpath.toHashSet() + val classpathSet = args.classpathAsList.toHashSet() val modifiedClasspathEntries = changedFiles.modified.filter {it in classpathSet} val lastBuildInfo = BuildInfo.read(lastBuildInfoFile) reporter.report { "Last Kotlin Build info -- $lastBuildInfo" }