[IR] Fix undeterministic order in signature clash reporting

This commit is contained in:
Dmitriy Novozhilov
2021-01-14 14:31:09 +03:00
parent 6a2796b067
commit 81fd8b5940
4 changed files with 32 additions and 32 deletions
@@ -22,8 +22,8 @@ class JvmSignatureClashDetector(
private val type: Type,
private val context: JvmBackendContext
) {
private val methodsBySignature = HashMap<RawSignature, MutableSet<IrFunction>>()
private val fieldsBySignature = HashMap<RawSignature, MutableSet<IrField>>()
private val methodsBySignature = LinkedHashMap<RawSignature, MutableSet<IrFunction>>()
private val fieldsBySignature = LinkedHashMap<RawSignature, MutableSet<IrField>>()
fun trackField(irField: IrField, rawSignature: RawSignature) {
fieldsBySignature.getOrPut(rawSignature) { SmartSet.create() }.add(irField)
@@ -49,7 +49,7 @@ class JvmSignatureClashDetector(
}
private fun getOverriddenFunctions(irFunction: IrSimpleFunction): Set<IrFunction> {
val result = HashSet<IrFunction>()
val result = LinkedHashSet<IrFunction>()
collectOverridesOf(irFunction, result)
return result
}
@@ -146,7 +146,7 @@ class JvmSignatureClashDetector(
irDeclarations: Collection<IrDeclaration>,
conflictingJvmDeclarationsData: ConflictingJvmDeclarationsData
) {
val psiElements = irDeclarations.mapNotNullTo(HashSet()) { it.getElementForDiagnostics() }
val psiElements = irDeclarations.mapNotNullTo(LinkedHashSet()) { it.getElementForDiagnostics() }
for (psiElement in psiElements) {
context.psiErrorBuilder.at(psiElement)
.report(diagnosticFactory1, conflictingJvmDeclarationsData)
@@ -1,6 +1,6 @@
compiler/testData/cli/jvm/syntheticAccessorForPropertiesSignatureClash.kt:1:7: error: platform declaration clash: The following declarations have the same JVM signature (access$getFoo$cp()I):
fun `access$getFoo$cp`(): Int defined in A
fun `access$getFoo$cp`(): Int defined in A
compiler/testData/cli/jvm/syntheticAccessorForPropertiesSignatureClash.kt:1:7: error: platform declaration clash: The following declarations have the same JVM signature (access$getFoo$p(LA;)I):
fun `access$getFoo$p`(`$this`: A): Int defined in A
fun `access$getFoo$p`(a: A): Int defined in A
class A {
^
compiler/testData/cli/jvm/syntheticAccessorForPropertiesSignatureClash.kt:1:7: error: platform declaration clash: The following declarations have the same JVM signature (access$setFoo$p(LA;I)V):
@@ -8,16 +8,16 @@ compiler/testData/cli/jvm/syntheticAccessorForPropertiesSignatureClash.kt:1:7: e
fun `access$setFoo$p`(a: A, d: Int): Unit defined in A
class A {
^
compiler/testData/cli/jvm/syntheticAccessorForPropertiesSignatureClash.kt:1:7: error: platform declaration clash: The following declarations have the same JVM signature (access$getFoo$cp()I):
fun `access$getFoo$cp`(): Int defined in A
fun `access$getFoo$cp`(): Int defined in A
class A {
^
compiler/testData/cli/jvm/syntheticAccessorForPropertiesSignatureClash.kt:1:7: error: platform declaration clash: The following declarations have the same JVM signature (access$setFoo$cp(I)V):
fun `access$setFoo$cp`(`<set-?>`: Int): Unit defined in A
fun `access$setFoo$cp`(d: Int): Unit defined in A
class A {
^
compiler/testData/cli/jvm/syntheticAccessorForPropertiesSignatureClash.kt:1:7: error: platform declaration clash: The following declarations have the same JVM signature (access$getFoo$p(LA;)I):
fun `access$getFoo$p`(`$this`: A): Int defined in A
fun `access$getFoo$p`(a: A): Int defined in A
class A {
^
compiler/testData/cli/jvm/syntheticAccessorForPropertiesSignatureClash.kt:5:5: error: platform declaration clash: The following declarations have the same JVM signature (access$getFoo$p(LA;)I):
fun `access$getFoo$p`(`$this`: A): Int defined in A
fun `access$getFoo$p`(a: A): Int defined in A
@@ -1,3 +1,13 @@
compiler/testData/cli/jvm/syntheticAccessorPropertyAndFunSignatureClash.kt:1:7: error: platform declaration clash: The following declarations have the same JVM signature (access$getFoo$p(LA;)I):
fun `access$getFoo$p`(`$this`: A): Int defined in A
fun `access$getFoo$p`(a: A): Int defined in A
class A {
^
compiler/testData/cli/jvm/syntheticAccessorPropertyAndFunSignatureClash.kt:1:7: error: platform declaration clash: The following declarations have the same JVM signature (access$setFoo$p(LA;I)V):
fun `access$setFoo$p`(`$this`: A, `<set-?>`: Int): Unit defined in A
fun `access$setFoo$p`(a: A, d: Int): Unit defined in A
class A {
^
compiler/testData/cli/jvm/syntheticAccessorPropertyAndFunSignatureClash.kt:1:7: error: platform declaration clash: The following declarations have the same JVM signature (access$getFoo(LA;)I):
fun `access$getFoo`(`$this`: A): Int defined in A
fun `access$getFoo`(a: A): Int defined in A
@@ -8,16 +18,6 @@ compiler/testData/cli/jvm/syntheticAccessorPropertyAndFunSignatureClash.kt:1:7:
fun `access$setFoo`(a: A, d: Int): Unit defined in A
class A {
^
compiler/testData/cli/jvm/syntheticAccessorPropertyAndFunSignatureClash.kt:1:7: error: platform declaration clash: The following declarations have the same JVM signature (access$setFoo$p(LA;I)V):
fun `access$setFoo$p`(`$this`: A, `<set-?>`: Int): Unit defined in A
fun `access$setFoo$p`(a: A, d: Int): Unit defined in A
class A {
^
compiler/testData/cli/jvm/syntheticAccessorPropertyAndFunSignatureClash.kt:1:7: error: platform declaration clash: The following declarations have the same JVM signature (access$getFoo$p(LA;)I):
fun `access$getFoo$p`(`$this`: A): Int defined in A
fun `access$getFoo$p`(a: A): Int defined in A
class A {
^
compiler/testData/cli/jvm/syntheticAccessorPropertyAndFunSignatureClash.kt:5:5: error: platform declaration clash: The following declarations have the same JVM signature (access$getFoo$p(LA;)I):
fun `access$getFoo$p`(`$this`: A): Int defined in A
fun `access$getFoo$p`(a: A): Int defined in A
+10 -10
View File
@@ -3,6 +3,16 @@ compiler/testData/cli/jvm/syntheticAccessorSignatureClash.kt:14:7: error: accide
fun `access$foo`(`$this`: Derived): Unit defined in Derived
class Derived : Base() {
^
compiler/testData/cli/jvm/syntheticAccessorSignatureClash.kt:14:7: error: accidental override: The following declarations have the same JVM signature (access$getBar$p(LDerived;)I):
fun `access$getBar$p`(d: Derived): Int defined in Derived
fun `access$getBar$p`(`$this`: Derived): Int defined in Derived
class Derived : Base() {
^
compiler/testData/cli/jvm/syntheticAccessorSignatureClash.kt:14:7: error: accidental override: The following declarations have the same JVM signature (access$getBaz$p(LDerived;)I):
fun `access$getBaz$p`(d: Derived): Int defined in Derived
fun `access$getBaz$p`(`$this`: Derived): Int defined in Derived
class Derived : Base() {
^
compiler/testData/cli/jvm/syntheticAccessorSignatureClash.kt:14:7: error: accidental override: The following declarations have the same JVM signature (access$getBoo$p(LDerived;)I):
fun `access$getBoo$p`(d: Derived): Int defined in Derived
fun `access$getBoo$p`(`$this`: Derived): Int defined in Derived
@@ -13,19 +23,9 @@ compiler/testData/cli/jvm/syntheticAccessorSignatureClash.kt:14:7: error: accide
fun `access$setBar$p`(`$this`: Derived, `<set-?>`: Int): Unit defined in Derived
class Derived : Base() {
^
compiler/testData/cli/jvm/syntheticAccessorSignatureClash.kt:14:7: error: accidental override: The following declarations have the same JVM signature (access$getBar$p(LDerived;)I):
fun `access$getBar$p`(d: Derived): Int defined in Derived
fun `access$getBar$p`(`$this`: Derived): Int defined in Derived
class Derived : Base() {
^
compiler/testData/cli/jvm/syntheticAccessorSignatureClash.kt:14:7: error: accidental override: The following declarations have the same JVM signature (access$setBar1$p(LDerived;I)V):
fun `access$setBar1$p`(d: Derived, i: Int): Unit defined in Derived
fun `access$setBar1$p`(`$this`: Derived, `<set-?>`: Int): Unit defined in Derived
class Derived : Base() {
^
compiler/testData/cli/jvm/syntheticAccessorSignatureClash.kt:14:7: error: accidental override: The following declarations have the same JVM signature (access$getBaz$p(LDerived;)I):
fun `access$getBaz$p`(d: Derived): Int defined in Derived
fun `access$getBaz$p`(`$this`: Derived): Int defined in Derived
class Derived : Base() {
^
COMPILATION_ERROR