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());
+    }
 }


Reply via email to