Fixed KNPE when inline functions/constants are completely removed.

This commit is contained in:
Evgeny Gerashchenko
2014-11-11 19:58:22 +03:00
parent c9e5099307
commit 1a374efcd1
8 changed files with 61 additions and 1 deletions
@@ -280,7 +280,12 @@ public class IncrementalCacheImpl(val baseDir: File): StorageOwner, IncrementalC
if (oldMap == constantsMap) {
return false
}
map.put(key, constantsMap)
if (constantsMap != null) {
map.put(key, constantsMap)
}
else {
map.remove(key)
}
return true
}
}
@@ -396,6 +401,9 @@ public class IncrementalCacheImpl(val baseDir: File): StorageOwner, IncrementalC
if (inlineFunctionsMap != null) {
map.put(key, inlineFunctionsMap)
}
else {
map.remove(key)
}
return true
}
}
@@ -135,6 +135,12 @@ public class IncrementalJpsTestGenerated extends AbstractIncrementalJpsTest {
doTest(fileName);
}
@TestMetadata("constantRemoved")
public void testConstantRemoved() throws Exception {
String fileName = JetTestUtils.navigationMetadata("jps-plugin/testData/incremental/pureKotlin/constantRemoved/");
doTest(fileName);
}
@TestMetadata("constantsUnchanged")
public void testConstantsUnchanged() throws Exception {
String fileName = JetTestUtils.navigationMetadata("jps-plugin/testData/incremental/pureKotlin/constantsUnchanged/");
@@ -171,6 +177,12 @@ public class IncrementalJpsTestGenerated extends AbstractIncrementalJpsTest {
doTest(fileName);
}
@TestMetadata("inlineFunctionRemoved")
public void testInlineFunctionRemoved() throws Exception {
String fileName = JetTestUtils.navigationMetadata("jps-plugin/testData/incremental/pureKotlin/inlineFunctionRemoved/");
doTest(fileName);
}
@TestMetadata("inlineFunctionsCircularDependency")
public void testInlineFunctionsCircularDependency() throws Exception {
String fileName = JetTestUtils.navigationMetadata("jps-plugin/testData/incremental/pureKotlin/inlineFunctionsCircularDependency/");
@@ -0,0 +1,7 @@
Cleaning output files:
out/production/module/test/TestPackage$const$*.class
out/production/module/test/TestPackage.class
End of files
Compiling files:
src/const.kt
End of files
@@ -0,0 +1,3 @@
package test
val CONST = "foo"
@@ -0,0 +1,3 @@
package test
val CONST = "I'm not a constant anymore:" + System.currentTimeMillis()
@@ -0,0 +1,14 @@
Cleaning output files:
out/production/module/inline/InlinePackage$inline$*.class
out/production/module/inline/InlinePackage.class
End of files
Compiling files:
src/inline.kt
End of files
Cleaning output files:
out/production/module/inline/InlinePackage$inline$*.class
out/production/module/inline/InlinePackage.class
End of files
Compiling files:
src/inline.kt
End of files
@@ -0,0 +1,6 @@
package inline
inline fun f(body: () -> Unit) {
println("i'm inline function")
body()
}
@@ -0,0 +1,7 @@
package inline
fun f(body: () -> Unit) {
println("i'm not an inline function")
body()
}