diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/CoroutineTransformerMethodVisitor.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/CoroutineTransformerMethodVisitor.kt index 69d663a6742..4026f3fb9e8 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/CoroutineTransformerMethodVisitor.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/CoroutineTransformerMethodVisitor.kt @@ -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() } diff --git a/compiler/testData/codegen/box/coroutines/bridges/lambdaWithMultipleParameters.txt b/compiler/testData/codegen/box/coroutines/bridges/lambdaWithMultipleParameters.txt index 62b07f3d3c2..35b5c19f80f 100644 --- a/compiler/testData/codegen/box/coroutines/bridges/lambdaWithMultipleParameters.txt +++ b/compiler/testData/codegen/box/coroutines/bridges/lambdaWithMultipleParameters.txt @@ -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 diff --git a/libraries/stdlib/coroutines/jvm/src/kotlin/coroutines/jvm/internal/DebugMetadata.kt b/libraries/stdlib/coroutines/jvm/src/kotlin/coroutines/jvm/internal/DebugMetadata.kt index b8b8adee056..aeb83f02a84 100644 --- a/libraries/stdlib/coroutines/jvm/src/kotlin/coroutines/jvm/internal/DebugMetadata.kt +++ b/libraries/stdlib/coroutines/jvm/src/kotlin/coroutines/jvm/internal/DebugMetadata.kt @@ -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, - // @JvmName("l") + @get:JvmName("l") val lineNumbers: IntArray, - // @JvmName("n") + @get:JvmName("n") val localNames: Array, - // @JvmName("s") + @get:JvmName("s") val spilled: Array, - // @JvmName("i") + @get:JvmName("i") val indexToLabel: IntArray, - // @JvmName("m") + @get:JvmName("m") val methodName: String, - // @JvmName("c") + @get:JvmName("c") val className: String )