[IR] Support MFVC-typed properties and interfaces delegates
Signed-off-by: Evgeniy.Zhelenskiy <Evgeniy.Zhelenskiy@jetbrains.com> #KT-1179
This commit is contained in:
committed by
Space Team
parent
4d426fc4cd
commit
38c80192f9
@@ -0,0 +1,120 @@
|
||||
// !LANGUAGE: +ValueClasses
|
||||
// WITH_STDLIB
|
||||
// WORKS_WHEN_VALUE_CLASS
|
||||
// FIR_IDENTICAL
|
||||
// TARGET_BACKEND: JVM_IR
|
||||
import kotlin.reflect.KProperty
|
||||
|
||||
|
||||
@Repeatable
|
||||
annotation class Ann
|
||||
|
||||
@[Ann Ann]
|
||||
@JvmInline
|
||||
value class A @Ann constructor(
|
||||
@[Ann Ann]
|
||||
@param:[Ann Ann]
|
||||
@property:[Ann Ann]
|
||||
@field:[Ann Ann]
|
||||
@get:[Ann Ann]
|
||||
val x: Int,
|
||||
@[Ann Ann]
|
||||
@param:[Ann Ann]
|
||||
@property:[Ann Ann]
|
||||
@field:[Ann Ann]
|
||||
@get:[Ann Ann]
|
||||
val y: Int,
|
||||
) {
|
||||
operator fun getValue(thisRef: Any?, property: KProperty<*>): Int {
|
||||
return 0
|
||||
}
|
||||
}
|
||||
|
||||
@[Ann Ann]
|
||||
@JvmInline
|
||||
value class B @Ann constructor(
|
||||
@property:[Ann Ann]
|
||||
val x: A,
|
||||
@[Ann Ann]
|
||||
@param:[Ann Ann]
|
||||
@property:[Ann Ann]
|
||||
@field:[Ann Ann]
|
||||
@get:[Ann Ann]
|
||||
val y: A?,
|
||||
)
|
||||
|
||||
@[Ann Ann]
|
||||
class C @Ann constructor(
|
||||
@property:[Ann Ann]
|
||||
@set:[Ann Ann]
|
||||
var x: A,
|
||||
@[Ann Ann]
|
||||
@param:[Ann Ann]
|
||||
@property:[Ann Ann]
|
||||
@field:[Ann Ann]
|
||||
@get:[Ann Ann]
|
||||
@set:[Ann Ann]
|
||||
@setparam:[Ann Ann]
|
||||
var y: A?,
|
||||
) {
|
||||
@delegate:[Ann Ann]
|
||||
@property:[Ann Ann]
|
||||
val z by lazy { A(-100, -200) }
|
||||
@property:[Ann Ann]
|
||||
@get:[Ann Ann]
|
||||
val t by A(-100, -200)
|
||||
@property:[Ann Ann]
|
||||
val d by ::z
|
||||
|
||||
init {
|
||||
if (2 + 2 == 4) {
|
||||
@[Ann Ann]
|
||||
val x = 4
|
||||
val y = A(1, 2)
|
||||
}
|
||||
|
||||
|
||||
fun f() {
|
||||
if (2 + 2 == 4) {
|
||||
@[Ann Ann]
|
||||
val x = 4
|
||||
val y = A(1, 2)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@[Ann Ann]
|
||||
fun A.t(a: A, b: B, @[Ann Ann] c: C) {
|
||||
if (2 + 2 == 4) {
|
||||
@[Ann Ann]
|
||||
val x = 4
|
||||
val y = A(1, 2)
|
||||
}
|
||||
|
||||
fun f() {
|
||||
if (2 + 2 == 4) {
|
||||
@[Ann Ann]
|
||||
val x1 = 4
|
||||
val y1 = A(1, 2)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@[Ann Ann]
|
||||
fun @receiver:[Ann Ann] C.t(a: A, b: B, @[Ann Ann] c: C) = 4
|
||||
|
||||
@[Ann Ann]
|
||||
var A.t
|
||||
@[Ann Ann]
|
||||
get() = A(1, 2)
|
||||
@[Ann Ann]
|
||||
set(_) = Unit
|
||||
|
||||
@[Ann Ann]
|
||||
var @receiver:[Ann Ann] C.t
|
||||
@[Ann Ann]
|
||||
get() = A(1, 2)
|
||||
@[Ann Ann]
|
||||
set(_) = Unit
|
||||
@@ -0,0 +1,134 @@
|
||||
@Ann$Container(value=[Ann, Ann])
|
||||
@kotlin.jvm.JvmInline
|
||||
@kotlin.Metadata
|
||||
public final class A {
|
||||
// source: 'annotations.kt'
|
||||
private final @Ann$Container(value=[Ann, Ann]) field field-0: int
|
||||
private final @Ann$Container(value=[Ann, Ann]) field field-1: int
|
||||
private synthetic method <init>(p0: int, p1: int): void
|
||||
public synthetic final static method box-impl(p0: int, p1: int): A
|
||||
public final static @Ann method constructor-impl(@Ann$Container(value=[Ann, Ann, Ann, Ann]) p0: int, @Ann$Container(value=[Ann, Ann, Ann, Ann]) p1: int): void
|
||||
public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
|
||||
public static method equals-impl(p0: int, p1: int, p2: java.lang.Object): boolean
|
||||
public final static method equals-sUp7gFk(p0: int, p1: int, p2: int, p3: int): boolean
|
||||
public final static method getValue-impl(p0: int, p1: int, @org.jetbrains.annotations.Nullable p2: java.lang.Object, @org.jetbrains.annotations.NotNull p3: kotlin.reflect.KProperty): int
|
||||
public synthetic deprecated static @Ann$Container(value=[Ann, Ann]) method getX$annotations(): void
|
||||
public synthetic deprecated static @Ann$Container(value=[Ann, Ann]) method getY$annotations(): void
|
||||
public method hashCode(): int
|
||||
public static method hashCode-impl(p0: int, p1: int): int
|
||||
public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
|
||||
public static method toString-impl(p0: int, p1: int): java.lang.String
|
||||
public synthetic final method unbox-impl-0(): int
|
||||
public synthetic final method unbox-impl-1(): int
|
||||
public inner class Ann$Container
|
||||
}
|
||||
|
||||
@kotlin.jvm.internal.RepeatableContainer
|
||||
@java.lang.annotation.Retention(value=RUNTIME)
|
||||
@kotlin.Metadata
|
||||
public annotation class Ann$Container {
|
||||
// source: 'annotations.kt'
|
||||
public abstract method value(): Ann[]
|
||||
public inner class Ann$Container
|
||||
}
|
||||
|
||||
@kotlin.annotation.Repeatable
|
||||
@java.lang.annotation.Retention(value=RUNTIME)
|
||||
@java.lang.annotation.Repeatable(value=Ann$Container::class)
|
||||
@kotlin.Metadata
|
||||
public annotation class Ann {
|
||||
// source: 'annotations.kt'
|
||||
public inner class Ann$Container
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
public final class AnnotationsKt {
|
||||
// source: 'annotations.kt'
|
||||
public synthetic deprecated static @Ann$Container(value=[Ann, Ann]) method getT$annotations(p0: A): void
|
||||
public synthetic deprecated static @Ann$Container(value=[Ann, Ann]) method getT$annotations(p0: C): void
|
||||
public final static @Ann$Container(value=[Ann, Ann]) @org.jetbrains.annotations.NotNull method getT(@Ann$Container(value=[Ann, Ann]) @org.jetbrains.annotations.NotNull p0: C): A
|
||||
public final static @Ann$Container(value=[Ann, Ann]) @org.jetbrains.annotations.NotNull method getT-sUp7gFk(p0: int, p1: int): A
|
||||
public final static @Ann$Container(value=[Ann, Ann]) method setT-GPBa7dw(@Ann$Container(value=[Ann, Ann]) @org.jetbrains.annotations.NotNull p0: C, p1: int, p2: int): void
|
||||
public final static @Ann$Container(value=[Ann, Ann]) method setT-GPBa7dw(p0: int, p1: int, p2: int, p3: int): void
|
||||
public final static @Ann$Container(value=[Ann, Ann]) method t-552ch2I(@Ann$Container(value=[Ann, Ann]) @org.jetbrains.annotations.NotNull p0: C, p1: int, p2: int, p3: int, p4: int, @org.jetbrains.annotations.Nullable p5: A, @Ann$Container(value=[Ann, Ann]) @org.jetbrains.annotations.NotNull p6: C): int
|
||||
public final static @Ann$Container(value=[Ann, Ann]) method t-552ch2I(p0: int, p1: int, p2: int, p3: int, p4: int, p5: int, @org.jetbrains.annotations.Nullable p6: A, @Ann$Container(value=[Ann, Ann]) @org.jetbrains.annotations.NotNull p7: C): void
|
||||
private final static method t_552ch2I$f(): void
|
||||
public inner class Ann$Container
|
||||
}
|
||||
|
||||
@Ann$Container(value=[Ann, Ann])
|
||||
@kotlin.jvm.JvmInline
|
||||
@kotlin.Metadata
|
||||
public final class B {
|
||||
// source: 'annotations.kt'
|
||||
private final field field-0-0: int
|
||||
private final field field-0-1: int
|
||||
private final @Ann$Container(value=[Ann, Ann]) @org.jetbrains.annotations.Nullable field field-1: A
|
||||
private synthetic method <init>(p0: int, p1: int, p2: A): void
|
||||
public synthetic final static method box-impl(p0: int, p1: int, p2: A): B
|
||||
public final static @Ann method constructor-impl(p0: int, p1: int, @Ann$Container(value=[Ann, Ann, Ann, Ann]) @org.jetbrains.annotations.Nullable p2: A): void
|
||||
public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
|
||||
public static method equals-impl(p0: int, p1: int, p2: A, p3: java.lang.Object): boolean
|
||||
public final static method equals-sUp7gFk(p0: int, p1: int, p2: A, p3: int, p4: int, p5: A): boolean
|
||||
public synthetic deprecated static @Ann$Container(value=[Ann, Ann]) method getX$annotations(): void
|
||||
public synthetic deprecated static @Ann$Container(value=[Ann, Ann]) method getY$annotations(): void
|
||||
public method hashCode(): int
|
||||
public static method hashCode-impl(p0: int, p1: int, p2: A): int
|
||||
public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
|
||||
public static method toString-impl(p0: int, p1: int, p2: A): java.lang.String
|
||||
public synthetic final method unbox-impl-0(): A
|
||||
public synthetic final method unbox-impl-0-0(): int
|
||||
public synthetic final method unbox-impl-0-1(): int
|
||||
public synthetic final method unbox-impl-1(): A
|
||||
public inner class Ann$Container
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
final class C$z$2 {
|
||||
// source: 'annotations.kt'
|
||||
enclosing method C.<init>(IILA;)V
|
||||
public final static field INSTANCE: C$z$2
|
||||
inner (anonymous) class C$z$2
|
||||
static method <clinit>(): void
|
||||
method <init>(): void
|
||||
public final @org.jetbrains.annotations.NotNull method invoke(): A
|
||||
public synthetic bridge method invoke(): java.lang.Object
|
||||
}
|
||||
|
||||
@Ann$Container(value=[Ann, Ann])
|
||||
@kotlin.Metadata
|
||||
public final class C {
|
||||
// source: 'annotations.kt'
|
||||
synthetic final static field $$delegatedProperties: kotlin.reflect.KProperty[]
|
||||
private final field t$delegate-0: int
|
||||
private final field t$delegate-1: int
|
||||
private field x-0: int
|
||||
private field x-1: int
|
||||
private @Ann$Container(value=[Ann, Ann]) @org.jetbrains.annotations.Nullable field y: A
|
||||
private final @Ann$Container(value=[Ann, Ann]) @org.jetbrains.annotations.NotNull field z$delegate: kotlin.Lazy
|
||||
inner (anonymous) class C$z$2
|
||||
static method <clinit>(): void
|
||||
public synthetic @Ann method <init>(p0: int, p1: int, @Ann$Container(value=[Ann, Ann, Ann, Ann]) p2: A, p3: kotlin.jvm.internal.DefaultConstructorMarker): void
|
||||
private method <init>(p0: int, p1: int, p2: A): void
|
||||
private final static method _init_$f(): void
|
||||
public synthetic deprecated static @Ann$Container(value=[Ann, Ann]) method getD$annotations(): void
|
||||
private static method getD$delegate(p0: C): java.lang.Object
|
||||
public final @org.jetbrains.annotations.NotNull method getD(): A
|
||||
public synthetic final method getD-0(): int
|
||||
public synthetic final method getD-1(): int
|
||||
public synthetic deprecated static @Ann$Container(value=[Ann, Ann]) method getT$annotations(): void
|
||||
public final @Ann$Container(value=[Ann, Ann]) method getT(): int
|
||||
public synthetic deprecated static @Ann$Container(value=[Ann, Ann]) method getX$annotations(): void
|
||||
public final @org.jetbrains.annotations.NotNull method getX(): A
|
||||
public synthetic final method getX-0(): int
|
||||
public synthetic final method getX-1(): int
|
||||
public synthetic deprecated static @Ann$Container(value=[Ann, Ann]) method getY$annotations(): void
|
||||
public final @Ann$Container(value=[Ann, Ann]) @org.jetbrains.annotations.Nullable method getY(): A
|
||||
public synthetic deprecated static @Ann$Container(value=[Ann, Ann]) method getZ$annotations(): void
|
||||
public final @org.jetbrains.annotations.NotNull method getZ(): A
|
||||
public synthetic final method getZ-0(): int
|
||||
public synthetic final method getZ-1(): int
|
||||
public final @Ann$Container(value=[Ann, Ann]) method setX-sUp7gFk(p0: int, p1: int): void
|
||||
public final @Ann$Container(value=[Ann, Ann]) method setY(@Ann$Container(value=[Ann, Ann]) @org.jetbrains.annotations.Nullable p0: A): void
|
||||
public inner class Ann$Container
|
||||
}
|
||||
Reference in New Issue
Block a user