Don't create KClass and KPackage instances in <clinit>
This proved to be a fragile technique, which probably doesn't even improve performance in most cases but has lots of unexpected problems: unconditional initialization of reflection classes, increasing the size of the bytecode, bugs with <clinit> in annotations on JVM 6, inability to support conversion of a class from Kotlin to Java without recompiling clients which use it reflectively, etc.
This commit is contained in:
@@ -1,10 +1,8 @@
|
||||
@kotlin.jvm.internal.KotlinClass Example {
|
||||
public synthetic field $kotlinClass: kotlin.reflect.KClass
|
||||
private synthetic @org.jetbrains.annotations.NotNull field prop: java.lang.String
|
||||
private field prop2: int
|
||||
private synthetic field useSite: int
|
||||
private field useSite2: int
|
||||
method <clinit>(): void
|
||||
public @org.jetbrains.annotations.NotNull method getProp(): java.lang.String
|
||||
public synthetic method getProp2(): int
|
||||
public synthetic method setProp2(p0: int): void
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
@kotlin.jvm.internal.KotlinClass A {
|
||||
public synthetic field $kotlinClass: kotlin.reflect.KClass
|
||||
private @AnnField @AnnParameterField @AnnTypeField field a: int
|
||||
private @AnnField @AnnTypeField field x: int
|
||||
method <clinit>(): void
|
||||
private synthetic deprecated @AnnProperty @AnnFieldProperty @AnnParameterProperty method a$annotations(): void
|
||||
public method getA(): int
|
||||
private synthetic deprecated @AnnProperty @AnnFieldProperty method x$annotations(): void
|
||||
@@ -20,4 +18,4 @@
|
||||
|
||||
@kotlin.annotation.Target @java.lang.annotation.Retention @java.lang.annotation.Target @kotlin.jvm.internal.KotlinClass AnnProperty
|
||||
|
||||
@kotlin.annotation.Target @java.lang.annotation.Retention @java.lang.annotation.Target @kotlin.jvm.internal.KotlinClass AnnTypeField
|
||||
@kotlin.annotation.Target @java.lang.annotation.Retention @java.lang.annotation.Target @kotlin.jvm.internal.KotlinClass AnnTypeField
|
||||
|
||||
@@ -22,8 +22,6 @@
|
||||
|
||||
@kotlin.jvm.internal.KotlinLocalClass @kotlin.jvm.internal.KotlinClass LiteralsKt$foo$3 {
|
||||
inner class LiteralsKt$foo$3
|
||||
public synthetic field $kotlinClass: kotlin.reflect.KClass
|
||||
method <clinit>(): void
|
||||
method <init>(): void
|
||||
}
|
||||
|
||||
@@ -45,15 +43,11 @@
|
||||
}
|
||||
|
||||
@kotlin.jvm.internal.KotlinClass My {
|
||||
public synthetic field $kotlinClass: kotlin.reflect.KClass
|
||||
method <clinit>(): void
|
||||
public method <init>(): void
|
||||
}
|
||||
|
||||
@java.lang.Deprecated @kotlin.jvm.internal.KotlinPackage _DefaultPackage {
|
||||
public synthetic field $kotlinPackage: kotlin.reflect.KPackage
|
||||
public synthetic field $moduleName: java.lang.String
|
||||
method <clinit>(): void
|
||||
public @kotlin.jvm.internal.KotlinDelegatedMethod method bar(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function0): int
|
||||
public @kotlin.jvm.internal.KotlinDelegatedMethod @org.jetbrains.annotations.NotNull method foo(p0: int): My
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
@kotlin.jvm.internal.KotlinClass A {
|
||||
public synthetic field $kotlinClass: kotlin.reflect.KClass
|
||||
private @AnnField field p: int
|
||||
private @AnnField field x: int
|
||||
private field y: int
|
||||
method <clinit>(): void
|
||||
private synthetic deprecated @AnnProp @AnnProp2 method p$annotations(): void
|
||||
public @AnnGetter method getP(): int
|
||||
public @AnnSetter method setP(@AnnParam p0: int): void
|
||||
@@ -24,4 +22,4 @@
|
||||
|
||||
@java.lang.annotation.Retention @kotlin.jvm.internal.KotlinClass AnnProp2
|
||||
|
||||
@java.lang.annotation.Retention @kotlin.jvm.internal.KotlinClass AnnSetter
|
||||
@java.lang.annotation.Retention @kotlin.jvm.internal.KotlinClass AnnSetter
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
@kotlin.jvm.internal.KotlinClass A {
|
||||
public synthetic field $kotlinClass: kotlin.reflect.KClass
|
||||
method <clinit>(): void
|
||||
public @org.jetbrains.annotations.NotNull method f(@Ann p0: java.lang.String): java.lang.String
|
||||
public @org.jetbrains.annotations.NotNull method getP(@Ann p0: java.lang.String): java.lang.String
|
||||
public method <init>(): void
|
||||
@@ -14,9 +12,7 @@
|
||||
}
|
||||
|
||||
@java.lang.Deprecated @kotlin.jvm.internal.KotlinPackage _DefaultPackage {
|
||||
public synthetic field $kotlinPackage: kotlin.reflect.KPackage
|
||||
public synthetic field $moduleName: java.lang.String
|
||||
method <clinit>(): void
|
||||
public @kotlin.jvm.internal.KotlinDelegatedMethod @org.jetbrains.annotations.NotNull method getTopLevelP(@Ann p0: java.lang.String): java.lang.String
|
||||
public @kotlin.jvm.internal.KotlinDelegatedMethod @org.jetbrains.annotations.NotNull method topLevelF(@Ann p0: java.lang.String): java.lang.String
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user