aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShigeru Chiba <chibash@users.noreply.github.com>2024-10-04 00:24:58 +0900
committerGitHub <noreply@github.com>2024-10-04 00:24:58 +0900
commit7013f30c704687d434c217da55d509e25280cd58 (patch)
tree65f84517c416c6067ab22f81a4e08a5eec9f5a46
parentc3bbec234c53cbb80f97491e92fbeb68c4957aa2 (diff)
parent4520f0398769cfe6d7b436843041e676ebd5c2f9 (diff)
downloadjavassist-7013f30c704687d434c217da55d509e25280cd58.tar.gz
javassist-7013f30c704687d434c217da55d509e25280cd58.zip
Merge pull request #492 from kuznet1/master
Fix wrong line numbers in some cases
-rw-r--r--src/main/javassist/bytecode/LineNumberAttributeBuilder.java14
-rw-r--r--src/test/javassist/LineNumberTest.java18
2 files changed, 25 insertions, 7 deletions
diff --git a/src/main/javassist/bytecode/LineNumberAttributeBuilder.java b/src/main/javassist/bytecode/LineNumberAttributeBuilder.java
index 52d9d0c8..25182e2d 100644
--- a/src/main/javassist/bytecode/LineNumberAttributeBuilder.java
+++ b/src/main/javassist/bytecode/LineNumberAttributeBuilder.java
@@ -11,15 +11,15 @@ import java.util.Map;
public class LineNumberAttributeBuilder {
private final HashMap<Integer, Integer> map = new HashMap<>();
- public void put(int newPc, ASTree tree) {
+ public void put(int pc, ASTree tree) {
if (tree != null)
- put(newPc, tree.getLineNumber());
+ put(pc, tree.getLineNumber());
}
- private void put(int newPc, int lineNum) {
- Integer pc = map.get(lineNum);
- if (pc == null || newPc < pc) {
- map.put(lineNum, newPc);
+ private void put(int pc, int lineNum) {
+ Integer oldLineNum = map.get(pc);
+ if (oldLineNum == null || lineNum > oldLineNum) {
+ map.put(pc, lineNum);
}
}
@@ -29,8 +29,8 @@ public class LineNumberAttributeBuilder {
DataOutputStream dos = new DataOutputStream(bos)) {
dos.writeShort(size);
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
- dos.writeShort(entry.getValue());
dos.writeShort(entry.getKey());
+ dos.writeShort(entry.getValue());
}
return new LineNumberAttribute(cp, bos.toByteArray());
} catch (IOException e) {
diff --git a/src/test/javassist/LineNumberTest.java b/src/test/javassist/LineNumberTest.java
index 7e9fbd2f..4ab2580c 100644
--- a/src/test/javassist/LineNumberTest.java
+++ b/src/test/javassist/LineNumberTest.java
@@ -59,6 +59,24 @@ public class LineNumberTest extends TestCase {
"}"), 1, 5);
}
+ public void test16Line() {
+ doTestRuntime(String.join("\n",
+ "public void run() {",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "throwException();",
+ "}"), 1, 16);
+ }
+
private void doTestCompile(String src, String msg) {
CtClass testClass = loader.makeClass("javassist.LineNumberCompileTest" + classNumber++);
try {