Handle methods descriptor clash in data class

1. Extension functions declared in data classes are generated earlier by `generateMembersDeclaredInClassBody`
2. Extension functions fake override from parent class are generated earlier by `generateFakeOverrideMemberDeclarations`

So it is safe to filter out extension functions inside `generateAdditionalMembersForDataClass`

 #KT-49715
 #KT-51798
This commit is contained in:
Xin Wang
2022-03-15 17:57:53 +08:00
committed by Alexander Udalov
parent 4c461d7864
commit 24105139ea
11 changed files with 105 additions and 1 deletions
+22
View File
@@ -0,0 +1,22 @@
// IGNORE_BACKEND_FIR: JVM_IR
// FIR status: [IR VALIDATION] Duplicate IR node: FUN GENERATED_DATA_CLASS_MEMBER name:toString
// CHECK_BYTECODE_LISTING
// WITH_STDLIB
import kotlin.test.*
interface A {
fun Any.toString(): String = "hello"
}
data class B(val x: Int) : A {
fun Any.hi() = "hi"
}
fun box(): String {
val b = B(1)
assertEquals("B(x=1)", b.toString())
assertTrue(b == B(1))
assertTrue(1.hashCode() == b.hashCode())
return "OK"
}
+35
View File
@@ -0,0 +1,35 @@
@kotlin.Metadata
public final class A$DefaultImpls {
// source: 'kt49715.kt'
public static @org.jetbrains.annotations.NotNull method toString(@org.jetbrains.annotations.NotNull p0: A, @org.jetbrains.annotations.NotNull p1: java.lang.Object): java.lang.String
public final inner class A$DefaultImpls
}
@kotlin.Metadata
public interface A {
// source: 'kt49715.kt'
public abstract @org.jetbrains.annotations.NotNull method toString(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.String
public final inner class A$DefaultImpls
}
@kotlin.Metadata
public final class B {
// source: 'kt49715.kt'
private final field x: int
public method <init>(p0: int): void
public final method component1(): int
public synthetic static method copy$default(p0: B, p1: int, p2: int, p3: java.lang.Object): B
public final @org.jetbrains.annotations.NotNull method copy(p0: int): B
public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
public final method getX(): int
public method hashCode(): int
public final @org.jetbrains.annotations.NotNull method hi(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.String
public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
public @org.jetbrains.annotations.NotNull method toString(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.String
}
@kotlin.Metadata
public final class Kt49715Kt {
// source: 'kt49715.kt'
public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String
}