aboutsummaryrefslogtreecommitdiff
path: root/src/test
diff options
context:
space:
mode:
authorBenedikt Ritter <britter@apache.org>2016-07-10 20:02:39 +0000
committerBenedikt Ritter <britter@apache.org>2016-07-10 20:02:39 +0000
commitfdc460dce69c6ef2caaafaf9628ee94d07d17625 (patch)
tree1be5af90035087473010b0d2f48e6d9d9240370a /src/test
parenta3fc218ad914c8e1de13ec3d5f5fb4a54597bc8d (diff)
downloadapache-commons-bcel-fdc460dce69c6ef2caaafaf9628ee94d07d17625.tar.gz
BCEL-262: InvokeInstruction.getClassName(ConstantPoolGen) should not throw an exception when it detects an array. Thanks to Mark Roberts.
git-svn-id: https://svn.apache.org/repos/asf/commons/proper/bcel/trunk@1752106 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/test')
-rw-r--r--src/test/java/org/apache/bcel/PLSETestCase.java24
-rw-r--r--src/test/java/org/apache/bcel/data/PLSETestEnum.java5
2 files changed, 29 insertions, 0 deletions
diff --git a/src/test/java/org/apache/bcel/PLSETestCase.java b/src/test/java/org/apache/bcel/PLSETestCase.java
index 0fda519a..9ebc36ff 100644
--- a/src/test/java/org/apache/bcel/PLSETestCase.java
+++ b/src/test/java/org/apache/bcel/PLSETestCase.java
@@ -23,6 +23,9 @@ import org.apache.bcel.classfile.LocalVariableTable;
import org.apache.bcel.classfile.Method;
import org.apache.bcel.generic.ClassGen;
import org.apache.bcel.generic.ConstantPoolGen;
+import org.apache.bcel.generic.InstructionHandle;
+import org.apache.bcel.generic.InstructionList;
+import org.apache.bcel.generic.InvokeInstruction;
import org.apache.bcel.generic.MethodGen;
import org.apache.bcel.generic.Type;
@@ -62,4 +65,25 @@ public class PLSETestCase extends AbstractTestCase
//System.out.println(new_lvt);
assertEquals("number of locals", lvt.getTableLength(), new_lvt.getTableLength());
}
+
+ /**
+ * BCEL-262:
+ */
+ public void testB262() throws ClassNotFoundException
+ {
+ final JavaClass clazz = getTestClass(PACKAGE_BASE_NAME+".data.PLSETestEnum");
+ final ClassGen gen = new ClassGen(clazz);
+ final ConstantPoolGen pool = gen.getConstantPool();
+ // get the values() method
+ final Method m = gen.getMethodAt(0);
+ final MethodGen mg = new MethodGen(m, gen.getClassName(), pool);
+ final InstructionList il = mg.getInstructionList();
+ // get the invokevirtual instruction
+ final InstructionHandle ih = il.findHandle(3);
+ final InvokeInstruction ii = (InvokeInstruction)(ih.getInstruction());
+ // without fix, the getClassName() will throw:
+ // java.lang.IllegalArgumentException: Cannot be used on an array type
+ final String cn = ii.getClassName(pool);
+ assertEquals("[Lorg.apache.bcel.data.PLSETestEnum;", cn);
+ }
}
diff --git a/src/test/java/org/apache/bcel/data/PLSETestEnum.java b/src/test/java/org/apache/bcel/data/PLSETestEnum.java
new file mode 100644
index 00000000..4db61c53
--- /dev/null
+++ b/src/test/java/org/apache/bcel/data/PLSETestEnum.java
@@ -0,0 +1,5 @@
+package org.apache.bcel.data;
+
+public enum PLSETestEnum {
+ TEST_VALUE;
+}