diff --git a/jps/jps-plugin/src/org/jetbrains/jet/jps/incremental/IncrementalCacheImpl.kt b/jps/jps-plugin/src/org/jetbrains/jet/jps/incremental/IncrementalCacheImpl.kt index fb39e516805..9d5c2310fb1 100644 --- a/jps/jps-plugin/src/org/jetbrains/jet/jps/incremental/IncrementalCacheImpl.kt +++ b/jps/jps-plugin/src/org/jetbrains/jet/jps/incremental/IncrementalCacheImpl.kt @@ -190,7 +190,8 @@ public class IncrementalCacheImpl(val baseDir: File): IncrementalCache { ClassReader(bytes).accept(object : ClassVisitor(Opcodes.ASM5) { override fun visitField(access: Int, name: String, desc: String, signature: String?, value: Any?): FieldVisitor? { - if (value != null) { + val staticFinal = Opcodes.ACC_STATIC or Opcodes.ACC_FINAL + if (value != null && access and staticFinal == staticFinal) { result[name] = value } return null diff --git a/jps/jps-plugin/test/org/jetbrains/jet/jps/build/IncrementalJpsTestGenerated.java b/jps/jps-plugin/test/org/jetbrains/jet/jps/build/IncrementalJpsTestGenerated.java index c27e8be304e..563e591d52e 100644 --- a/jps/jps-plugin/test/org/jetbrains/jet/jps/build/IncrementalJpsTestGenerated.java +++ b/jps/jps-plugin/test/org/jetbrains/jet/jps/build/IncrementalJpsTestGenerated.java @@ -116,6 +116,11 @@ public class IncrementalJpsTestGenerated extends AbstractIncrementalJpsTest { doTest("jps-plugin/testData/incremental/multiplePackagesModified/"); } + @TestMetadata("objectValChanged") + public void testObjectValChanged() throws Exception { + doTest("jps-plugin/testData/incremental/objectValChanged/"); + } + @TestMetadata("ourClassReferenced") public void testOurClassReferenced() throws Exception { doTest("jps-plugin/testData/incremental/ourClassReferenced/"); @@ -206,4 +211,9 @@ public class IncrementalJpsTestGenerated extends AbstractIncrementalJpsTest { doTest("jps-plugin/testData/incremental/topLevelMembersInTwoFiles/"); } + @TestMetadata("traitClassObjectConstantChanged") + public void testTraitClassObjectConstantChanged() throws Exception { + doTest("jps-plugin/testData/incremental/traitClassObjectConstantChanged/"); + } + } diff --git a/jps/jps-plugin/testData/incremental/objectValChanged/build.log b/jps/jps-plugin/testData/incremental/objectValChanged/build.log new file mode 100644 index 00000000000..388e9c57d12 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/objectValChanged/build.log @@ -0,0 +1,6 @@ +Cleaning output files: +out/production/module/test/Object.class +End of files +Compiling files: +src/const.kt +End of files \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/objectValChanged/const.kt b/jps/jps-plugin/testData/incremental/objectValChanged/const.kt new file mode 100644 index 00000000000..3f27946befb --- /dev/null +++ b/jps/jps-plugin/testData/incremental/objectValChanged/const.kt @@ -0,0 +1,6 @@ +package test + +object Object { + // Value is changed, but we don't care, it is not compile-time constant, and therefore can't be inlined + val CONST = "old" +} diff --git a/jps/jps-plugin/testData/incremental/objectValChanged/const.kt.new b/jps/jps-plugin/testData/incremental/objectValChanged/const.kt.new new file mode 100644 index 00000000000..19580fc7c09 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/objectValChanged/const.kt.new @@ -0,0 +1,6 @@ +package test + +object Object { + // Value is changed, but we don't care, it is not compile-time constant, and therefore can't be inlined + val CONST = "new" +} diff --git a/jps/jps-plugin/testData/incremental/objectValChanged/usage.kt b/jps/jps-plugin/testData/incremental/objectValChanged/usage.kt new file mode 100644 index 00000000000..581511cf244 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/objectValChanged/usage.kt @@ -0,0 +1,5 @@ +package test + +fun main(args: Array) { + val x = Object.CONST + Object.CONST +} \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/traitClassObjectConstantChanged/build.log b/jps/jps-plugin/testData/incremental/traitClassObjectConstantChanged/build.log new file mode 100644 index 00000000000..50bc11c8e4d --- /dev/null +++ b/jps/jps-plugin/testData/incremental/traitClassObjectConstantChanged/build.log @@ -0,0 +1,14 @@ +Cleaning output files: +out/production/module/test/Trait$$TImpl.class +out/production/module/test/Trait$object.class +out/production/module/test/Trait.class +End of files +Compiling files: +src/const.kt +End of files +Cleaning output files: +out/production/module/test/Usage.class +End of files +Compiling files: +src/usage.kt +End of files diff --git a/jps/jps-plugin/testData/incremental/traitClassObjectConstantChanged/const.kt b/jps/jps-plugin/testData/incremental/traitClassObjectConstantChanged/const.kt new file mode 100644 index 00000000000..71c8e2eaa7c --- /dev/null +++ b/jps/jps-plugin/testData/incremental/traitClassObjectConstantChanged/const.kt @@ -0,0 +1,8 @@ +package test + +trait Trait { + class object { + // Old and new constant values are different, but their hashes are the same + val CONST = "BF" + } +} diff --git a/jps/jps-plugin/testData/incremental/traitClassObjectConstantChanged/const.kt.new b/jps/jps-plugin/testData/incremental/traitClassObjectConstantChanged/const.kt.new new file mode 100644 index 00000000000..0ef22fbf6b8 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/traitClassObjectConstantChanged/const.kt.new @@ -0,0 +1,8 @@ +package test + +trait Trait { + class object { + // Old and new constant values are different, but their hashes are the same + val CONST = "Ae" + } +} diff --git a/jps/jps-plugin/testData/incremental/traitClassObjectConstantChanged/usage.kt b/jps/jps-plugin/testData/incremental/traitClassObjectConstantChanged/usage.kt new file mode 100644 index 00000000000..5c0e712d868 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/traitClassObjectConstantChanged/usage.kt @@ -0,0 +1,4 @@ +package test + +deprecated(Trait.CONST + Trait.CONST) +class Usage