diff options
author | aclement <aclement> | 2005-01-24 08:49:15 +0000 |
---|---|---|
committer | aclement <aclement> | 2005-01-24 08:49:15 +0000 |
commit | 61cd77beeb1135bc1a0ab9f456e3ff835651844e (patch) | |
tree | c58e6b2b8950ecd9c10d82cda0edbd36deb1aab1 /bcel-builder | |
parent | c6e5f9af54b04a28d87310c8656f48b8e7cdef42 (diff) | |
download | aspectj-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')
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"); |