vmironov
04/30/2017, 2:41 PMimport kotlin.reflect.jvm.internal.impl.serialization.jvm.JvmProtoBufUtil
sealed class Optional<out T : Any>
class Some<out T : Any>(val value: T) : Optional<T>()
object None : Optional<Nothing>()
fun main(args: Array<String>) {
val metadata = Optional::class.java.declaredAnnotations.single {
it.annotationClass.java.name == "kotlin.Metadata"
}
val clazz = metadata.javaClass
val d1 = clazz.getDeclaredMethod("d1").invoke(metadata) as Array<String>
val d2 = clazz.getDeclaredMethod("d2").invoke(metadata) as Array<String>
val (resolver, proto) = JvmProtoBufUtil.readClassDataFrom(d1, d2)
proto.sealedSubclassFqNameList.forEach {
println(resolver.getString(it))
}
}