aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorchiba <chiba@30ef5769-5b8d-40dd-aea6-55b5d6557bb3>2013-04-14 15:58:54 +0000
committerchiba <chiba@30ef5769-5b8d-40dd-aea6-55b5d6557bb3>2013-04-14 15:58:54 +0000
commit81e75232f4deaf5c9d45a4956d87a37f03722ca9 (patch)
treec7c5df3a3c62f365668adb7bd8f5c1b147269010 /src
parentfc4e2231b33404adea225df5a931db62619b1b12 (diff)
downloadjavassist-81e75232f4deaf5c9d45a4956d87a37f03722ca9.tar.gz
javassist-81e75232f4deaf5c9d45a4956d87a37f03722ca9.zip
fixed JASSIST-185
git-svn-id: http://anonsvn.jboss.org/repos/javassist/trunk@704 30ef5769-5b8d-40dd-aea6-55b5d6557bb3
Diffstat (limited to 'src')
-rw-r--r--src/main/javassist/CtBehavior.java8
-rw-r--r--src/main/javassist/bytecode/CodeAttribute.java2
-rw-r--r--src/test/javassist/JvstTest4.java8
-rw-r--r--src/test/test4/Lvtt.java11
4 files changed, 27 insertions, 2 deletions
diff --git a/src/main/javassist/CtBehavior.java b/src/main/javassist/CtBehavior.java
index 73ac277a..92513159 100644
--- a/src/main/javassist/CtBehavior.java
+++ b/src/main/javassist/CtBehavior.java
@@ -656,11 +656,15 @@ public abstract class CtBehavior extends CtMember {
ca.insertLocalVar(where, size);
LocalVariableAttribute va
- = (LocalVariableAttribute)
- ca.getAttribute(LocalVariableAttribute.tag);
+ = (LocalVariableAttribute)ca.getAttribute(LocalVariableAttribute.tag);
if (va != null)
va.shiftIndex(where, size);
+ LocalVariableTypeAttribute lvta
+ = (LocalVariableTypeAttribute)ca.getAttribute(LocalVariableTypeAttribute.tag);
+ if (lvta != null)
+ lvta.shiftIndex(where, size);
+
StackMapTable smt = (StackMapTable)ca.getAttribute(StackMapTable.tag);
if (smt != null)
smt.insertLocal(where, StackMapTable.typeTagOf(typeDesc), classInfo);
diff --git a/src/main/javassist/bytecode/CodeAttribute.java b/src/main/javassist/bytecode/CodeAttribute.java
index dbf714e7..090ae74d 100644
--- a/src/main/javassist/bytecode/CodeAttribute.java
+++ b/src/main/javassist/bytecode/CodeAttribute.java
@@ -465,6 +465,7 @@ public class CodeAttribute extends AttributeInfo implements Opcode {
* Changes the index numbers of the local variables
* to append a new parameter.
* This method does not update <code>LocalVariableAttribute</code>,
+ * <code>LocalVariableTypeAttribute</code>,
* <code>StackMapTable</code>, or <code>StackMap</code>.
* These attributes must be explicitly updated.
*
@@ -472,6 +473,7 @@ public class CodeAttribute extends AttributeInfo implements Opcode {
* @param size the type size of the new parameter (1 or 2).
*
* @see LocalVariableAttribute#shiftIndex(int, int)
+ * @see LocalVariableTypeAttribute#shiftIndex(int, int)
* @see StackMapTable#insertLocal(int, int, int)
* @see StackMap#insertLocal(int, int, int)
*/
diff --git a/src/test/javassist/JvstTest4.java b/src/test/javassist/JvstTest4.java
index 7692d5bc..619b9e97 100644
--- a/src/test/javassist/JvstTest4.java
+++ b/src/test/javassist/JvstTest4.java
@@ -838,4 +838,12 @@ public class JvstTest4 extends JvstTestRoot {
Object obj = make(cc.getName());
assertEquals(12, invoke(obj, "test1"));
}
+
+ public void testLocalVariableTypeTable() throws Exception {
+ CtClass cc = sloader.get("test4.Lvtt");
+ CtMethod m = cc.getDeclaredMethod("run");
+ m.addParameter(CtClass.intType);
+ cc.writeFile();
+ Object obj = make(cc.getName());
+ }
}
diff --git a/src/test/test4/Lvtt.java b/src/test/test4/Lvtt.java
new file mode 100644
index 00000000..b9d72c53
--- /dev/null
+++ b/src/test/test4/Lvtt.java
@@ -0,0 +1,11 @@
+package test4;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Lvtt {
+ public void run() {
+ List<String> s = new ArrayList<String>();
+ System.out.println(s);
+ }
+}