Author: kinow
Date: Fri May 19 06:41:16 2017
New Revision: 1795584
URL: http://svn.apache.org/viewvc?rev=1795584&view=rev
Log:
BCEL-289: iterate through parameter annotation entries using the right limit
This closes #13
Modified:
commons/proper/bcel/trunk/src/main/java/org/apache/bcel/generic/MethodGen.java
commons/proper/bcel/trunk/src/test/java/org/apache/bcel/generic/MethodGenTestCase.java
Modified:
commons/proper/bcel/trunk/src/main/java/org/apache/bcel/generic/MethodGen.java
URL:
http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/main/java/org/apache/bcel/generic/MethodGen.java?rev=1795584&r1=1795583&r2=1795584&view=diff
==============================================================================
---
commons/proper/bcel/trunk/src/main/java/org/apache/bcel/generic/MethodGen.java
(original)
+++
commons/proper/bcel/trunk/src/main/java/org/apache/bcel/generic/MethodGen.java
Fri May 19 06:41:16 2017
@@ -1146,11 +1146,11 @@ public class MethodGen extends FieldGenO
} else {
paramAnnInvisAttr = rpa;
}
- for (int j = 0; j < arg_types.length; j++)
+ final ParameterAnnotationEntry[] parameterAnnotationEntries =
rpa.getParameterAnnotationEntries();
+ for (int j = 0; j < parameterAnnotationEntries.length; j++)
{
// This returns Annotation[] ...
- final ParameterAnnotationEntry immutableArray = rpa
- .getParameterAnnotationEntries()[j];
+ final ParameterAnnotationEntry immutableArray =
rpa.getParameterAnnotationEntries()[j];
// ... which needs transforming into an AnnotationGen[] ...
final List<AnnotationEntryGen> mutable =
makeMutableVersion(immutableArray.getAnnotationEntries());
// ... then add these to any we already know about
Modified:
commons/proper/bcel/trunk/src/test/java/org/apache/bcel/generic/MethodGenTestCase.java
URL:
http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/test/java/org/apache/bcel/generic/MethodGenTestCase.java?rev=1795584&r1=1795583&r2=1795584&view=diff
==============================================================================
---
commons/proper/bcel/trunk/src/test/java/org/apache/bcel/generic/MethodGenTestCase.java
(original)
+++
commons/proper/bcel/trunk/src/test/java/org/apache/bcel/generic/MethodGenTestCase.java
Fri May 19 06:41:16 2017
@@ -18,6 +18,7 @@
package org.apache.bcel.generic;
import java.util.Arrays;
+import java.util.List;
import org.apache.bcel.Repository;
import org.apache.bcel.classfile.JavaClass;
@@ -35,6 +36,20 @@ public class MethodGenTestCase extends T
}
}
+ @interface A {
+ }
+
+ @interface B {
+ }
+
+ public static class Bar {
+ public class Inner {
+ public Inner(@A Object a, @B Object b) {
+
+ }
+ }
+ }
+
private MethodGen getMethod(final Class<?> cls, final String name) throws
ClassNotFoundException {
final JavaClass jc = Repository.lookupClass(cls);
final ConstantPoolGen cp = new ConstantPoolGen(jc.getConstantPool());
@@ -89,4 +104,14 @@ public class MethodGenTestCase extends T
assertNull("scope start", lv.getStart());
assertNull("scope end", lv.getEnd());
}
+
+ public void testAnnotationsAreUnpacked() throws Exception {
+ final JavaClass jc = Repository.lookupClass(Bar.Inner.class);
+ final ClassGen cg = new ClassGen(jc);
+ final MethodGen mg = new MethodGen(cg.getMethodAt(0),
cg.getClassName(), cg.getConstantPool());
+ final List<AnnotationEntryGen> firstParamAnnotations =
mg.getAnnotationsOnParameter(0);
+ assertEquals("Wrong number of annotations in the first parameter", 1,
firstParamAnnotations.size());
+ final List<AnnotationEntryGen> secondParamAnnotations =
mg.getAnnotationsOnParameter(1);
+ assertEquals("Wrong number of annotations in the second parameter", 1,
secondParamAnnotations.size());
+ }
}