You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by se...@apache.org on 2015/08/15 00:22:48 UTC
svn commit: r1695997 - in /commons/proper/bcel/trunk/src:
main/java/org/apache/commons/bcel6/generic/MethodGen.java
test/java/org/apache/commons/bcel6/PLSETestCase.java
test/java/org/apache/commons/bcel6/data/PLSETestClass.java
Author: sebb
Date: Fri Aug 14 22:22:47 2015
New Revision: 1695997
URL: http://svn.apache.org/r1695997
Log:
BCEL-79 - Add test to show the problem, and re-fix it
Modified:
commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/MethodGen.java
commons/proper/bcel/trunk/src/test/java/org/apache/commons/bcel6/PLSETestCase.java
commons/proper/bcel/trunk/src/test/java/org/apache/commons/bcel6/data/PLSETestClass.java
Modified: commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/MethodGen.java
URL: http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/MethodGen.java?rev=1695997&r1=1695996&r2=1695997&view=diff
==============================================================================
--- commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/MethodGen.java (original)
+++ commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/MethodGen.java Fri Aug 14 22:22:47 2015
@@ -35,7 +35,6 @@ import org.apache.commons.bcel6.classfil
import org.apache.commons.bcel6.classfile.LineNumberTable;
import org.apache.commons.bcel6.classfile.LocalVariable;
import org.apache.commons.bcel6.classfile.LocalVariableTable;
-import org.apache.commons.bcel6.classfile.LocalVariableTypeTable;
import org.apache.commons.bcel6.classfile.Method;
import org.apache.commons.bcel6.classfile.ParameterAnnotationEntry;
import org.apache.commons.bcel6.classfile.ParameterAnnotations;
@@ -228,22 +227,6 @@ public class MethodGen extends FieldGenO
removeLocalVariables();
for (LocalVariable l : lv) {
InstructionHandle start = il.findHandle(l.getStartPC());
- InstructionHandle end = il.findHandle(l.getStartPC() + l.getLength());
- // Repair malformed handles
- if (null == start) {
- start = il.getStart();
- }
- if (null == end) {
- end = il.getEnd();
- }
- addLocalVariable(l.getName(), Type.getType(l.getSignature()), l
- .getIndex(), start, end);
- }
- } else if (a instanceof LocalVariableTypeTable) {
- LocalVariable[] lv = ((LocalVariableTypeTable) a).getLocalVariableTypeTable();
- removeLocalVariables();
- for (LocalVariable l : lv) {
- InstructionHandle start = il.findHandle(l.getStartPC());
InstructionHandle end = il.findHandle(l.getStartPC() + l.getLength());
// Repair malformed handles
if (null == start) {
Modified: commons/proper/bcel/trunk/src/test/java/org/apache/commons/bcel6/PLSETestCase.java
URL: http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/test/java/org/apache/commons/bcel6/PLSETestCase.java?rev=1695997&r1=1695996&r2=1695997&view=diff
==============================================================================
--- commons/proper/bcel/trunk/src/test/java/org/apache/commons/bcel6/PLSETestCase.java (original)
+++ commons/proper/bcel/trunk/src/test/java/org/apache/commons/bcel6/PLSETestCase.java Fri Aug 14 22:22:47 2015
@@ -19,6 +19,7 @@
package org.apache.commons.bcel6;
import org.apache.commons.bcel6.classfile.JavaClass;
+import org.apache.commons.bcel6.classfile.LocalVariableTable;
import org.apache.commons.bcel6.classfile.Method;
import org.apache.commons.bcel6.generic.ClassGen;
import org.apache.commons.bcel6.generic.ConstantPoolGen;
@@ -43,4 +44,22 @@ public class PLSETestCase extends Abstra
// currently, this will cause null pointer exception
mg.getLocalVariableTable(pool);
}
+
+ /**
+ * BCEL-79:
+ */
+ public void testB79() throws ClassNotFoundException
+ {
+ JavaClass clazz = getTestClass("org.apache.commons.bcel6.data.PLSETestClass");
+ ClassGen gen = new ClassGen(clazz);
+ ConstantPoolGen pool = gen.getConstantPool();
+ Method m = gen.getMethodAt(2);
+ LocalVariableTable lvt = m.getLocalVariableTable();
+ //System.out.println(lvt);
+ //System.out.println(lvt.getTableLength());
+ MethodGen mg = new MethodGen(m, gen.getClassName(), pool);
+ LocalVariableTable new_lvt = mg.getLocalVariableTable(mg.getConstantPool());
+ //System.out.println(new_lvt);
+ assertEquals("number of locals", lvt.getTableLength(), new_lvt.getTableLength());
+ }
}
Modified: commons/proper/bcel/trunk/src/test/java/org/apache/commons/bcel6/data/PLSETestClass.java
URL: http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/test/java/org/apache/commons/bcel6/data/PLSETestClass.java?rev=1695997&r1=1695996&r2=1695997&view=diff
==============================================================================
--- commons/proper/bcel/trunk/src/test/java/org/apache/commons/bcel6/data/PLSETestClass.java (original)
+++ commons/proper/bcel/trunk/src/test/java/org/apache/commons/bcel6/data/PLSETestClass.java Fri Aug 14 22:22:47 2015
@@ -18,11 +18,19 @@
package org.apache.commons.bcel6.data;
+import java.util.ArrayList;
+
public class PLSETestClass
{
public void meth1(int arg1)
{
@SuppressWarnings("unused")
int local1 = arg1;
+ }
+
+ public void meth2(int arg1, ArrayList<String> arg2, int arg3)
+ {
+ @SuppressWarnings("unused")
+ int local1 = arg1;
}
}