diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/IncrementalCacheImpl.kt b/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/IncrementalCacheImpl.kt index 22d975f5dc7..d300068fb41 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/IncrementalCacheImpl.kt +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/IncrementalCacheImpl.kt @@ -143,11 +143,15 @@ public class IncrementalCacheImpl(targetDataRoot: File) : StorageOwner, Incremen inlinesChanged = false ) header.isCompatibleClassKind() -> - getRecompilationDecision( - protoChanged = protoMap.put(className, BitEncoding.decodeBytes(header.annotationData)), - constantsChanged = constantsMap.process(className, fileBytes), - inlinesChanged = inlineFunctionsMap.process(className, fileBytes) - ) + when (header.classKind!!) { + JvmAnnotationNames.KotlinClass.Kind.CLASS -> getRecompilationDecision( + protoChanged = protoMap.put(className, BitEncoding.decodeBytes(header.annotationData)), + constantsChanged = constantsMap.process(className, fileBytes), + inlinesChanged = inlineFunctionsMap.process(className, fileBytes) + ) + + JvmAnnotationNames.KotlinClass.Kind.LOCAL_CLASS, JvmAnnotationNames.KotlinClass.Kind.ANONYMOUS_OBJECT -> DO_NOTHING + } header.syntheticClassKind == JvmAnnotationNames.KotlinSyntheticClass.Kind.PACKAGE_PART -> { assert(sourceFiles.size() == 1) { "Package part from several source files: $sourceFiles" } diff --git a/jps-plugin/test/org/jetbrains/kotlin/jps/build/IncrementalJpsTestGenerated.java b/jps-plugin/test/org/jetbrains/kotlin/jps/build/IncrementalJpsTestGenerated.java index af9f1e8ce99..da0f6d5dd2c 100644 --- a/jps-plugin/test/org/jetbrains/kotlin/jps/build/IncrementalJpsTestGenerated.java +++ b/jps-plugin/test/org/jetbrains/kotlin/jps/build/IncrementalJpsTestGenerated.java @@ -287,6 +287,12 @@ public class IncrementalJpsTestGenerated extends AbstractIncrementalJpsTest { doTest(fileName); } + @TestMetadata("localClassChanged") + public void testLocalClassChanged() throws Exception { + String fileName = JetTestUtils.navigationMetadata("jps-plugin/testData/incremental/pureKotlin/localClassChanged/"); + doTest(fileName); + } + @TestMetadata("moveClass") public void testMoveClass() throws Exception { String fileName = JetTestUtils.navigationMetadata("jps-plugin/testData/incremental/pureKotlin/moveClass/"); diff --git a/jps-plugin/testData/incremental/pureKotlin/anonymousObjectChanged/a.kt.new b/jps-plugin/testData/incremental/pureKotlin/anonymousObjectChanged/a.kt.new index 6255f915194..37d68224ae2 100644 --- a/jps-plugin/testData/incremental/pureKotlin/anonymousObjectChanged/a.kt.new +++ b/jps-plugin/testData/incremental/pureKotlin/anonymousObjectChanged/a.kt.new @@ -1,6 +1,5 @@ package a -// Signatures in the class "...$main$1" have changed, thus we need to recompile the whole module fun foo() = object { fun baz() = ":)" } diff --git a/jps-plugin/testData/incremental/pureKotlin/anonymousObjectChanged/build.log b/jps-plugin/testData/incremental/pureKotlin/anonymousObjectChanged/build.log index d2598525c01..c56d69d0001 100644 --- a/jps-plugin/testData/incremental/pureKotlin/anonymousObjectChanged/build.log +++ b/jps-plugin/testData/incremental/pureKotlin/anonymousObjectChanged/build.log @@ -5,11 +5,4 @@ out/production/module/a/APackage.class End of files Compiling files: src/a.kt -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 \ No newline at end of file diff --git a/jps-plugin/testData/incremental/pureKotlin/localClassChanged/a.kt b/jps-plugin/testData/incremental/pureKotlin/localClassChanged/a.kt new file mode 100644 index 00000000000..2924f1dad8b --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/localClassChanged/a.kt @@ -0,0 +1,9 @@ +package test + +fun foo() { + class X { + fun bar() = 111 + } + + X().bar() +} diff --git a/jps-plugin/testData/incremental/pureKotlin/localClassChanged/a.kt.new b/jps-plugin/testData/incremental/pureKotlin/localClassChanged/a.kt.new new file mode 100644 index 00000000000..c1209c13075 --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/localClassChanged/a.kt.new @@ -0,0 +1,11 @@ +package test + +fun foo() { + class X { + fun bar() = 111 + fun baz() = ":)" + } + + X().bar() + X().baz() +} diff --git a/jps-plugin/testData/incremental/pureKotlin/localClassChanged/build.log b/jps-plugin/testData/incremental/pureKotlin/localClassChanged/build.log new file mode 100644 index 00000000000..38fe179639a --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/localClassChanged/build.log @@ -0,0 +1,8 @@ +Cleaning output files: +out/production/module/test/TestPackage$a$*$foo$X.class +out/production/module/test/TestPackage$a$*.class +out/production/module/test/TestPackage.class +End of files +Compiling files: +src/a.kt +End of files \ No newline at end of file diff --git a/jps-plugin/testData/incremental/pureKotlin/localClassChanged/unrelated.kt b/jps-plugin/testData/incremental/pureKotlin/localClassChanged/unrelated.kt new file mode 100644 index 00000000000..f9d3d65eecf --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/localClassChanged/unrelated.kt @@ -0,0 +1,5 @@ +package unrelated + +fun main(args: Array) { + +} \ No newline at end of file