From df08ed2ac09f022c78502aafb4537bd138d803e2 Mon Sep 17 00:00:00 2001 From: "nataliya.valtman" Date: Sat, 20 Feb 2021 19:06:12 +0300 Subject: [PATCH] Recompile files which import companion constant #KT-44741 Fixed --- .../kotlin/incremental/IncrementalJvmCache.kt | 14 +++++++++----- .../IncrementalJvmCompilerRunnerTestGenerated.java | 5 +++++ .../pureKotlin/companionConstantChanged/A.kt | 7 +++++++ .../pureKotlin/companionConstantChanged/A.kt.new | 7 +++++++ .../pureKotlin/companionConstantChanged/B.kt | 13 +++++++++++++ .../pureKotlin/companionConstantChanged/C.kt | 12 ++++++++++++ .../companionConstantChanged/DoNotUseConstant.kt | 10 ++++++++++ .../pureKotlin/companionConstantChanged/build.log | 11 +++++++++++ .../companionConstantChanged/companionUsage.kt | 5 +++++ .../companionConstantChanged/constantUsage.kt | 6 ++++++ 10 files changed, 85 insertions(+), 5 deletions(-) create mode 100644 jps-plugin/testData/incremental/pureKotlin/companionConstantChanged/A.kt create mode 100644 jps-plugin/testData/incremental/pureKotlin/companionConstantChanged/A.kt.new create mode 100644 jps-plugin/testData/incremental/pureKotlin/companionConstantChanged/B.kt create mode 100644 jps-plugin/testData/incremental/pureKotlin/companionConstantChanged/C.kt create mode 100644 jps-plugin/testData/incremental/pureKotlin/companionConstantChanged/DoNotUseConstant.kt create mode 100644 jps-plugin/testData/incremental/pureKotlin/companionConstantChanged/build.log create mode 100644 jps-plugin/testData/incremental/pureKotlin/companionConstantChanged/companionUsage.kt create mode 100644 jps-plugin/testData/incremental/pureKotlin/companionConstantChanged/constantUsage.kt diff --git a/build-common/src/org/jetbrains/kotlin/incremental/IncrementalJvmCache.kt b/build-common/src/org/jetbrains/kotlin/incremental/IncrementalJvmCache.kt index 73fd16ca986..9437b03279a 100644 --- a/build-common/src/org/jetbrains/kotlin/incremental/IncrementalJvmCache.kt +++ b/build-common/src/org/jetbrains/kotlin/incremental/IncrementalJvmCache.kt @@ -33,6 +33,7 @@ import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmProtoBufUtil import org.jetbrains.kotlin.metadata.jvm.deserialization.ModuleMapping import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.name.SpecialNames.DEFAULT_NAME_FOR_COMPANION_OBJECT import org.jetbrains.kotlin.resolve.jvm.AsmTypes import org.jetbrains.kotlin.resolve.jvm.JvmClassName import org.jetbrains.org.objectweb.asm.* @@ -399,7 +400,9 @@ open class IncrementalJvmCache( } for (const in oldMap.keys + newMap.keys) { - changesCollector.collectMemberIfValueWasChanged(kotlinClass.scopeFqName(), const, oldMap[const], newMap[const]) + //Constant can be declared via companion object or via const field declaration + changesCollector.collectMemberIfValueWasChanged(kotlinClass.scopeFqName(companion = true), const, oldMap[const], newMap[const]) + changesCollector.collectMemberIfValueWasChanged(kotlinClass.scopeFqName(companion = false), const, oldMap[const], newMap[const]) } } @@ -599,11 +602,12 @@ sealed class ChangeInfo(val fqName: FqName) { } } -private fun LocalFileKotlinClass.scopeFqName() = - when (classHeader.kind) { - KotlinClassHeader.Kind.CLASS -> className.fqNameForClassNameWithoutDollars - else -> className.packageFqName +private fun LocalFileKotlinClass.scopeFqName(companion: Boolean = false) = when (classHeader.kind) { + KotlinClassHeader.Kind.CLASS -> { + className.fqNameForClassNameWithoutDollars.let { if (companion) it.child(DEFAULT_NAME_FOR_COMPANION_OBJECT) else it } } + else -> className.packageFqName +} fun ByteArray.md5(): Long { val d = MessageDigest.getInstance("MD5").digest(this)!! diff --git a/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalJvmCompilerRunnerTestGenerated.java b/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalJvmCompilerRunnerTestGenerated.java index 4aabb89cc90..0837d48347b 100644 --- a/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalJvmCompilerRunnerTestGenerated.java +++ b/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalJvmCompilerRunnerTestGenerated.java @@ -28,6 +28,11 @@ public class IncrementalJvmCompilerRunnerTestGenerated extends AbstractIncrement KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath); } + @TestMetadata("companionConstantChanged") + public void testCompanionConstantChanges() throws Exception { + runTest("jps-plugin/testData/incremental/pureKotlin/companionConstantChanged/"); + } + @TestMetadata("accessingFunctionsViaPackagePart") public void testAccessingFunctionsViaPackagePart() throws Exception { runTest("jps-plugin/testData/incremental/pureKotlin/accessingFunctionsViaPackagePart/"); diff --git a/jps-plugin/testData/incremental/pureKotlin/companionConstantChanged/A.kt b/jps-plugin/testData/incremental/pureKotlin/companionConstantChanged/A.kt new file mode 100644 index 00000000000..8795a0368bb --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/companionConstantChanged/A.kt @@ -0,0 +1,7 @@ +package test + +class A { + companion object { + const val CONSTANT_VALUE = 16 + } +} \ No newline at end of file diff --git a/jps-plugin/testData/incremental/pureKotlin/companionConstantChanged/A.kt.new b/jps-plugin/testData/incremental/pureKotlin/companionConstantChanged/A.kt.new new file mode 100644 index 00000000000..38d550d7554 --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/companionConstantChanged/A.kt.new @@ -0,0 +1,7 @@ +package test + +class A { + companion object { + const val CONSTANT_VALUE = 17 + } +} \ No newline at end of file diff --git a/jps-plugin/testData/incremental/pureKotlin/companionConstantChanged/B.kt b/jps-plugin/testData/incremental/pureKotlin/companionConstantChanged/B.kt new file mode 100644 index 00000000000..88610dd3c60 --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/companionConstantChanged/B.kt @@ -0,0 +1,13 @@ +package foo + +import test.A.Companion.CONSTANT_VALUE + +class B { + companion object { + fun main() { + println("Import companion constant: ${CONSTANT_VALUE}") + } + + } + +} \ No newline at end of file diff --git a/jps-plugin/testData/incremental/pureKotlin/companionConstantChanged/C.kt b/jps-plugin/testData/incremental/pureKotlin/companionConstantChanged/C.kt new file mode 100644 index 00000000000..3604aa18750 --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/companionConstantChanged/C.kt @@ -0,0 +1,12 @@ +package foo + +import test.A + +class C { + companion object { + fun main() { + println("Companion constant: ${A.CONSTANT_VALUE}") + } + } + +} \ No newline at end of file diff --git a/jps-plugin/testData/incremental/pureKotlin/companionConstantChanged/DoNotUseConstant.kt b/jps-plugin/testData/incremental/pureKotlin/companionConstantChanged/DoNotUseConstant.kt new file mode 100644 index 00000000000..e17f38035ca --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/companionConstantChanged/DoNotUseConstant.kt @@ -0,0 +1,10 @@ +package foo + +class DoNotUseConstant { + companion object { + const val CONSTANT_VALUE = 10 + fun main() { + println("Use local constant: ${CONSTANT_VALUE}") + } + } +} \ No newline at end of file diff --git a/jps-plugin/testData/incremental/pureKotlin/companionConstantChanged/build.log b/jps-plugin/testData/incremental/pureKotlin/companionConstantChanged/build.log new file mode 100644 index 00000000000..33a5bd2ea0f --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/companionConstantChanged/build.log @@ -0,0 +1,11 @@ +================ Step #1 ================= + +Compiling files: + src/A.kt + src/B.kt + src/C.kt + src/companionUsage.kt + src/constantUsage.kt +End of files +Exit code: OK +------------------------------------------ diff --git a/jps-plugin/testData/incremental/pureKotlin/companionConstantChanged/companionUsage.kt b/jps-plugin/testData/incremental/pureKotlin/companionConstantChanged/companionUsage.kt new file mode 100644 index 00000000000..14e319277e0 --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/companionConstantChanged/companionUsage.kt @@ -0,0 +1,5 @@ +package foo + +import test.A + +fun callCompanionConstant() = "Companion constant: ${A.CONSTANT_VALUE}" diff --git a/jps-plugin/testData/incremental/pureKotlin/companionConstantChanged/constantUsage.kt b/jps-plugin/testData/incremental/pureKotlin/companionConstantChanged/constantUsage.kt new file mode 100644 index 00000000000..d8977a56833 --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/companionConstantChanged/constantUsage.kt @@ -0,0 +1,6 @@ +package foo + +import test.A.Companion.CONSTANT_VALUE + +fun importCompanionConstant() = "Import companion constant: ${CONSTANT_VALUE}" +