JVM_IR: Fix enum classes ABI
1. Enum entry fields don't have nullability annotations. 2. Enum class special methods (values, valueOf) are not 'final' (although they probably should be, javac generates corresponding methods without ACC_FINAL flag). 3. Enum class special methods don't have nullability annotations. 4. Don't generate synthetic accessor for enum entry class constructor. KT-37019 KT-37020 KT-37021
This commit is contained in:
@@ -0,0 +1,21 @@
|
||||
enum class SimpleEnum {
|
||||
A, B, C
|
||||
}
|
||||
|
||||
enum class WithConstructor(val x: String) {
|
||||
A("1"), B("2"), C("3")
|
||||
}
|
||||
|
||||
enum class WithEntryClass {
|
||||
A {
|
||||
override fun foo() {}
|
||||
}
|
||||
;
|
||||
abstract fun foo()
|
||||
}
|
||||
|
||||
annotation class Ann
|
||||
|
||||
enum class WithAnnotations {
|
||||
@Ann A, @Ann B
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
@java.lang.annotation.Retention
|
||||
@kotlin.Metadata
|
||||
public annotation class Ann
|
||||
|
||||
@kotlin.Metadata
|
||||
public final enum class SimpleEnum {
|
||||
private synthetic final static field $VALUES: SimpleEnum[]
|
||||
public final enum static field A: SimpleEnum
|
||||
public final enum static field B: SimpleEnum
|
||||
public final enum static field C: SimpleEnum
|
||||
static method <clinit>(): void
|
||||
private method <init>(p0: java.lang.String, p1: int): void
|
||||
public static method valueOf(p0: java.lang.String): SimpleEnum
|
||||
public static method values(): SimpleEnum[]
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
public final enum class WithAnnotations {
|
||||
private synthetic final static field $VALUES: WithAnnotations[]
|
||||
public final enum static @Ann field A: WithAnnotations
|
||||
public final enum static @Ann field B: WithAnnotations
|
||||
static method <clinit>(): void
|
||||
private method <init>(p0: java.lang.String, p1: int): void
|
||||
public static method valueOf(p0: java.lang.String): WithAnnotations
|
||||
public static method values(): WithAnnotations[]
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
public final enum class WithConstructor {
|
||||
private synthetic final static field $VALUES: WithConstructor[]
|
||||
public final enum static field A: WithConstructor
|
||||
public final enum static field B: WithConstructor
|
||||
public final enum static field C: WithConstructor
|
||||
private final field x: java.lang.String
|
||||
static method <clinit>(): void
|
||||
private method <init>(p0: java.lang.String, p1: int, p2: java.lang.String): void
|
||||
public final @org.jetbrains.annotations.NotNull method getX(): java.lang.String
|
||||
public static method valueOf(p0: java.lang.String): WithConstructor
|
||||
public static method values(): WithConstructor[]
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
final class WithEntryClass$A {
|
||||
inner class WithEntryClass$A
|
||||
method <init>(p0: java.lang.String, p1: int): void
|
||||
public method foo(): void
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
public abstract enum class WithEntryClass {
|
||||
private synthetic final static field $VALUES: WithEntryClass[]
|
||||
public final enum static field A: WithEntryClass
|
||||
inner class WithEntryClass$A
|
||||
static method <clinit>(): void
|
||||
private method <init>(p0: java.lang.String, p1: int): void
|
||||
public synthetic method <init>(p0: java.lang.String, p1: int, p2: kotlin.jvm.internal.DefaultConstructorMarker): void
|
||||
public abstract method foo(): void
|
||||
public static method valueOf(p0: java.lang.String): WithEntryClass
|
||||
public static method values(): WithEntryClass[]
|
||||
}
|
||||
Reference in New Issue
Block a user