From 81215a06fb666657faca5dc55e9373baaaf8a039 Mon Sep 17 00:00:00 2001 From: chibash Date: Mon, 2 Dec 2013 01:51:27 +0900 Subject: [PATCH] fixed JASSIST-212 --- .../javassist/bytecode/stackmap/MapMaker.java | 6 +++--- src/test/javassist/JvstTest4.java | 19 +++++++++++++++++++ 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/main/javassist/bytecode/stackmap/MapMaker.java b/src/main/javassist/bytecode/stackmap/MapMaker.java index f1bfbc4c..5c4d7a53 100644 --- a/src/main/javassist/bytecode/stackmap/MapMaker.java +++ b/src/main/javassist/bytecode/stackmap/MapMaker.java @@ -183,10 +183,10 @@ public class MapMaker extends Tracer { int pos = tb.position; int end = pos + tb.length; - while (pos < end) + while (pos < end) { pos += doOpcode(pos, code); - - traceException(code, tb.toCatch); + traceException(code, tb.toCatch); + } if (tb.exit != null) { for (int i = 0; i < tb.exit.length; i++) { diff --git a/src/test/javassist/JvstTest4.java b/src/test/javassist/JvstTest4.java index 85ee4b0f..df4533bb 100644 --- a/src/test/javassist/JvstTest4.java +++ b/src/test/javassist/JvstTest4.java @@ -919,4 +919,23 @@ public class JvstTest4 extends JvstTestRoot { } catch (Exception e) {} } + + public void testJIRA212() throws Exception { + CtClass cc = sloader.get("test4.JIRA212"); + for (final CtBehavior behavior : cc.getDeclaredBehaviors()) { + behavior.instrument(new ExprEditor() { + public void edit(FieldAccess fieldAccess) throws CannotCompileException { + String fieldName = fieldAccess.getFieldName().substring(0,1).toUpperCase() + fieldAccess.getFieldName().substring(1); + if (fieldAccess.isReader()) { + // Rewrite read access + fieldAccess.replace("$_ = $0.get" + fieldName + "();"); + } else if (fieldAccess.isWriter()) { + // Rewrite write access + fieldAccess.replace("$0.set" + fieldName + "($1);"); + } + }}); + } + cc.writeFile(); + Object obj = make(cc.getName()); + } } -- 2.39.5