diff --git a/idea/tests/org/jetbrains/kotlin/idea/debugger/dexLikeBytecodePatch.kt b/idea/tests/org/jetbrains/kotlin/idea/debugger/dexLikeBytecodePatch.kt index 9082dd2b526..13e4fca6d5e 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/debugger/dexLikeBytecodePatch.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/debugger/dexLikeBytecodePatch.kt @@ -16,11 +16,9 @@ package org.jetbrains.kotlin.idea.debugger -import org.jetbrains.org.objectweb.asm.ClassReader -import org.jetbrains.org.objectweb.asm.ClassVisitor -import org.jetbrains.org.objectweb.asm.ClassWriter -import org.jetbrains.org.objectweb.asm.Opcodes +import org.jetbrains.org.objectweb.asm.* import java.io.File +import java.util.* val DEX_BEFORE_PATCH_EXTENSION = "before_dex" @@ -38,6 +36,7 @@ private fun applyDexLikePatch(file: File) { val visitor = writer .withRemoveSourceDebugExtensionVisitor() + .withRemoveSameLinesInLineTableVisitor() reader.accept(visitor, 0) @@ -50,4 +49,24 @@ private fun ClassVisitor.withRemoveSourceDebugExtensionVisitor(): ClassVisitor { super.visitSource(source, null) } } -} \ No newline at end of file +} + +private fun ClassVisitor.withRemoveSameLinesInLineTableVisitor(): ClassVisitor { + return object : ClassVisitor(Opcodes.ASM5, this) { + override fun visitMethod(access: Int, name: String?, desc: String?, signature: String?, exceptions: Array?): MethodVisitor? { + val methodVisitor = super.visitMethod(access, name, desc, signature, exceptions) ?: return null + + return object : MethodVisitor(Opcodes.ASM5, methodVisitor) { + val labels = HashSet() + + override fun visitLineNumber(line: Int, start: Label?) { + val added = labels.add(start.toString()) + + if (added) { + super.visitLineNumber(line, start) + } + } + } + } + } +}