From 853def0a10bcdeaf91c8d18452ef6e6cf7ed623b Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Fri, 5 Sep 2014 18:42:16 +0400 Subject: [PATCH] Not clearing incremental cache on compilation error. --- .../org/jetbrains/jet/jps/build/KotlinBuilder.kt | 5 ++++- .../jet/jps/incremental/IncrementalCacheImpl.kt | 10 ++++++---- .../jet/jps/build/AbstractIncrementalJpsTest.kt | 10 ++++++++-- .../jet/jps/build/IncrementalJpsTestGenerated.java | 5 +++++ .../pureKotlin/compilationErrorThenFixed/build.log | 14 ++++++++++++++ .../pureKotlin/compilationErrorThenFixed/fun.kt | 2 ++ .../pureKotlin/compilationErrorThenFixed/usage.kt | 3 +++ .../compilationErrorThenFixed/usage.kt.new.1 | 3 +++ .../compilationErrorThenFixed/usage.kt.new.2 | 3 +++ 9 files changed, 48 insertions(+), 7 deletions(-) create mode 100644 jps-plugin/testData/incremental/pureKotlin/compilationErrorThenFixed/build.log create mode 100644 jps-plugin/testData/incremental/pureKotlin/compilationErrorThenFixed/fun.kt create mode 100644 jps-plugin/testData/incremental/pureKotlin/compilationErrorThenFixed/usage.kt create mode 100644 jps-plugin/testData/incremental/pureKotlin/compilationErrorThenFixed/usage.kt.new.1 create mode 100644 jps-plugin/testData/incremental/pureKotlin/compilationErrorThenFixed/usage.kt.new.2 diff --git a/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinBuilder.kt b/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinBuilder.kt index fdf292e60cf..b8226bd333b 100644 --- a/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinBuilder.kt +++ b/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinBuilder.kt @@ -196,10 +196,13 @@ public class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR } } + val compilationErrors = Utils.ERRORS_DETECTED_KEY[context, false] + for ((target, cache) in incrementalCaches) { cache.clearCacheForRemovedFiles( KotlinSourceFileCollector.getRemovedKotlinFiles(dirtyFilesHolder, target), - target.getOutputDir()!! + target.getOutputDir()!!, + !compilationErrors ) } diff --git a/jps-plugin/src/org/jetbrains/jet/jps/incremental/IncrementalCacheImpl.kt b/jps-plugin/src/org/jetbrains/jet/jps/incremental/IncrementalCacheImpl.kt index 484a0b51c86..3981390a3f1 100644 --- a/jps-plugin/src/org/jetbrains/jet/jps/incremental/IncrementalCacheImpl.kt +++ b/jps-plugin/src/org/jetbrains/jet/jps/incremental/IncrementalCacheImpl.kt @@ -96,12 +96,14 @@ public class IncrementalCacheImpl(val baseDir: File): StorageOwner, IncrementalC return DO_NOTHING } - public fun clearCacheForRemovedFiles(removedSourceFiles: Collection, outDirectory: File) { + public fun clearCacheForRemovedFiles(removedSourceFiles: Collection, outDirectory: File, compilationSuccessful: Boolean) { removedSourceFiles.forEach { packagePartMap.remove(it) } - inlineFunctionsMap.clearOutdated(outDirectory) - constantsMap.clearOutdated(outDirectory) - protoMap.clearOutdated(outDirectory) + if (compilationSuccessful) { + inlineFunctionsMap.clearOutdated(outDirectory) + constantsMap.clearOutdated(outDirectory) + protoMap.clearOutdated(outDirectory) + } } public override fun getRemovedPackageParts(compiledSourceFilesToFqName: Map): Collection { diff --git a/jps-plugin/test/org/jetbrains/jet/jps/build/AbstractIncrementalJpsTest.kt b/jps-plugin/test/org/jetbrains/jet/jps/build/AbstractIncrementalJpsTest.kt index b66c42386ff..408760e6c0c 100644 --- a/jps-plugin/test/org/jetbrains/jet/jps/build/AbstractIncrementalJpsTest.kt +++ b/jps-plugin/test/org/jetbrains/jet/jps/build/AbstractIncrementalJpsTest.kt @@ -32,6 +32,7 @@ import org.jetbrains.jps.builders.impl.BuildDataPathsImpl import kotlin.test.fail import java.util.HashMap import org.jetbrains.jet.utils.keysToMap +import org.jetbrains.jps.incremental.messages.BuildMessage public abstract class AbstractIncrementalJpsTest : JpsBuildTestCase() { private var testDataDir: File by Delegates.notNull() @@ -52,8 +53,13 @@ public abstract class AbstractIncrementalJpsTest : JpsBuildTestCase() { val logger = MyLogger(FileUtil.toSystemIndependentName(workDir.getAbsolutePath())) val descriptor = createProjectDescriptor(BuildLoggingManager(logger)) try { - doBuild(descriptor, scope)!!.assertSuccessful() - return logger.log + val buildResult = doBuild(descriptor, scope)!! + if (!buildResult.isSuccessful()) { + return logger.log + "COMPILATION FAILED\n" + buildResult.getMessages(BuildMessage.Kind.ERROR).joinToString("\n") + "\n" + } + else { + return logger.log + } } finally { descriptor.release() } diff --git a/jps-plugin/test/org/jetbrains/jet/jps/build/IncrementalJpsTestGenerated.java b/jps-plugin/test/org/jetbrains/jet/jps/build/IncrementalJpsTestGenerated.java index 8dc9e5b2174..48aebb81e5e 100644 --- a/jps-plugin/test/org/jetbrains/jet/jps/build/IncrementalJpsTestGenerated.java +++ b/jps-plugin/test/org/jetbrains/jet/jps/build/IncrementalJpsTestGenerated.java @@ -119,6 +119,11 @@ public class IncrementalJpsTestGenerated extends AbstractIncrementalJpsTest { doTest(fileName); } + @TestMetadata("compilationErrorThenFixed") + public void testCompilationErrorThenFixed() throws Exception { + doTest("jps-plugin/testData/incremental/pureKotlin/compilationErrorThenFixed/"); + } + @TestMetadata("constantsUnchanged") public void testConstantsUnchanged() throws Exception { String fileName = JetTestUtils.navigationMetadata("jps-plugin/testData/incremental/pureKotlin/constantsUnchanged/"); diff --git a/jps-plugin/testData/incremental/pureKotlin/compilationErrorThenFixed/build.log b/jps-plugin/testData/incremental/pureKotlin/compilationErrorThenFixed/build.log new file mode 100644 index 00000000000..f4fb938c215 --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/compilationErrorThenFixed/build.log @@ -0,0 +1,14 @@ +Cleaning output files: +out/production/module/_DefaultPackage-usage-*.class +out/production/module/_DefaultPackage.class +End of files +Compiling files: +src/usage.kt +End of files +COMPILATION FAILED +Kotlin:ERROR:Expecting an expression + + +Compiling files: +src/usage.kt +End of files diff --git a/jps-plugin/testData/incremental/pureKotlin/compilationErrorThenFixed/fun.kt b/jps-plugin/testData/incremental/pureKotlin/compilationErrorThenFixed/fun.kt new file mode 100644 index 00000000000..99cec0dbea1 --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/compilationErrorThenFixed/fun.kt @@ -0,0 +1,2 @@ +fun f() { +} \ No newline at end of file diff --git a/jps-plugin/testData/incremental/pureKotlin/compilationErrorThenFixed/usage.kt b/jps-plugin/testData/incremental/pureKotlin/compilationErrorThenFixed/usage.kt new file mode 100644 index 00000000000..05a6473592e --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/compilationErrorThenFixed/usage.kt @@ -0,0 +1,3 @@ +fun main(args: Array) { + f() +} \ No newline at end of file diff --git a/jps-plugin/testData/incremental/pureKotlin/compilationErrorThenFixed/usage.kt.new.1 b/jps-plugin/testData/incremental/pureKotlin/compilationErrorThenFixed/usage.kt.new.1 new file mode 100644 index 00000000000..c7eec515ee8 --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/compilationErrorThenFixed/usage.kt.new.1 @@ -0,0 +1,3 @@ +fun main(args: Array) { + f( +} \ No newline at end of file diff --git a/jps-plugin/testData/incremental/pureKotlin/compilationErrorThenFixed/usage.kt.new.2 b/jps-plugin/testData/incremental/pureKotlin/compilationErrorThenFixed/usage.kt.new.2 new file mode 100644 index 00000000000..05a6473592e --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/compilationErrorThenFixed/usage.kt.new.2 @@ -0,0 +1,3 @@ +fun main(args: Array) { + f() +} \ No newline at end of file