Correctly processing disappeared protos, files with constants/inline function.

Original commit: c5593a5b80
This commit is contained in:
Evgeny Gerashchenko
2015-02-05 16:06:37 +03:00
parent 618e37a080
commit 8d02c74ddd
12 changed files with 90 additions and 3 deletions
@@ -289,7 +289,10 @@ public class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR
}
if (!compilationErrors) {
incrementalCaches.values().forEach { it.clearCacheForRemovedClasses() }
incrementalCaches.values().forEach {
val newDecision = it.clearCacheForRemovedClasses()
recompilationDecision = recompilationDecision.merge(newDecision)
}
}
return recompilationDecision
@@ -176,15 +176,26 @@ public class IncrementalCacheImpl(targetDataRoot: File) : StorageOwner, Incremen
return DO_NOTHING
}
public fun clearCacheForRemovedClasses() {
public fun clearCacheForRemovedClasses(): RecompilationDecision {
var recompilationDecision = DO_NOTHING
for (internalClassName in dirtyOutputClassesMap.getDirtyOutputClasses()) {
val className = JvmClassName.byInternalName(internalClassName)
val newDecision = when {
internalClassName in inlineFunctionsMap -> RECOMPILE_ALL_CHUNK_AND_DEPENDANTS
internalClassName in constantsMap -> RECOMPILE_OTHERS_WITH_DEPENDANTS
internalClassName in protoMap -> RECOMPILE_OTHERS_IN_CHUNK
else -> DO_NOTHING
}
recompilationDecision = recompilationDecision.merge(newDecision)
protoMap.remove(className)
packagePartMap.remove(className)
constantsMap.remove(className)
inlineFunctionsMap.remove(className)
}
dirtyOutputClassesMap.clear()
return recompilationDecision
}
public override fun getObsoletePackageParts(): Collection<String> {
@@ -213,6 +224,8 @@ public class IncrementalCacheImpl(targetDataRoot: File) : StorageOwner, Incremen
protected abstract fun createMap(): PersistentHashMap<String, V>
public fun contains(key: String): Boolean = storage.containsMapping(key)
public fun clean() {
try {
storage.close()
@@ -225,6 +225,18 @@ public class IncrementalJpsTestGenerated extends AbstractIncrementalJpsTest {
doTest(fileName);
}
@TestMetadata("fileWithConstantRemoved")
public void testFileWithConstantRemoved() throws Exception {
String fileName = JetTestUtils.navigationMetadata("jps-plugin/testData/incremental/pureKotlin/fileWithConstantRemoved/");
doTest(fileName);
}
@TestMetadata("fileWithInlineFunctionRemoved")
public void testFileWithInlineFunctionRemoved() throws Exception {
String fileName = JetTestUtils.navigationMetadata("jps-plugin/testData/incremental/pureKotlin/fileWithInlineFunctionRemoved/");
doTest(fileName);
}
@TestMetadata("filesExchangePackages")
public void testFilesExchangePackages() throws Exception {
String fileName = JetTestUtils.navigationMetadata("jps-plugin/testData/incremental/pureKotlin/filesExchangePackages/");
@@ -3,6 +3,13 @@ out/production/module/test/A.class
End of files
Compiling files:
End of files
Cleaning output files:
out/production/module/test/TestPackage$other$*.class
out/production/module/test/TestPackage.class
End of files
Compiling files:
src/other.kt
End of files
Compiling files:
@@ -14,4 +21,4 @@ out/production/module/test/TestPackage.class
End of files
Compiling files:
src/other.kt
End of files
End of files
@@ -0,0 +1,16 @@
Cleaning output files:
out/production/module/test/TestPackage$const$*.class
out/production/module/test/TestPackage.class
End of files
Compiling files:
End of files
Cleaning output files:
out/production/module/usage/UsagePackage$usage$*.class
out/production/module/usage/UsagePackage.class
End of files
Compiling files:
src/usage.kt
End of files
COMPILATION FAILED
Unresolved reference: test
An annotation parameter must be a compile-time constant
@@ -0,0 +1,3 @@
package test
val CONST = "foo"
@@ -0,0 +1,5 @@
package usage
deprecated(test.CONST)
val usage = ""
@@ -0,0 +1,15 @@
Cleaning output files:
out/production/module/inline/InlinePackage$inline$*.class
out/production/module/inline/InlinePackage.class
End of files
Compiling files:
End of files
Cleaning output files:
out/production/module/usage/UsagePackage$usage$*.class
out/production/module/usage/UsagePackage.class
End of files
Compiling files:
src/usage.kt
End of files
COMPILATION FAILED
Unresolved reference: f
@@ -0,0 +1,6 @@
package inline
inline fun f(body: () -> Unit) {
println("i'm inline function")
body()
}
@@ -0,0 +1,7 @@
package usage
fun main(args: Array<String>) {
inline.f {
println("to be inlined")
}
}