Use short jvm names for the annotation parameters

This commit is contained in:
Ilmir Usmanov
2018-08-22 17:11:22 +03:00
committed by Ilya Gorbunov
parent 22f9a6ce08
commit 208c3a51ab
3 changed files with 24 additions and 15 deletions
@@ -34,6 +34,14 @@ import org.jetbrains.org.objectweb.asm.tree.analysis.Frame
import org.jetbrains.org.objectweb.asm.tree.analysis.SourceInterpreter
import org.jetbrains.org.objectweb.asm.tree.analysis.SourceValue
private const val COROUTINES_METADATA_SOURCE_FILES_JVM_NAME = "f"
private const val COROUTINES_METADATA_LINE_NUMBERS_JVM_NAME = "l"
private const val COROUTINES_METADATA_LOCAL_NAMES_JVM_NAME = "n"
private const val COROUTINES_METADATA_SPILLED_JVM_NAME = "s"
private const val COROUTINES_METADATA_INDEX_TO_LABEL_JVM_NAME = "i"
private const val COROUTINES_METADATA_METHOD_NAME_JVM_NAME = "m"
private const val COROUTINES_METADATA_CLASS_NAME_JVM_NAME = "c"
class CoroutineTransformerMethodVisitor(
delegate: MethodVisitor,
access: Int,
@@ -187,24 +195,24 @@ class CoroutineTransformerMethodVisitor(
}
val metadata = classBuilderForCoroutineState.newAnnotation(DEBUG_METADATA_ANNOTATION_ASM_TYPE.descriptor, true)
// TODO: support inlined functions (similar to SMAP)
metadata.visitArray("sourceFiles").also { v ->
metadata.visitArray(COROUTINES_METADATA_SOURCE_FILES_JVM_NAME).also { v ->
lines.forEach { v.visit(null, sourceFile) }
}.visitEnd()
metadata.visit("lineNumbers", lines.toIntArray())
metadata.visit(COROUTINES_METADATA_LINE_NUMBERS_JVM_NAME, lines.toIntArray())
val debugIndexToLabel = spilledToLocalMapping.withIndex().flatMap { (labelIndex, list) ->
list.map { labelIndex }
}
val variablesMapping = spilledToLocalMapping.flatten()
metadata.visit("indexToLabel", debugIndexToLabel.toIntArray())
metadata.visitArray("spilled").also { v ->
metadata.visit(COROUTINES_METADATA_INDEX_TO_LABEL_JVM_NAME, debugIndexToLabel.toIntArray())
metadata.visitArray(COROUTINES_METADATA_SPILLED_JVM_NAME).also { v ->
variablesMapping.forEach { v.visit(null, it.fieldName) }
}.visitEnd()
metadata.visitArray("localNames").also { v ->
metadata.visitArray(COROUTINES_METADATA_LOCAL_NAMES_JVM_NAME).also { v ->
variablesMapping.forEach { v.visit(null, it.variableName) }
}.visitEnd()
metadata.visit("methodName", methodNode.name)
metadata.visit("className", containingClassInternalName)
metadata.visit(COROUTINES_METADATA_METHOD_NAME_JVM_NAME, methodNode.name)
metadata.visit(COROUTINES_METADATA_CLASS_NAME_JVM_NAME, containingClassInternalName)
metadata.visitEnd()
}
@@ -1,3 +1,4 @@
@kotlin.coroutines.jvm.internal.DebugMetadata
@kotlin.Metadata
final class LambdaWithMultipleParametersKt$box$1$1 {
field label: int
@@ -15,6 +16,7 @@ final class LambdaWithMultipleParametersKt$box$1$1 {
public final @org.jetbrains.annotations.Nullable method invokeSuspend(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object
}
@kotlin.coroutines.jvm.internal.DebugMetadata
@kotlin.Metadata
final class LambdaWithMultipleParametersKt$box$1 {
synthetic final field $res: kotlin.jvm.internal.Ref$ObjectRef
@@ -7,23 +7,22 @@ package kotlin.coroutines.jvm.internal
import kotlin.coroutines.Continuation
// TODO: Uncomment when KT-25372 is fixed
@Target(AnnotationTarget.CLASS)
@SinceKotlin("1.3")
internal annotation class DebugMetadata(
// @JvmName("r")
@get:JvmName("f")
val sourceFiles: Array<String>,
// @JvmName("l")
@get:JvmName("l")
val lineNumbers: IntArray,
// @JvmName("n")
@get:JvmName("n")
val localNames: Array<String>,
// @JvmName("s")
@get:JvmName("s")
val spilled: Array<String>,
// @JvmName("i")
@get:JvmName("i")
val indexToLabel: IntArray,
// @JvmName("m")
@get:JvmName("m")
val methodName: String,
// @JvmName("c")
@get:JvmName("c")
val className: String
)