Use short jvm names for the annotation parameters
This commit is contained in:
committed by
Ilya Gorbunov
parent
22f9a6ce08
commit
208c3a51ab
+15
-7
@@ -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()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
@@ -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
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user