From a7d476f6805401150e3fb4f1cedda52218c15fcb Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Tue, 3 Nov 2015 19:59:47 +0100 Subject: [PATCH] [java-decompiler] off-by-one in line mapping (EA-75719) --- .../src/org/jetbrains/java/decompiler/IdeaDecompiler.kt | 4 ++-- .../test/org/jetbrains/java/decompiler/IdeaDecompilerTest.kt | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/plugins/java-decompiler/plugin/src/org/jetbrains/java/decompiler/IdeaDecompiler.kt b/plugins/java-decompiler/plugin/src/org/jetbrains/java/decompiler/IdeaDecompiler.kt index 55c8bee48bf9..a4d61a90f91f 100644 --- a/plugins/java-decompiler/plugin/src/org/jetbrains/java/decompiler/IdeaDecompiler.kt +++ b/plugins/java-decompiler/plugin/src/org/jetbrains/java/decompiler/IdeaDecompiler.kt @@ -230,7 +230,7 @@ class IdeaDecompiler : ClassFileDecompilers.Light() { private class ExactMatchLineNumbersMapping(private val mapping: IntArray) : LineNumbersMapping { override fun bytecodeToSource(line: Int): Int { - for (i in 0..mapping.size step 2) { + for (i in mapping.indices step 2) { if (mapping[i] == line) { return mapping[i + 1] } @@ -239,7 +239,7 @@ class IdeaDecompiler : ClassFileDecompilers.Light() { } override fun sourceToBytecode(line: Int): Int { - for (i in 0..mapping.size step 2) { + for (i in mapping.indices step 2) { if (mapping[i + 1] == line) { return mapping[i] } diff --git a/plugins/java-decompiler/plugin/test/org/jetbrains/java/decompiler/IdeaDecompilerTest.kt b/plugins/java-decompiler/plugin/test/org/jetbrains/java/decompiler/IdeaDecompilerTest.kt index 8cf426d19e0d..dcdba9ca61b0 100644 --- a/plugins/java-decompiler/plugin/test/org/jetbrains/java/decompiler/IdeaDecompilerTest.kt +++ b/plugins/java-decompiler/plugin/test/org/jetbrains/java/decompiler/IdeaDecompilerTest.kt @@ -104,7 +104,11 @@ class IdeaDecompilerTest : LightCodeInsightFixtureTestCase() { val mapping = file.getUserData(LineNumbersMapping.LINE_NUMBERS_MAPPING_KEY)!! assertEquals(11, mapping.bytecodeToSource(3)) + assertEquals(3, mapping.sourceToBytecode(11)) assertEquals(23, mapping.bytecodeToSource(13)) + assertEquals(13, mapping.sourceToBytecode(23)) + assertEquals(-1, mapping.bytecodeToSource(1000)) + assertEquals(-1, mapping.sourceToBytecode(1000)) } }