``` import kotlin.reflect.jvm.internal.impl.serial...
# reflect
v
Copy code
import 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))
  }
}
🙏 1