Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import org.jetbrains.kotlin.serialization.jvm.*
- @Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE")
- fun loadOriginName(className: String) {
- val metadata = Class.forName(className).declaredAnnotations
- .filter { it.annotationClass.qualifiedName == "kotlin.Metadata" }
- .single() as Metadata
- if (metadata.k == 3 && metadata.d1.isNotEmpty()) {
- // Synthetic classes generated for lambdas/coroutines
- val (nameResolver, classProto) = JvmProtoBufUtil.readFunctionDataFrom(metadata.d1, metadata.d2)
- val nameIndex = classProto.getExtension(JvmProtoBuf.lambdaClassOriginName)
- val originName = nameResolver.getString(nameIndex)
- println("Origin class for lambda class $className is $originName")
- } else if (metadata.k == 1) {
- // Anonymous classes generated for object literals
- val (nameResolver, classProto) = JvmProtoBufUtil.readClassDataFrom(metadata.d1, metadata.d2)
- val nameIndex = classProto.getExtension(JvmProtoBuf.anonymousObjectOriginName)
- val originName = nameResolver.getString(nameIndex)
- println("Origin class for anonymous object $className is $originName")
- } else {
- println("Unable to determine origin class for class $className")
- }
- }
- fun main(args: Array<String>) {
- // Example usage (replace with an existing class name):
- loadOriginName("test.TestKt\$box\$\$inlined\$checker\$1")
- }
Add Comment
Please, Sign In to add comment