Browse Source

This fix for 'c' values in annotations has been verified by Pepe. Committing source changes and testcase.

tags/Root_AspectJ5_Development
aclement 19 years ago
parent
commit
61cd77beeb

+ 7
- 1
bcel-builder/src/org/aspectj/apache/bcel/generic/annotation/ClassElementValueGen.java View File

@@ -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;
}

+ 4
- 0
bcel-builder/src/org/aspectj/apache/bcel/generic/annotation/ElementValueGen.java View File

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

+ 11
- 0
bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/RuntimeVisibleAnnotationAttributeTest.java View File

@@ -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");

BIN
lib/bcel/bcel-src.zip View File


BIN
lib/bcel/bcel.jar View File


Loading…
Cancel
Save