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.SourceInterpreter
import org.jetbrains.org.objectweb.asm.tree.analysis.SourceValue 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( class CoroutineTransformerMethodVisitor(
delegate: MethodVisitor, delegate: MethodVisitor,
access: Int, access: Int,
@@ -187,24 +195,24 @@ class CoroutineTransformerMethodVisitor(
} }
val metadata = classBuilderForCoroutineState.newAnnotation(DEBUG_METADATA_ANNOTATION_ASM_TYPE.descriptor, true) val metadata = classBuilderForCoroutineState.newAnnotation(DEBUG_METADATA_ANNOTATION_ASM_TYPE.descriptor, true)
// TODO: support inlined functions (similar to SMAP) // 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) } lines.forEach { v.visit(null, sourceFile) }
}.visitEnd() }.visitEnd()
metadata.visit("lineNumbers", lines.toIntArray()) metadata.visit(COROUTINES_METADATA_LINE_NUMBERS_JVM_NAME, lines.toIntArray())
val debugIndexToLabel = spilledToLocalMapping.withIndex().flatMap { (labelIndex, list) -> val debugIndexToLabel = spilledToLocalMapping.withIndex().flatMap { (labelIndex, list) ->
list.map { labelIndex } list.map { labelIndex }
} }
val variablesMapping = spilledToLocalMapping.flatten() val variablesMapping = spilledToLocalMapping.flatten()
metadata.visit("indexToLabel", debugIndexToLabel.toIntArray()) metadata.visit(COROUTINES_METADATA_INDEX_TO_LABEL_JVM_NAME, debugIndexToLabel.toIntArray())
metadata.visitArray("spilled").also { v -> metadata.visitArray(COROUTINES_METADATA_SPILLED_JVM_NAME).also { v ->
variablesMapping.forEach { v.visit(null, it.fieldName) } variablesMapping.forEach { v.visit(null, it.fieldName) }
}.visitEnd() }.visitEnd()
metadata.visitArray("localNames").also { v -> metadata.visitArray(COROUTINES_METADATA_LOCAL_NAMES_JVM_NAME).also { v ->
variablesMapping.forEach { v.visit(null, it.variableName) } variablesMapping.forEach { v.visit(null, it.variableName) }
}.visitEnd() }.visitEnd()
metadata.visit("methodName", methodNode.name) metadata.visit(COROUTINES_METADATA_METHOD_NAME_JVM_NAME, methodNode.name)
metadata.visit("className", containingClassInternalName) metadata.visit(COROUTINES_METADATA_CLASS_NAME_JVM_NAME, containingClassInternalName)
metadata.visitEnd() metadata.visitEnd()
} }
@@ -1,3 +1,4 @@
@kotlin.coroutines.jvm.internal.DebugMetadata
@kotlin.Metadata @kotlin.Metadata
final class LambdaWithMultipleParametersKt$box$1$1 { final class LambdaWithMultipleParametersKt$box$1$1 {
field label: int 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 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 @kotlin.Metadata
final class LambdaWithMultipleParametersKt$box$1 { final class LambdaWithMultipleParametersKt$box$1 {
synthetic final field $res: kotlin.jvm.internal.Ref$ObjectRef synthetic final field $res: kotlin.jvm.internal.Ref$ObjectRef
@@ -7,23 +7,22 @@ package kotlin.coroutines.jvm.internal
import kotlin.coroutines.Continuation import kotlin.coroutines.Continuation
// TODO: Uncomment when KT-25372 is fixed
@Target(AnnotationTarget.CLASS) @Target(AnnotationTarget.CLASS)
@SinceKotlin("1.3") @SinceKotlin("1.3")
internal annotation class DebugMetadata( internal annotation class DebugMetadata(
// @JvmName("r") @get:JvmName("f")
val sourceFiles: Array<String>, val sourceFiles: Array<String>,
// @JvmName("l") @get:JvmName("l")
val lineNumbers: IntArray, val lineNumbers: IntArray,
// @JvmName("n") @get:JvmName("n")
val localNames: Array<String>, val localNames: Array<String>,
// @JvmName("s") @get:JvmName("s")
val spilled: Array<String>, val spilled: Array<String>,
// @JvmName("i") @get:JvmName("i")
val indexToLabel: IntArray, val indexToLabel: IntArray,
// @JvmName("m") @get:JvmName("m")
val methodName: String, val methodName: String,
// @JvmName("c") @get:JvmName("c")
val className: String val className: String
) )