summaryrefslogtreecommitdiffstats
path: root/bcel-builder
diff options
context:
space:
mode:
authoraclement <aclement>2005-01-24 08:49:15 +0000
committeraclement <aclement>2005-01-24 08:49:15 +0000
commit61cd77beeb1135bc1a0ab9f456e3ff835651844e (patch)
treec58e6b2b8950ecd9c10d82cda0edbd36deb1aab1 /bcel-builder
parentc6e5f9af54b04a28d87310c8656f48b8e7cdef42 (diff)
downloadaspectj-61cd77beeb1135bc1a0ab9f456e3ff835651844e.tar.gz
aspectj-61cd77beeb1135bc1a0ab9f456e3ff835651844e.zip
This fix for 'c' values in annotations has been verified by Pepe. Committing source changes and testcase.
Diffstat (limited to 'bcel-builder')
-rw-r--r--bcel-builder/src/org/aspectj/apache/bcel/generic/annotation/ClassElementValueGen.java8
-rw-r--r--bcel-builder/src/org/aspectj/apache/bcel/generic/annotation/ElementValueGen.java4
-rw-r--r--bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/RuntimeVisibleAnnotationAttributeTest.java11
3 files changed, 22 insertions, 1 deletions
diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/annotation/ClassElementValueGen.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/annotation/ClassElementValueGen.java
index 4639e6b8b..051d2d8df 100644
--- a/bcel-builder/src/org/aspectj/apache/bcel/generic/annotation/ClassElementValueGen.java
+++ b/bcel-builder/src/org/aspectj/apache/bcel/generic/annotation/ClassElementValueGen.java
@@ -17,6 +17,7 @@ import java.io.IOException;
import org.aspectj.apache.bcel.classfile.ConstantClass;
import org.aspectj.apache.bcel.classfile.ConstantUtf8;
+import org.aspectj.apache.bcel.classfile.annotation.ClassElementValue;
import org.aspectj.apache.bcel.generic.ConstantPoolGen;
import org.aspectj.apache.bcel.generic.ObjectType;
@@ -37,7 +38,12 @@ public class ClassElementValueGen extends ElementValueGen {
this.idx = cpool.addClass(t);
}
- public int getIndex() {
+ public ClassElementValueGen(ClassElementValue value, ConstantPoolGen cpool) {
+ super(CLASS,cpool);
+ idx = value.getIndex();
+ }
+
+ public int getIndex() {
return idx;
}
diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/annotation/ElementValueGen.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/annotation/ElementValueGen.java
index b97afc8e3..054e1cbf8 100644
--- a/bcel-builder/src/org/aspectj/apache/bcel/generic/annotation/ElementValueGen.java
+++ b/bcel-builder/src/org/aspectj/apache/bcel/generic/annotation/ElementValueGen.java
@@ -18,6 +18,7 @@ import java.io.IOException;
import org.aspectj.apache.bcel.classfile.annotation.AnnotationElementValue;
import org.aspectj.apache.bcel.classfile.annotation.ArrayElementValue;
+import org.aspectj.apache.bcel.classfile.annotation.ClassElementValue;
import org.aspectj.apache.bcel.classfile.annotation.ElementValue;
import org.aspectj.apache.bcel.classfile.annotation.EnumElementValue;
import org.aspectj.apache.bcel.classfile.annotation.SimpleElementValue;
@@ -130,6 +131,9 @@ public abstract class ElementValueGen {
case '[': // Array
return new ArrayElementValueGen((ArrayElementValue)value,cpool);
+ case 'c': // Class
+ return new ClassElementValueGen((ClassElementValue)value,cpool);
+
default:
throw new RuntimeException("Not implemented yet! ("+value.getElementValueType()+")");
}
diff --git a/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/RuntimeVisibleAnnotationAttributeTest.java b/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/RuntimeVisibleAnnotationAttributeTest.java
index 129dbddbe..494bc1239 100644
--- a/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/RuntimeVisibleAnnotationAttributeTest.java
+++ b/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/RuntimeVisibleAnnotationAttributeTest.java
@@ -30,6 +30,8 @@ import org.aspectj.apache.bcel.classfile.annotation.ElementValue;
import org.aspectj.apache.bcel.classfile.annotation.EnumElementValue;
import org.aspectj.apache.bcel.classfile.annotation.SimpleElementValue;
import org.aspectj.apache.bcel.classfile.annotation.RuntimeVisibleAnnotations;
+import org.aspectj.apache.bcel.generic.ClassGen;
+import org.aspectj.apache.bcel.generic.annotation.AnnotationGen;
import org.aspectj.apache.bcel.util.SyntheticRepository;
@@ -227,6 +229,15 @@ public class RuntimeVisibleAnnotationAttributeTest extends BcelTestCase {
verifyClassAnnotation(clazz);
}
+ public void testAnnotationClassElementCopying() throws ClassNotFoundException {
+ SyntheticRepository repos = createRepos("testcode.jar");
+ JavaClass clazz = repos.loadClass("AnnotatedWithClassClass");
+ Annotation[] anns = clazz.getAnnotations();
+ ClassGen cg = new ClassGen(clazz);
+ // Checks we can copy class values in an annotation
+ new AnnotationGen(anns[0],cg.getConstantPool());
+ }
+
public void testAnnotationClassElementReadWrite() throws ClassNotFoundException,IOException {
SyntheticRepository repos = createRepos("testcode.jar");
JavaClass clazz = repos.loadClass("AnnotatedWithClassClass");