Add kotlinp, a tool to print Kotlin metadata in class/module files
At the moment, it's not published anywhere, but that may change soon #KT-23198
This commit is contained in:
+52
@@ -0,0 +1,52 @@
|
||||
import kotlin.reflect.KClass
|
||||
|
||||
@Target(AnnotationTarget.TYPE)
|
||||
annotation class A(
|
||||
val z: Boolean,
|
||||
val c: Char,
|
||||
val b: Byte,
|
||||
val s: Short,
|
||||
val i: Int,
|
||||
val f: Float,
|
||||
val j: Long,
|
||||
val d: Double,
|
||||
val za: BooleanArray,
|
||||
val ca: CharArray,
|
||||
val ba: ByteArray,
|
||||
val sa: ShortArray,
|
||||
val ia: IntArray,
|
||||
val fa: FloatArray,
|
||||
val ja: LongArray,
|
||||
val da: DoubleArray,
|
||||
val str: String,
|
||||
val enum: AnnotationTarget,
|
||||
val klass: KClass<*>,
|
||||
val anno: B
|
||||
)
|
||||
|
||||
annotation class B(val value: String)
|
||||
|
||||
class C {
|
||||
fun typeAnnotation(): @A(
|
||||
true,
|
||||
'x',
|
||||
1.toByte(),
|
||||
42.toShort(),
|
||||
42424242,
|
||||
-2.72f,
|
||||
239239239239239L,
|
||||
3.14,
|
||||
[true],
|
||||
['\''],
|
||||
[1.toByte()],
|
||||
[42.toShort()],
|
||||
[42424242],
|
||||
[-2.72f],
|
||||
[239239239239239L],
|
||||
[3.14],
|
||||
"aba\ncaba'\"\t\u0001\u0002\uA66E",
|
||||
AnnotationTarget.CLASS,
|
||||
C::class,
|
||||
B(value = "aba\ncaba'\"\t\u0001\u0002\uA66E")
|
||||
) Unit {}
|
||||
}
|
||||
+108
@@ -0,0 +1,108 @@
|
||||
// A.class
|
||||
// ------------------------------------------
|
||||
public final annotation class A : kotlin/Annotation {
|
||||
|
||||
// signature: <init>(ZCBSIFJD[Z[C[B[S[I[F[J[DLjava/lang/String;Lkotlin/annotation/AnnotationTarget;Lkotlin/reflect/KClass;LB;)V
|
||||
public /* primary */ constructor(z: kotlin/Boolean, c: kotlin/Char, b: kotlin/Byte, s: kotlin/Short, i: kotlin/Int, f: kotlin/Float, j: kotlin/Long, d: kotlin/Double, za: kotlin/BooleanArray, ca: kotlin/CharArray, ba: kotlin/ByteArray, sa: kotlin/ShortArray, ia: kotlin/IntArray, fa: kotlin/FloatArray, ja: kotlin/LongArray, da: kotlin/DoubleArray, str: kotlin/String, enum: kotlin/annotation/AnnotationTarget, klass: kotlin/reflect/KClass<*>, anno: B)
|
||||
|
||||
// field: anno:LB;
|
||||
public final val anno: B
|
||||
public final get
|
||||
|
||||
// field: b:B
|
||||
public final val b: kotlin/Byte
|
||||
public final get
|
||||
|
||||
// field: ba:[B
|
||||
public final val ba: kotlin/ByteArray
|
||||
public final get
|
||||
|
||||
// field: c:C
|
||||
public final val c: kotlin/Char
|
||||
public final get
|
||||
|
||||
// field: ca:[C
|
||||
public final val ca: kotlin/CharArray
|
||||
public final get
|
||||
|
||||
// field: d:D
|
||||
public final val d: kotlin/Double
|
||||
public final get
|
||||
|
||||
// field: da:[D
|
||||
public final val da: kotlin/DoubleArray
|
||||
public final get
|
||||
|
||||
// field: enum:Lkotlin/annotation/AnnotationTarget;
|
||||
public final val enum: kotlin/annotation/AnnotationTarget
|
||||
public final get
|
||||
|
||||
// field: f:F
|
||||
public final val f: kotlin/Float
|
||||
public final get
|
||||
|
||||
// field: fa:[F
|
||||
public final val fa: kotlin/FloatArray
|
||||
public final get
|
||||
|
||||
// field: i:I
|
||||
public final val i: kotlin/Int
|
||||
public final get
|
||||
|
||||
// field: ia:[I
|
||||
public final val ia: kotlin/IntArray
|
||||
public final get
|
||||
|
||||
// field: j:J
|
||||
public final val j: kotlin/Long
|
||||
public final get
|
||||
|
||||
// field: ja:[J
|
||||
public final val ja: kotlin/LongArray
|
||||
public final get
|
||||
|
||||
// field: klass:Lkotlin/reflect/KClass;
|
||||
public final val klass: kotlin/reflect/KClass<*>
|
||||
public final get
|
||||
|
||||
// field: s:S
|
||||
public final val s: kotlin/Short
|
||||
public final get
|
||||
|
||||
// field: sa:[S
|
||||
public final val sa: kotlin/ShortArray
|
||||
public final get
|
||||
|
||||
// field: str:Ljava/lang/String;
|
||||
public final val str: kotlin/String
|
||||
public final get
|
||||
|
||||
// field: z:Z
|
||||
public final val z: kotlin/Boolean
|
||||
public final get
|
||||
|
||||
// field: za:[Z
|
||||
public final val za: kotlin/BooleanArray
|
||||
public final get
|
||||
}
|
||||
// B.class
|
||||
// ------------------------------------------
|
||||
public final annotation class B : kotlin/Annotation {
|
||||
|
||||
// signature: <init>(Ljava/lang/String;)V
|
||||
public /* primary */ constructor(value: kotlin/String)
|
||||
|
||||
// field: value:Ljava/lang/String;
|
||||
public final val value: kotlin/String
|
||||
public final get
|
||||
}
|
||||
// C.class
|
||||
// ------------------------------------------
|
||||
public final class C : kotlin/Any {
|
||||
|
||||
// signature: <init>()V
|
||||
public /* primary */ constructor()
|
||||
|
||||
// signature: typeAnnotation()V
|
||||
public final fun typeAnnotation(): @A(z = true, c = 'x', b = 1.toByte(), s = 42.toShort(), i = 42424242, f = -2.72f, j = 239239239239239L, d = 3.14, za = [true], ca = ['\''], ba = [1.toByte()], sa = [42.toShort()], ia = [42424242], fa = [-2.72f], ja = [239239239239239L], da = [3.14], str = "aba\ncaba'\"\t\u0001\u0002ꙮ", enum = kotlin/annotation/AnnotationTarget.CLASS, klass = C::class, anno = B(value = "aba\ncaba'\"\t\u0001\u0002ꙮ")) kotlin/Unit
|
||||
}
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
fun test() {
|
||||
val f = {}
|
||||
val g = fun Unit.(s: IntArray?, t: Set<Double>): String { return "" }
|
||||
}
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
// LambdaKt.class
|
||||
// ------------------------------------------
|
||||
package {
|
||||
|
||||
// signature: test()V
|
||||
public final fun test(): kotlin/Unit
|
||||
}
|
||||
// LambdaKt$test$f$1.class
|
||||
// ------------------------------------------
|
||||
lambda {
|
||||
|
||||
// signature: invoke()V
|
||||
local final fun <anonymous>(): kotlin/Unit
|
||||
}
|
||||
// LambdaKt$test$g$1.class
|
||||
// ------------------------------------------
|
||||
lambda {
|
||||
|
||||
// signature: invoke(Lkotlin/Unit;[ILjava/util/Set;)Ljava/lang/String;
|
||||
local final fun kotlin/Unit.<no name provided>(s: kotlin/IntArray?, t: kotlin/collections/Set<kotlin/Double>): kotlin/String
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
class A {
|
||||
init {
|
||||
class L<T> {
|
||||
inner class I
|
||||
|
||||
fun x(l: L<I>) {}
|
||||
}
|
||||
}
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
// A.class
|
||||
// ------------------------------------------
|
||||
public final class A : kotlin/Any {
|
||||
|
||||
// signature: <init>()V
|
||||
public /* primary */ constructor()
|
||||
}
|
||||
// A$L.class
|
||||
// ------------------------------------------
|
||||
local final class .A$L<T#0 /* T */> : kotlin/Any {
|
||||
|
||||
// signature: <init>()V
|
||||
public /* primary */ constructor()
|
||||
|
||||
// signature: x(LA$L;)V
|
||||
public final fun x(l: .A$L<.A$L<T#0>.I>): kotlin/Unit
|
||||
|
||||
// nested class: I
|
||||
}
|
||||
// A$L$I.class
|
||||
// ------------------------------------------
|
||||
local final inner class .A$L.I : kotlin/Any {
|
||||
|
||||
// signature: <init>(LA$L;)V
|
||||
public /* primary */ constructor()
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
@file:JvmMultifileClass
|
||||
@file:JvmName("File")
|
||||
package test
|
||||
|
||||
const val x = 42
|
||||
@@ -0,0 +1,14 @@
|
||||
// test/File.class
|
||||
// ------------------------------------------
|
||||
multi-file class {
|
||||
// test/File__MultiFileClassKt
|
||||
}
|
||||
// test/File__MultiFileClassKt.class
|
||||
// ------------------------------------------
|
||||
package {
|
||||
// facade: test/File
|
||||
|
||||
// field: x:I
|
||||
public final const val x: kotlin/Int /* = ... */
|
||||
public final get
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
interface A {
|
||||
interface B {
|
||||
interface C
|
||||
}
|
||||
|
||||
companion object D {
|
||||
enum class E {
|
||||
E1,
|
||||
E2,
|
||||
}
|
||||
|
||||
sealed class F {
|
||||
class G : F()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
// A.class
|
||||
// ------------------------------------------
|
||||
public abstract interface A : kotlin/Any {
|
||||
|
||||
// companion object: D
|
||||
|
||||
// nested class: B
|
||||
|
||||
// nested class: D
|
||||
}
|
||||
// A$B.class
|
||||
// ------------------------------------------
|
||||
public abstract interface A.B : kotlin/Any {
|
||||
|
||||
// nested class: C
|
||||
}
|
||||
// A$B$C.class
|
||||
// ------------------------------------------
|
||||
public abstract interface A.B.C : kotlin/Any {
|
||||
}
|
||||
// A$D.class
|
||||
// ------------------------------------------
|
||||
public final companion object A.D : kotlin/Any {
|
||||
|
||||
// signature: <init>()V
|
||||
private /* primary */ constructor()
|
||||
|
||||
// nested class: E
|
||||
|
||||
// nested class: F
|
||||
}
|
||||
// A$D$E.class
|
||||
// ------------------------------------------
|
||||
public final enum class A.D.E : kotlin/Enum<A.D.E> {
|
||||
|
||||
// signature: <init>(Ljava/lang/String;I)V
|
||||
private /* primary */ constructor()
|
||||
|
||||
E1,
|
||||
|
||||
E2,
|
||||
}
|
||||
// A$D$F.class
|
||||
// ------------------------------------------
|
||||
public sealed class A.D.F : kotlin/Any {
|
||||
|
||||
// signature: <init>()V
|
||||
private /* primary */ constructor()
|
||||
|
||||
// nested class: G
|
||||
|
||||
// sealed subclass: A.D.F.G
|
||||
}
|
||||
// A$D$F$G.class
|
||||
// ------------------------------------------
|
||||
public final class A.D.F.G : A.D.F {
|
||||
|
||||
// signature: <init>()V
|
||||
public /* primary */ constructor()
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
import java.io.File
|
||||
|
||||
class PlatformType {
|
||||
fun nullability() = File(".").absoluteFile
|
||||
|
||||
fun mutability() = File(".").toURI().toURL().openConnection().headerFields
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
// PlatformType.class
|
||||
// ------------------------------------------
|
||||
public final class PlatformType : kotlin/Any {
|
||||
|
||||
// signature: <init>()V
|
||||
public /* primary */ constructor()
|
||||
|
||||
// signature: mutability()Ljava/util/Map;
|
||||
public final fun mutability(): kotlin/collections/MutableMap<kotlin/String!, kotlin/collections/MutableList<kotlin/String!>..kotlin/collections/List<kotlin/String!>?>..kotlin/collections/Map<kotlin/String!, kotlin/collections/MutableList<kotlin/String!>..kotlin/collections/List<kotlin/String!>?>?
|
||||
|
||||
// signature: nullability()Ljava/io/File;
|
||||
public final fun nullability(): java/io/File!
|
||||
}
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
class SimpleClass<in A>(val p: Int = 42) {
|
||||
constructor(s: Array<String?>?) : this(s?.size ?: 0)
|
||||
|
||||
var x: Long = p.toLong()
|
||||
external get
|
||||
@JvmName("SET_X") set
|
||||
|
||||
internal fun <U : A, V, A> A.f(vararg z: Map<V, U?>): Set<*> where V : A {
|
||||
error("")
|
||||
}
|
||||
|
||||
protected suspend inline fun <reified T> g(crossinline a: () -> A, noinline b: suspend () -> T) {}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
// SimpleClass.class
|
||||
// ------------------------------------------
|
||||
public final class SimpleClass<in T#0 /* A */> : kotlin/Any {
|
||||
|
||||
// signature: <init>([Ljava/lang/String;)V
|
||||
public constructor(s: kotlin/Array<kotlin/String?>?)
|
||||
|
||||
// signature: <init>(I)V
|
||||
public /* primary */ constructor(p: kotlin/Int /* = ... */)
|
||||
|
||||
// requires language version 1.1.0 (level=ERROR)
|
||||
// signature: g(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object;
|
||||
protected final inline suspend fun <reified T#1 /* T */> g(crossinline a: kotlin/Function0<T#0>, noinline b: suspend kotlin/Function1<kotlin/coroutines/experimental/Continuation<T#1>, kotlin/Any?>): kotlin/Unit
|
||||
|
||||
// signature: f$test_module(Ljava/lang/Object;[Ljava/util/Map;)Ljava/util/Set;
|
||||
internal final fun <T#1 /* U */ : T#3, T#2 /* V */ : T#3, T#3 /* A */> T#3.f(vararg z: kotlin/collections/Map<T#2, T#1?> /* kotlin/Array<out kotlin/collections/Map<T#2, T#1?>> */): kotlin/collections/Set<*>
|
||||
|
||||
// field: p:I
|
||||
// getter: getP()I
|
||||
public final val p: kotlin/Int
|
||||
public final get
|
||||
|
||||
// field: x:J
|
||||
// getter: getX()J
|
||||
// setter: SET_X(J)V
|
||||
public final var x: kotlin/Long
|
||||
public final /* non-default */ external get
|
||||
public final /* non-default */ set(<set-?>: kotlin/Long)
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
internal inline fun <reified X : Any> topLevelFun(x: X) = X::class
|
||||
|
||||
var topLevelProp: String? = null
|
||||
private set
|
||||
|
||||
typealias F<T, U> = Map<T, (StringBuilder) -> U?>
|
||||
|
||||
typealias G<S> = F<List<S>, Set<S>>
|
||||
@@ -0,0 +1,18 @@
|
||||
// SimplePackageKt.class
|
||||
// ------------------------------------------
|
||||
package {
|
||||
|
||||
// signature: topLevelFun(Ljava/lang/Object;)Lkotlin/reflect/KClass;
|
||||
internal final inline fun <reified T#0 /* X */ : kotlin/Any> topLevelFun(x: T#0): kotlin/reflect/KClass<T#0>
|
||||
|
||||
// field: topLevelProp:Ljava/lang/String;
|
||||
// getter: getTopLevelProp()Ljava/lang/String;
|
||||
// setter: setTopLevelProp(Ljava/lang/String;)V
|
||||
public final var topLevelProp: kotlin/String?
|
||||
public final get
|
||||
private final /* non-default */ set(<set-?>: kotlin/String?)
|
||||
|
||||
public typealias F<T#0 /* T */, T#1 /* U */> = kotlin/collections/Map<T#0, kotlin/Function1<kotlin/text/StringBuilder^, T#1?>> /* = kotlin/collections/Map<T#0, kotlin/Function1<java/lang/StringBuilder /* = kotlin/text/StringBuilder^ */, T#1?>> */
|
||||
|
||||
public typealias G<T#0 /* S */> = F^<kotlin/collections/List<T#0>, kotlin/collections/Set<T#0>> /* = kotlin/collections/Map<kotlin/collections/List<T#0>, kotlin/Function1<java/lang/StringBuilder /* = kotlin/text/StringBuilder^ */, kotlin/collections/Set<T#0>?>> */
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
fun f(a: AnnotationTarget): String? {
|
||||
return when (a) {
|
||||
AnnotationTarget.FUNCTION -> "1"
|
||||
AnnotationTarget.PROPERTY -> "2"
|
||||
else -> null
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
// SyntheticClassKt.class
|
||||
// ------------------------------------------
|
||||
package {
|
||||
|
||||
// signature: f(Lkotlin/annotation/AnnotationTarget;)Ljava/lang/String;
|
||||
public final fun f(a: kotlin/annotation/AnnotationTarget): kotlin/String?
|
||||
}
|
||||
// SyntheticClassKt$WhenMappings.class
|
||||
// ------------------------------------------
|
||||
synthetic class
|
||||
@@ -0,0 +1,17 @@
|
||||
class A<T> {
|
||||
fun <T> a(t: T) {}
|
||||
|
||||
inner class B<U, V : U> {
|
||||
fun <T, U> b(t: T, u: U, v: V) where T : Comparable<T>, T : Cloneable {}
|
||||
|
||||
fun bb(t: T) {}
|
||||
|
||||
inner class C<T, U> {
|
||||
fun <T, U> c(t: T?, u: U?) {}
|
||||
|
||||
fun cc(t: T?, u: U?) {}
|
||||
|
||||
fun z(c: A<Int>.B<Any, Byte>.C<Unit, Long>) {}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
// A.class
|
||||
// ------------------------------------------
|
||||
public final class A<T#0 /* T */> : kotlin/Any {
|
||||
|
||||
// signature: <init>()V
|
||||
public /* primary */ constructor()
|
||||
|
||||
// signature: a(Ljava/lang/Object;)V
|
||||
public final fun <T#1 /* T */> a(t: T#1): kotlin/Unit
|
||||
|
||||
// nested class: B
|
||||
}
|
||||
// A$B.class
|
||||
// ------------------------------------------
|
||||
public final inner class A.B<T#1 /* U */, T#2 /* V */ : T#1> : kotlin/Any {
|
||||
|
||||
// signature: <init>(LA;)V
|
||||
public /* primary */ constructor()
|
||||
|
||||
// signature: b(Ljava/lang/Comparable;Ljava/lang/Object;Ljava/lang/Object;)V
|
||||
public final fun <T#3 /* T */ : kotlin/Comparable<T#3> & kotlin/Cloneable, T#4 /* U */> b(t: T#3, u: T#4, v: T#2): kotlin/Unit
|
||||
|
||||
// signature: bb(Ljava/lang/Object;)V
|
||||
public final fun bb(t: T#0): kotlin/Unit
|
||||
|
||||
// nested class: C
|
||||
}
|
||||
// A$B$C.class
|
||||
// ------------------------------------------
|
||||
public final inner class A.B.C<T#3 /* T */, T#4 /* U */> : kotlin/Any {
|
||||
|
||||
// signature: <init>(LA$B;)V
|
||||
public /* primary */ constructor()
|
||||
|
||||
// signature: c(Ljava/lang/Object;Ljava/lang/Object;)V
|
||||
public final fun <T#5 /* T */, T#6 /* U */> c(t: T#5?, u: T#6?): kotlin/Unit
|
||||
|
||||
// signature: cc(Ljava/lang/Object;Ljava/lang/Object;)V
|
||||
public final fun cc(t: T#3?, u: T#4?): kotlin/Unit
|
||||
|
||||
// signature: z(LA$B$C;)V
|
||||
public final fun z(c: A<kotlin/Int>.B<kotlin/Any, kotlin/Byte>.C<kotlin/Unit, kotlin/Long>): kotlin/Unit
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
@file:Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE")
|
||||
package test
|
||||
|
||||
import kotlin.internal.RequireKotlin
|
||||
import kotlin.internal.RequireKotlinVersionKind
|
||||
|
||||
@RequireKotlin("1.2", "Klass must not be used!", DeprecationLevel.WARNING, RequireKotlinVersionKind.API_VERSION)
|
||||
class Klass
|
||||
|
||||
class Konstructor @RequireKotlin("42.0", "Konstructor must not be used!", DeprecationLevel.WARNING, RequireKotlinVersionKind.LANGUAGE_VERSION, 42) constructor()
|
||||
|
||||
@RequireKotlin("1.1", level = DeprecationLevel.HIDDEN, versionKind = RequireKotlinVersionKind.API_VERSION, errorCode = 314)
|
||||
typealias Typealias = String
|
||||
|
||||
@RequireKotlin("1.2.40", level = DeprecationLevel.ERROR, versionKind = RequireKotlinVersionKind.COMPILER_VERSION)
|
||||
fun function() {}
|
||||
|
||||
@RequireKotlin("1.3", "property must not be used!")
|
||||
val property = ""
|
||||
@@ -0,0 +1,34 @@
|
||||
// test/Klass.class
|
||||
// ------------------------------------------
|
||||
// requires API version 1.2.0 (level=WARNING, message="Klass must not be used!")
|
||||
public final class test/Klass : kotlin/Any {
|
||||
|
||||
// signature: <init>()V
|
||||
public /* primary */ constructor()
|
||||
}
|
||||
// test/Konstructor.class
|
||||
// ------------------------------------------
|
||||
public final class test/Konstructor : kotlin/Any {
|
||||
|
||||
// requires language version 42.0.0 (level=WARNING, errorCode=42, message="Konstructor must not be used!")
|
||||
// signature: <init>()V
|
||||
public /* primary */ constructor()
|
||||
}
|
||||
// test/VersionRequirementKt.class
|
||||
// ------------------------------------------
|
||||
package {
|
||||
|
||||
// requires compiler version 1.2.40 (level=ERROR)
|
||||
// signature: function()V
|
||||
public final fun function(): kotlin/Unit
|
||||
|
||||
// requires language version 1.3.0 (level=ERROR, message="property must not be used!")
|
||||
// field: property:Ljava/lang/String;
|
||||
// getter: getProperty()Ljava/lang/String;
|
||||
// synthetic method for annotations: property$annotations()V
|
||||
public final val property: kotlin/String /* = ... */
|
||||
public final get
|
||||
|
||||
// requires API version 1.1.0 (level=HIDDEN, errorCode=314)
|
||||
public typealias Typealias = kotlin/String /* = kotlin/String */
|
||||
}
|
||||
Reference in New Issue
Block a user