From 1a374efcd10d18d3d2bba1917d561599aaedd05a Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Tue, 11 Nov 2014 19:58:22 +0300 Subject: [PATCH] Fixed KNPE when inline functions/constants are completely removed. --- .../jet/jps/incremental/IncrementalCacheImpl.kt | 10 +++++++++- .../jet/jps/build/IncrementalJpsTestGenerated.java | 12 ++++++++++++ .../pureKotlin/constantRemoved/build.log | 7 +++++++ .../pureKotlin/constantRemoved/const.kt | 3 +++ .../pureKotlin/constantRemoved/const.kt.new | 3 +++ .../pureKotlin/inlineFunctionRemoved/build.log | 14 ++++++++++++++ .../pureKotlin/inlineFunctionRemoved/inline.kt | 6 ++++++ .../pureKotlin/inlineFunctionRemoved/inline.kt.new | 7 +++++++ 8 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 jps-plugin/testData/incremental/pureKotlin/constantRemoved/build.log create mode 100644 jps-plugin/testData/incremental/pureKotlin/constantRemoved/const.kt create mode 100644 jps-plugin/testData/incremental/pureKotlin/constantRemoved/const.kt.new create mode 100644 jps-plugin/testData/incremental/pureKotlin/inlineFunctionRemoved/build.log create mode 100644 jps-plugin/testData/incremental/pureKotlin/inlineFunctionRemoved/inline.kt create mode 100644 jps-plugin/testData/incremental/pureKotlin/inlineFunctionRemoved/inline.kt.new 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 3e449cf1bfa..1cd4b8eb3f4 100644 --- a/jps-plugin/src/org/jetbrains/jet/jps/incremental/IncrementalCacheImpl.kt +++ b/jps-plugin/src/org/jetbrains/jet/jps/incremental/IncrementalCacheImpl.kt @@ -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 } } 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 3c9dc6cc24a..657bdd96262 100644 --- a/jps-plugin/test/org/jetbrains/jet/jps/build/IncrementalJpsTestGenerated.java +++ b/jps-plugin/test/org/jetbrains/jet/jps/build/IncrementalJpsTestGenerated.java @@ -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/"); diff --git a/jps-plugin/testData/incremental/pureKotlin/constantRemoved/build.log b/jps-plugin/testData/incremental/pureKotlin/constantRemoved/build.log new file mode 100644 index 00000000000..8cdfe7c6de1 --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/constantRemoved/build.log @@ -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 diff --git a/jps-plugin/testData/incremental/pureKotlin/constantRemoved/const.kt b/jps-plugin/testData/incremental/pureKotlin/constantRemoved/const.kt new file mode 100644 index 00000000000..1572968f89f --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/constantRemoved/const.kt @@ -0,0 +1,3 @@ +package test + +val CONST = "foo" diff --git a/jps-plugin/testData/incremental/pureKotlin/constantRemoved/const.kt.new b/jps-plugin/testData/incremental/pureKotlin/constantRemoved/const.kt.new new file mode 100644 index 00000000000..c3a4d742273 --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/constantRemoved/const.kt.new @@ -0,0 +1,3 @@ +package test + +val CONST = "I'm not a constant anymore:" + System.currentTimeMillis() diff --git a/jps-plugin/testData/incremental/pureKotlin/inlineFunctionRemoved/build.log b/jps-plugin/testData/incremental/pureKotlin/inlineFunctionRemoved/build.log new file mode 100644 index 00000000000..3e5f9e4f172 --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/inlineFunctionRemoved/build.log @@ -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 \ No newline at end of file diff --git a/jps-plugin/testData/incremental/pureKotlin/inlineFunctionRemoved/inline.kt b/jps-plugin/testData/incremental/pureKotlin/inlineFunctionRemoved/inline.kt new file mode 100644 index 00000000000..80d71e901a3 --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/inlineFunctionRemoved/inline.kt @@ -0,0 +1,6 @@ +package inline + +inline fun f(body: () -> Unit) { + println("i'm inline function") + body() +} diff --git a/jps-plugin/testData/incremental/pureKotlin/inlineFunctionRemoved/inline.kt.new b/jps-plugin/testData/incremental/pureKotlin/inlineFunctionRemoved/inline.kt.new new file mode 100644 index 00000000000..d2c5cd8c63f --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/inlineFunctionRemoved/inline.kt.new @@ -0,0 +1,7 @@ +package inline + +fun f(body: () -> Unit) { + println("i'm not an inline function") + body() +} +