[IR] Fix annotation arguments comparison when expression is expect enum

...actualized via typealias. This caused false-positive report of
`ACTUAL_ANNOTATION_CONFLICTING_DEFAULT_ARGUMENT_VALUE`.
In such case it's incorrect to compare signatures, because classes have
different `ClassId`s. Instead, classes could be compared using
`areCompatibleExpectActualTypes` which actualizes both types, and
then enum value names compared.

^KT-62104
^KT-59940
This commit is contained in:
Roman Efremov
2023-10-04 11:16:10 +02:00
committed by Space Team
parent 67a46eba9c
commit faae5f9b38
6 changed files with 74 additions and 1 deletions
@@ -0,0 +1,27 @@
// MODULE: m1-common
// FILE: common.kt
expect enum class E {
FOO, BAR
}
expect annotation class Matching(val e: E = E.FOO)
expect annotation class NonMatching(val e: E = E.BAR)
// MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt
actual typealias E = EJava
actual typealias Matching = AJava
<!ACTUAL_ANNOTATION_CONFLICTING_DEFAULT_ARGUMENT_VALUE!>actual typealias NonMatching = AJava<!>
// FILE: EJava.java
public enum EJava {
FOO, BAR;
EJava() {}
}
// FILE: AJava.java
public @interface AJava {
EJava e() default EJava.FOO;
}
@@ -0,0 +1,27 @@
// MODULE: m1-common
// FILE: common.kt
expect enum class E {
FOO, BAR
}
expect annotation class Matching(val e: E = E.FOO)
expect annotation class NonMatching(val e: E = E.BAR)
// MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt
actual typealias E = EJava
actual typealias Matching = AJava
actual typealias <!ACTUAL_ANNOTATION_CONFLICTING_DEFAULT_ARGUMENT_VALUE!>NonMatching<!> = AJava
// FILE: EJava.java
public enum EJava {
FOO, BAR;
EJava() {}
}
// FILE: AJava.java
public @interface AJava {
EJava e() default EJava.FOO;
}