From fdc460dce69c6ef2caaafaf9628ee94d07d17625 Mon Sep 17 00:00:00 2001 From: Benedikt Ritter Date: Sun, 10 Jul 2016 20:02:39 +0000 Subject: 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 --- src/test/java/org/apache/bcel/PLSETestCase.java | 24 ++++++++++++++++++++++ .../java/org/apache/bcel/data/PLSETestEnum.java | 5 +++++ 2 files changed, 29 insertions(+) create mode 100644 src/test/java/org/apache/bcel/data/PLSETestEnum.java (limited to 'src/test') 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; +} -- cgit v1.2.3