diff options
Diffstat (limited to 'bcel-builder')
9 files changed, 58 insertions, 4 deletions
diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/annotation/Annotation.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/annotation/Annotation.java index f5c280018..ca7a8ec8d 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/annotation/Annotation.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/annotation/Annotation.java @@ -30,7 +30,7 @@ import org.aspectj.apache.bcel.classfile.Utility; */ public class Annotation { private int typeIndex; - private List /* ElementNameValuePair */ evs; + private List /* ElementNameValuePair */ evs = new ArrayList(); private ConstantPool cpool; private boolean isRuntimeVisible; @@ -74,7 +74,6 @@ public class Annotation { } public void addElementNameValuePair(ElementNameValuePair evp) { - if (evs == null) evs = new ArrayList(); evs.add(evp); } diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/ClassGen.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/ClassGen.java index 93e5ca8fb..a4fd19d13 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/generic/ClassGen.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/generic/ClassGen.java @@ -68,6 +68,7 @@ import org.aspectj.apache.bcel.classfile.Method; import org.aspectj.apache.bcel.classfile.SourceFile; import org.aspectj.apache.bcel.classfile.Utility; import org.aspectj.apache.bcel.classfile.annotation.Annotation; +import org.aspectj.apache.bcel.classfile.annotation.RuntimeInvisibleAnnotations; import org.aspectj.apache.bcel.classfile.annotation.RuntimeVisibleAnnotations; import org.aspectj.apache.bcel.generic.annotation.AnnotationGen; @@ -76,7 +77,7 @@ import org.aspectj.apache.bcel.generic.annotation.AnnotationGen; * existing java class (file). * * @see JavaClass - * @version $Id: ClassGen.java,v 1.3 2004/11/22 08:31:27 aclement Exp $ + * @version $Id: ClassGen.java,v 1.4 2004/12/09 15:19:39 aclement Exp $ * @author <A HREF="mailto:markus.dahm@berlin.de">M. Dahm</A> */ public class ClassGen extends AccessFlags implements Cloneable { @@ -200,6 +201,13 @@ public class ClassGen extends AccessFlags implements Cloneable { Annotation a = (Annotation) iter.next(); annotationGenObjs.add(new AnnotationGen(a,getConstantPool())); } + } else if (attr instanceof RuntimeInvisibleAnnotations) { + RuntimeInvisibleAnnotations ria = (RuntimeInvisibleAnnotations)attr; + List annos = ria.getAnnotations(); + for (Iterator iter = annos.iterator(); iter.hasNext();) { + Annotation a = (Annotation) iter.next(); + annotationGenObjs.add(new AnnotationGen(a,getConstantPool())); + } } } return (AnnotationGen[])annotationGenObjs.toArray(new AnnotationGen[]{}); diff --git a/bcel-builder/testdata/MarkedType.java b/bcel-builder/testdata/MarkedType.java new file mode 100644 index 000000000..2b0948438 --- /dev/null +++ b/bcel-builder/testdata/MarkedType.java @@ -0,0 +1,4 @@ +@MarkerAnnotationInvisible +@MarkerAnnotation +public class MarkedType { +} diff --git a/bcel-builder/testdata/MarkerAnnotation.java b/bcel-builder/testdata/MarkerAnnotation.java new file mode 100644 index 000000000..f314a9432 --- /dev/null +++ b/bcel-builder/testdata/MarkerAnnotation.java @@ -0,0 +1,4 @@ +import java.lang.annotation.*; + +@Retention(RetentionPolicy.RUNTIME) +public @interface MarkerAnnotation { } diff --git a/bcel-builder/testdata/MarkerAnnotationInvisible.java b/bcel-builder/testdata/MarkerAnnotationInvisible.java new file mode 100644 index 000000000..9b41a593a --- /dev/null +++ b/bcel-builder/testdata/MarkerAnnotationInvisible.java @@ -0,0 +1,4 @@ +import java.lang.annotation.*; + +@Retention(RetentionPolicy.CLASS) +public @interface MarkerAnnotationInvisible { } diff --git a/bcel-builder/testdata/testcode.jar b/bcel-builder/testdata/testcode.jar Binary files differindex cbfaa1a2d..3324bf340 100644 --- a/bcel-builder/testdata/testcode.jar +++ b/bcel-builder/testdata/testcode.jar diff --git a/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/AllTests.java b/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/AllTests.java index 69d41d6b8..c2a087166 100644 --- a/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/AllTests.java +++ b/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/AllTests.java @@ -48,6 +48,7 @@ public class AllTests { suite.addTestSuite(AnnotationGenTest.class); suite.addTestSuite(ParameterAnnotationsTest.class); suite.addTestSuite(GeneratingAnnotatedClassesTest.class); + suite.addTestSuite(TypeAnnotationsTest.class); //$JUnit-END$ return suite; } diff --git a/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/MethodAnnotationsTest.java b/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/MethodAnnotationsTest.java index 5740add02..dab8e7cf3 100644 --- a/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/MethodAnnotationsTest.java +++ b/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/MethodAnnotationsTest.java @@ -30,7 +30,6 @@ public class MethodAnnotationsTest extends BcelTestCase { super.setUp(); } - public void testMethodAnnotations() throws ClassNotFoundException { JavaClass clazz = getClassFromJar("AnnotatedMethods"); diff --git a/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/TypeAnnotationsTest.java b/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/TypeAnnotationsTest.java new file mode 100644 index 000000000..88313faf3 --- /dev/null +++ b/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/TypeAnnotationsTest.java @@ -0,0 +1,35 @@ +/* ******************************************************************* + * Copyright (c) 2004 IBM + * All rights reserved. + * This program and the accompanying materials are made available + * under the terms of the Common Public License v1.0 + * which accompanies this distribution and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * Andy Clement - initial implementation + * ******************************************************************/ + +package org.aspectj.apache.bcel.classfile.tests; + +import org.aspectj.apache.bcel.classfile.JavaClass; +import org.aspectj.apache.bcel.generic.ClassGen; +import org.aspectj.apache.bcel.generic.annotation.AnnotationGen; + + +public class TypeAnnotationsTest extends BcelTestCase { + + + protected void setUp() throws Exception { + super.setUp(); + } + + public void testMarkerAnnotationsOnTypes() throws ClassNotFoundException { + JavaClass clazz = getClassFromJar("MarkedType"); + ClassGen cg = new ClassGen(clazz); + AnnotationGen[] annotations = cg.getAnnotations(); + assertTrue("Should be a MarkerAnnotation and a MarkerAnnotationInvisible - but found: "+annotations.length,annotations.length==2); + } + + +} |