IR: Avoid overwriting of property signature descriptions
^KT-64085
^KT-64082
diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/signature/IdSignatureBuilder.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/signature/IdSignatureBuilder.kt
index 0e644b6..df8b6a4 100644
--- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/signature/IdSignatureBuilder.kt
+++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/signature/IdSignatureBuilder.kt
@@ -11,6 +11,8 @@
import org.jetbrains.kotlin.name.FqName
abstract class IdSignatureBuilder<Declaration : Any, Mangler : KotlinMangler<Declaration>> {
+ private data class PropertyAccessorIdHashAndDescription(val id: Long, val description: String)
+
protected var packageFqn: FqName = FqName.ROOT
protected val classFqnSegments = mutableListOf<String>()
@@ -26,7 +28,7 @@
*
* This property is made private to enforce always setting [description] along with it.
*/
- private var hashIdAcc: Long? = null
+ private var propertyAccessorIdHashAndDescription: PropertyAccessorIdHashAndDescription? = null
protected var overridden: List<Declaration>? = null
protected var mask = 0L
@@ -73,11 +75,11 @@
protected fun setHashIdAndDescription(id: Long, description: String, isPropertyAccessor: Boolean) {
if (isPropertyAccessor) {
- hashIdAcc = id
+ propertyAccessorIdHashAndDescription = PropertyAccessorIdHashAndDescription(id, description)
} else {
hashId = id
+ this.description = description
}
- this.description = description
}
protected abstract fun accept(d: Declaration)
@@ -86,7 +88,7 @@
this.packageFqn = FqName.ROOT
this.classFqnSegments.clear()
this.hashId = null
- this.hashIdAcc = null
+ this.propertyAccessorIdHashAndDescription = null
this.mask = 0L
this.overridden = null
this.description = null
@@ -125,7 +127,20 @@
buildContainerSignature(preservedContainer)
}
- hashIdAcc == null -> {
+ propertyAccessorIdHashAndDescription != null -> {
+ val accessorSignature = IdSignature.CommonSignature(
+ packageFqName = packageFqName,
+ declarationFqName = classFqName,
+ id = propertyAccessorIdHashAndDescription!!.id,
+ mask = mask,
+ description = propertyAccessorIdHashAndDescription!!.description,
+ )
+ propertyAccessorIdHashAndDescription = null
+ classFqnSegments.run { removeAt(lastIndex) }
+ val propertySignature = build()
+ IdSignature.AccessorSignature(propertySignature, accessorSignature)
+ }
+ else -> {
IdSignature.CommonSignature(
packageFqName = packageFqName,
declarationFqName = classFqName,
@@ -134,19 +149,6 @@
description = description,
)
}
- else -> {
- val accessorSignature = IdSignature.CommonSignature(
- packageFqName = packageFqName,
- declarationFqName = classFqName,
- id = hashIdAcc,
- mask = mask,
- description = description,
- )
- hashIdAcc = null
- classFqnSegments.run { removeAt(lastIndex) }
- val propertySignature = build()
- IdSignature.AccessorSignature(propertySignature, accessorSignature)
- }
}
}
diff --git a/compiler/testData/klib/dump-abi/content/classifiers.v2.txt b/compiler/testData/klib/dump-abi/content/classifiers.v2.txt
index f0b1be8..3e34d66 100644
--- a/compiler/testData/klib/dump-abi/content/classifiers.v2.txt
+++ b/compiler/testData/klib/dump-abi/content/classifiers.v2.txt
@@ -39,7 +39,7 @@
open enum class classifiers.test/EnumClassWithEntryClasses : kotlin/Enum<classifiers.test/EnumClassWithEntryClasses> { // classifiers.test/EnumClassWithEntryClasses|null[0]
final val entries // classifiers.test/EnumClassWithEntryClasses.entries|#static{}entries[0]
final fun <get-entries>(): kotlin.enums/EnumEntries<classifiers.test/EnumClassWithEntryClasses> // classifiers.test/EnumClassWithEntryClasses.entries.<get-entries>|<get-entries>#static(){}[0]
- open val overriddenProperty // classifiers.test/EnumClassWithEntryClasses.overriddenProperty|<get-overriddenProperty>(){}[0]
+ open val overriddenProperty // classifiers.test/EnumClassWithEntryClasses.overriddenProperty|{}overriddenProperty[0]
open fun <get-overriddenProperty>(): kotlin/String // classifiers.test/EnumClassWithEntryClasses.overriddenProperty.<get-overriddenProperty>|<get-overriddenProperty>(){}[0]
open fun overriddenFunction(): kotlin/String // classifiers.test/EnumClassWithEntryClasses.overriddenFunction|overriddenFunction(){}[0]
final fun valueOf(kotlin/String): classifiers.test/EnumClassWithEntryClasses // classifiers.test/EnumClassWithEntryClasses.valueOf|valueOf#static(kotlin.String){}[0]
diff --git a/compiler/testData/klib/dump-abi/content/kt64082-kt64085.kt b/compiler/testData/klib/dump-abi/content/kt64082-kt64085.kt
new file mode 100644
index 0000000..43bba14
--- /dev/null
+++ b/compiler/testData/klib/dump-abi/content/kt64082-kt64085.kt
@@ -0,0 +1,34 @@
+// MODULE: kt64082_kt64085
+
+class ConstHolder1 {
+ private fun local() {
+ println(CONST_VAL)
+ }
+
+ companion object {
+ const val CONST_VAL: String = ""
+ }
+}
+
+class ConstHolder2 {
+ companion object {
+ const val CONST_VAL: String = ""
+ }
+}
+
+class Reader {
+ private val properties: Named
+
+ init {
+ properties = NamedImpl()
+ properties.name
+ }
+}
+
+interface Named {
+ val name: String
+}
+
+class NamedImpl : Named {
+ override val name: String = ""
+}
diff --git a/compiler/testData/klib/dump-abi/content/kt64082-kt64085.v1.txt b/compiler/testData/klib/dump-abi/content/kt64082-kt64085.v1.txt
new file mode 100644
index 0000000..4a64c08
--- /dev/null
+++ b/compiler/testData/klib/dump-abi/content/kt64082-kt64085.v1.txt
@@ -0,0 +1,32 @@
+// Rendering settings:
+// - Signature version: 1
+// - Show manifest properties: false
+// - Show declarations: true
+
+// Library unique name: <kt64082_kt64085>
+final class /ConstHolder1 { // /ConstHolder1|null[0]
+ constructor <init>() // /ConstHolder1.<init>|-5645683436151566731[0]
+ final object Companion { // /ConstHolder1.Companion|null[0]
+ final const val CONST_VAL // /ConstHolder1.Companion.CONST_VAL|-8347527175481482751[0]
+ final fun <get-CONST_VAL>(): kotlin/String // /ConstHolder1.Companion.CONST_VAL.<get-CONST_VAL>|-4753750709173816321[0]
+ }
+}
+final class /ConstHolder2 { // /ConstHolder2|null[0]
+ constructor <init>() // /ConstHolder2.<init>|-5645683436151566731[0]
+ final object Companion { // /ConstHolder2.Companion|null[0]
+ final const val CONST_VAL // /ConstHolder2.Companion.CONST_VAL|-8347527175481482751[0]
+ final fun <get-CONST_VAL>(): kotlin/String // /ConstHolder2.Companion.CONST_VAL.<get-CONST_VAL>|-4753750709173816321[0]
+ }
+}
+abstract interface /Named { // /Named|null[0]
+ abstract val name // /Named.name|4231860309499509769[0]
+ abstract fun <get-name>(): kotlin/String // /Named.name.<get-name>|5879344792307730109[0]
+}
+final class /NamedImpl : /Named { // /NamedImpl|null[0]
+ final val name // /NamedImpl.name|4231860309499509769[0]
+ final fun <get-name>(): kotlin/String // /NamedImpl.name.<get-name>|5879344792307730109[0]
+ constructor <init>() // /NamedImpl.<init>|-5645683436151566731[0]
+}
+final class /Reader { // /Reader|null[0]
+ constructor <init>() // /Reader.<init>|-5645683436151566731[0]
+}
diff --git a/compiler/testData/klib/dump-abi/content/kt64082-kt64085.v2.txt b/compiler/testData/klib/dump-abi/content/kt64082-kt64085.v2.txt
new file mode 100644
index 0000000..25db1d5
--- /dev/null
+++ b/compiler/testData/klib/dump-abi/content/kt64082-kt64085.v2.txt
@@ -0,0 +1,32 @@
+// Rendering settings:
+// - Signature version: 2
+// - Show manifest properties: false
+// - Show declarations: true
+
+// Library unique name: <kt64082_kt64085>
+final class /ConstHolder1 { // /ConstHolder1|null[0]
+ constructor <init>() // /ConstHolder1.<init>|<init>(){}[0]
+ final object Companion { // /ConstHolder1.Companion|null[0]
+ final const val CONST_VAL // /ConstHolder1.Companion.CONST_VAL|{}CONST_VAL[0]
+ final fun <get-CONST_VAL>(): kotlin/String // /ConstHolder1.Companion.CONST_VAL.<get-CONST_VAL>|<get-CONST_VAL>(){}[0]
+ }
+}
+final class /ConstHolder2 { // /ConstHolder2|null[0]
+ constructor <init>() // /ConstHolder2.<init>|<init>(){}[0]
+ final object Companion { // /ConstHolder2.Companion|null[0]
+ final const val CONST_VAL // /ConstHolder2.Companion.CONST_VAL|{}CONST_VAL[0]
+ final fun <get-CONST_VAL>(): kotlin/String // /ConstHolder2.Companion.CONST_VAL.<get-CONST_VAL>|<get-CONST_VAL>(){}[0]
+ }
+}
+abstract interface /Named { // /Named|null[0]
+ abstract val name // /Named.name|{}name[0]
+ abstract fun <get-name>(): kotlin/String // /Named.name.<get-name>|<get-name>(){}[0]
+}
+final class /NamedImpl : /Named { // /NamedImpl|null[0]
+ final val name // /NamedImpl.name|{}name[0]
+ final fun <get-name>(): kotlin/String // /NamedImpl.name.<get-name>|<get-name>(){}[0]
+ constructor <init>() // /NamedImpl.<init>|<init>(){}[0]
+}
+final class /Reader { // /Reader|null[0]
+ constructor <init>() // /Reader.<init>|<init>(){}[0]
+}
diff --git a/compiler/util-klib-abi/tests-gen/org/jetbrains/kotlin/library/abi/ClassicJsLibraryAbiReaderTestGenerated.java b/compiler/util-klib-abi/tests-gen/org/jetbrains/kotlin/library/abi/ClassicJsLibraryAbiReaderTestGenerated.java
index 6e96736..aa4d177 100644
--- a/compiler/util-klib-abi/tests-gen/org/jetbrains/kotlin/library/abi/ClassicJsLibraryAbiReaderTestGenerated.java
+++ b/compiler/util-klib-abi/tests-gen/org/jetbrains/kotlin/library/abi/ClassicJsLibraryAbiReaderTestGenerated.java
@@ -98,6 +98,12 @@
}
@Test
+ @TestMetadata("kt64082-kt64085.kt")
+ public void testKt64082_kt64085() throws Exception {
+ runTest("compiler/testData/klib/dump-abi/content/kt64082-kt64085.kt");
+ }
+
+ @Test
@TestMetadata("root_package.kt")
public void testRoot_package() throws Exception {
runTest("compiler/testData/klib/dump-abi/content/root_package.kt");
diff --git a/compiler/util-klib-abi/tests-gen/org/jetbrains/kotlin/library/abi/FirJsLibraryAbiReaderTestGenerated.java b/compiler/util-klib-abi/tests-gen/org/jetbrains/kotlin/library/abi/FirJsLibraryAbiReaderTestGenerated.java
index d64b695..e8e94c2 100644
--- a/compiler/util-klib-abi/tests-gen/org/jetbrains/kotlin/library/abi/FirJsLibraryAbiReaderTestGenerated.java
+++ b/compiler/util-klib-abi/tests-gen/org/jetbrains/kotlin/library/abi/FirJsLibraryAbiReaderTestGenerated.java
@@ -98,6 +98,12 @@
}
@Test
+ @TestMetadata("kt64082-kt64085.kt")
+ public void testKt64082_kt64085() throws Exception {
+ runTest("compiler/testData/klib/dump-abi/content/kt64082-kt64085.kt");
+ }
+
+ @Test
@TestMetadata("root_package.kt")
public void testRoot_package() throws Exception {
runTest("compiler/testData/klib/dump-abi/content/root_package.kt");
diff --git a/native/native.tests/testData/klib/dump-signatures/callables.ir-signatures.v2.txt b/native/native.tests/testData/klib/dump-signatures/callables.ir-signatures.v2.txt
index c641e37..33c6c61 100644
--- a/native/native.tests/testData/klib/dump-signatures/callables.ir-signatures.v2.txt
+++ b/native/native.tests/testData/klib/dump-signatures/callables.ir-signatures.v2.txt
@@ -13,11 +13,11 @@
kotlin.collections/Collection|null[0]
kotlin.collections/Iterator|null[0]
kotlin.collections/List.size.<get-size>|<get-size>(){}[0]
-kotlin.collections/List.size|<get-size>(){}[0]
+kotlin.collections/List.size|{}size[0]
kotlin.collections/List|null[0]
kotlin.collections/Map.Entry|null[0]
kotlin.collections/Map.entries.<get-entries>|<get-entries>(){}[0]
-kotlin.collections/Map.entries|<get-entries>(){}[0]
+kotlin.collections/Map.entries|{}entries[0]
kotlin.collections/Map|null[0]
kotlin.collections/Set|null[0]
kotlin/Any.<init>|<init>(){}[0]
diff --git a/native/native.tests/testData/klib/dump-signatures/imported_declarations.ir-signatures.v2.txt b/native/native.tests/testData/klib/dump-signatures/imported_declarations.ir-signatures.v2.txt
index f8b5da9..6969b18 100644
--- a/native/native.tests/testData/klib/dump-signatures/imported_declarations.ir-signatures.v2.txt
+++ b/native/native.tests/testData/klib/dump-signatures/imported_declarations.ir-signatures.v2.txt
@@ -3,7 +3,7 @@
// Imported signatures: 11
bar/publicVal.<get-publicVal>|<get-publicVal>(){}[0]
-bar/publicVal|<get-publicVal>(){}[0]
+bar/publicVal|{}publicVal[0]
foo/PublicClass.<init>|<init>(kotlin.Int){}[0]
foo/PublicClass|null[0]
foo/publicFun|publicFun(){}[0]
diff --git a/native/native.tests/testData/klib/dump-signatures/imported_from_cinterop.ir-signatures.v2.txt b/native/native.tests/testData/klib/dump-signatures/imported_from_cinterop.ir-signatures.v2.txt
index b2e5e3e..0dda3f8 100644
--- a/native/native.tests/testData/klib/dump-signatures/imported_from_cinterop.ir-signatures.v2.txt
+++ b/native/native.tests/testData/klib/dump-signatures/imported_from_cinterop.ir-signatures.v2.txt
@@ -26,13 +26,13 @@
imported_from_cinterop.lib/Base.nonOverriddenFunction|objc:nonOverriddenFunction[100]
imported_from_cinterop.lib/Base.nonOverriddenProperty.<get-nonOverriddenProperty>|objc:nonOverriddenProperty#Accessor[100]
imported_from_cinterop.lib/Base.nonOverriddenProperty.<set-nonOverriddenProperty>|objc:setNonOverriddenProperty:#Accessor[100]
-imported_from_cinterop.lib/Base.nonOverriddenProperty|objc:nonOverriddenProperty#Accessor[100]
imported_from_cinterop.lib/Base.nonOverriddenProperty|objc:nonOverriddenProperty[100]
+imported_from_cinterop.lib/Base.nonOverriddenProperty|{}nonOverriddenProperty[100]
imported_from_cinterop.lib/Base.overriddenFunction|objc:overriddenFunction[100]
imported_from_cinterop.lib/Base.overriddenProperty.<get-overriddenProperty>|objc:overriddenProperty#Accessor[100]
imported_from_cinterop.lib/Base.overriddenProperty.<set-overriddenProperty>|objc:setOverriddenProperty:#Accessor[100]
-imported_from_cinterop.lib/Base.overriddenProperty|objc:overriddenProperty#Accessor[100]
imported_from_cinterop.lib/Base.overriddenProperty|objc:overriddenProperty[100]
+imported_from_cinterop.lib/Base.overriddenProperty|{}overriddenProperty[100]
imported_from_cinterop.lib/Base.setNonOverriddenProperty|objc:setNonOverriddenProperty:[100]
imported_from_cinterop.lib/Base.setOverriddenProperty|objc:setOverriddenProperty:[100]
imported_from_cinterop.lib/Base.toString|toString(){}[100]
diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeLibraryAbiReaderTest.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeLibraryAbiReaderTest.java
index 5ce46cd..5855a9b 100644
--- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeLibraryAbiReaderTest.java
+++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeLibraryAbiReaderTest.java
@@ -102,6 +102,12 @@
}
@Test
+ @TestMetadata("kt64082-kt64085.kt")
+ public void testKt64082_kt64085() throws Exception {
+ runTest("compiler/testData/klib/dump-abi/content/kt64082-kt64085.kt");
+ }
+
+ @Test
@TestMetadata("root_package.kt")
public void testRoot_package() throws Exception {
runTest("compiler/testData/klib/dump-abi/content/root_package.kt");
diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/NativeLibraryAbiReaderTest.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/NativeLibraryAbiReaderTest.java
index 9da4866..23ab015 100644
--- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/NativeLibraryAbiReaderTest.java
+++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/NativeLibraryAbiReaderTest.java
@@ -98,6 +98,12 @@
}
@Test
+ @TestMetadata("kt64082-kt64085.kt")
+ public void testKt64082_kt64085() throws Exception {
+ runTest("compiler/testData/klib/dump-abi/content/kt64082-kt64085.kt");
+ }
+
+ @Test
@TestMetadata("root_package.kt")
public void testRoot_package() throws Exception {
runTest("compiler/testData/klib/dump-abi/content/root_package.kt");