Not clearing incremental cache on compilation error.

This commit is contained in:
Evgeny Gerashchenko
2014-09-05 18:42:16 +04:00
parent 040d1693e8
commit 853def0a10
9 changed files with 48 additions and 7 deletions
@@ -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
)
}
@@ -96,12 +96,14 @@ public class IncrementalCacheImpl(val baseDir: File): StorageOwner, IncrementalC
return DO_NOTHING
}
public fun clearCacheForRemovedFiles(removedSourceFiles: Collection<String>, outDirectory: File) {
public fun clearCacheForRemovedFiles(removedSourceFiles: Collection<String>, 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<File, String>): Collection<String> {
@@ -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()
}
@@ -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/");
@@ -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
@@ -0,0 +1,2 @@
fun f() {
}
@@ -0,0 +1,3 @@
fun main(args: Array<String>) {
f()
}
@@ -0,0 +1,3 @@
fun main(args: Array<String>) {
f(
}
@@ -0,0 +1,3 @@
fun main(args: Array<String>) {
f()
}