From 30de93d373842e59138ef2e9604651f67babe8b3 Mon Sep 17 00:00:00 2001 From: aclement Date: Wed, 9 Sep 2009 22:18:56 +0000 Subject: [PATCH] refactoring --- .../classfile/tests/AnnotationGenTest.java | 206 +++++++++--------- 1 file changed, 99 insertions(+), 107 deletions(-) diff --git a/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/AnnotationGenTest.java b/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/AnnotationGenTest.java index 377a176a1..cb2ed6676 100644 --- a/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/AnnotationGenTest.java +++ b/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/AnnotationGenTest.java @@ -15,171 +15,163 @@ import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.util.ArrayList; +import java.util.Collection; import java.util.List; import java.util.Vector; import org.aspectj.apache.bcel.Constants; -import org.aspectj.apache.bcel.classfile.Utility; import org.aspectj.apache.bcel.classfile.Attribute; +import org.aspectj.apache.bcel.classfile.ConstantPool; +import org.aspectj.apache.bcel.classfile.Utility; import org.aspectj.apache.bcel.classfile.annotation.AnnotationGen; import org.aspectj.apache.bcel.classfile.annotation.ElementNameValuePairGen; import org.aspectj.apache.bcel.classfile.annotation.ElementValueGen; -import org.aspectj.apache.bcel.classfile.annotation.RuntimeVisibleAnnotations; -import org.aspectj.apache.bcel.classfile.annotation.RuntimeInvisibleAnnotations; import org.aspectj.apache.bcel.classfile.annotation.RuntimeAnnotations; +import org.aspectj.apache.bcel.classfile.annotation.RuntimeInvisibleAnnotations; +import org.aspectj.apache.bcel.classfile.annotation.RuntimeVisibleAnnotations; import org.aspectj.apache.bcel.classfile.annotation.SimpleElementValueGen; import org.aspectj.apache.bcel.generic.ClassGen; -import org.aspectj.apache.bcel.classfile.ConstantPool; import org.aspectj.apache.bcel.generic.ObjectType; public class AnnotationGenTest extends BcelTestCase { + @Override protected void setUp() throws Exception { super.setUp(); } private ClassGen createClassGen(String classname) { - return new ClassGen(classname, "java.lang.Object", - "", Constants.ACC_PUBLIC | Constants.ACC_SUPER, null); + return new ClassGen(classname, "java.lang.Object", "", Constants.ACC_PUBLIC | Constants.ACC_SUPER, null); } /** * Programmatically construct an mutable annotation (AnnotationGen) object. */ public void testConstructMutableAnnotation() { - + // Create the containing class ClassGen cg = createClassGen("HelloWorld"); ConstantPool cp = cg.getConstantPool(); - + // Create the simple primitive value '4' of type 'int' - SimpleElementValueGen evg = - new SimpleElementValueGen(ElementValueGen.PRIMITIVE_INT,cp,4); - + SimpleElementValueGen evg = new SimpleElementValueGen(ElementValueGen.PRIMITIVE_INT, cp, 4); + // Give it a name, call it 'id' - ElementNameValuePairGen nvGen = new ElementNameValuePairGen("id",evg,cp); - - // Check it looks right - assertTrue("Should include string 'id=4' but says: "+nvGen.toString(), - nvGen.toString().indexOf("id=4")!=-1); - - + ElementNameValuePairGen nvGen = new ElementNameValuePairGen("id", evg, cp); + + // Check it looks right + assertTrue("Should include string 'id=4' but says: " + nvGen.toString(), nvGen.toString().indexOf("id=4") != -1); + ObjectType t = new ObjectType("SimpleAnnotation"); - + List elements = new ArrayList(); elements.add(nvGen); - + // Build an annotation of type 'SimpleAnnotation' with 'id=4' as the only value :) - AnnotationGen a = new AnnotationGen(t,elements,true,cp); - + AnnotationGen a = new AnnotationGen(t, elements, true, cp); + // Check we can save and load it ok - checkSerialize(a,cp); + checkSerialize(a, cp); } + public void testVisibleInvisibleAnnotationGen() { - public void testVisibleInvisibleAnnotationGen() { + // Create the containing class + ClassGen cg = createClassGen("HelloWorld"); + ConstantPool cp = cg.getConstantPool(); - // Create the containing class - ClassGen cg = createClassGen("HelloWorld"); - ConstantPool cp = cg.getConstantPool(); + // Create the simple primitive value '4' of type 'int' + SimpleElementValueGen evg = new SimpleElementValueGen(ElementValueGen.PRIMITIVE_INT, cp, 4); - // Create the simple primitive value '4' of type 'int' - SimpleElementValueGen evg = - new SimpleElementValueGen(ElementValueGen.PRIMITIVE_INT,cp,4); + // Give it a name, call it 'id' + ElementNameValuePairGen nvGen = new ElementNameValuePairGen("id", evg, cp); - // Give it a name, call it 'id' - ElementNameValuePairGen nvGen = new ElementNameValuePairGen("id",evg,cp); + // Check it looks right + assertTrue("Should include string 'id=4' but says: " + nvGen.toString(), nvGen.toString().indexOf("id=4") != -1); - // Check it looks right - assertTrue("Should include string 'id=4' but says: "+nvGen.toString(), - nvGen.toString().indexOf("id=4")!=-1); + ObjectType t = new ObjectType("SimpleAnnotation"); + List elements = new ArrayList(); + elements.add(nvGen); - ObjectType t = new ObjectType("SimpleAnnotation"); + // Build a RV annotation of type 'SimpleAnnotation' with 'id=4' as the only value :) + AnnotationGen a = new AnnotationGen(t, elements, true, cp); - List elements = new ArrayList(); - elements.add(nvGen); + Vector v = new Vector(); + v.add(a); + Collection attributes = Utility.getAnnotationAttributes(cp, v); + boolean foundRV = false; + for (Attribute attribute : attributes) { + if (attribute instanceof RuntimeVisibleAnnotations) { + assertTrue(((RuntimeAnnotations) attribute).areVisible()); + foundRV = true; + + } + } + assertTrue("Should have seen a RuntimeVisibleAnnotation", foundRV); + + // Build a RIV annotation of type 'SimpleAnnotation' with 'id=4' as the only value :) + AnnotationGen a2 = new AnnotationGen(t, elements, false, cp); + + Vector v2 = new Vector(); + v2.add(a2); + Collection attributes2 = Utility.getAnnotationAttributes(cp, v2); + boolean foundRIV = false; + for (Attribute attribute : attributes2) { + // for (int i = 0; i < attributes2.length; i++) { + // Attribute attribute = attributes2[i]; + if (attribute instanceof RuntimeInvisibleAnnotations) { + assertFalse(((RuntimeAnnotations) attribute).areVisible()); + foundRIV = true; + } + } + assertTrue("Should have seen a RuntimeInvisibleAnnotation", foundRIV); + } - // Build a RV annotation of type 'SimpleAnnotation' with 'id=4' as the only value :) - AnnotationGen a = new AnnotationGen(t,elements,true,cp); + // // + // Helper methods - Vector v = new Vector(); - v.add(a); - Attribute[] attributes = Utility.getAnnotationAttributes(cp, v); - boolean foundRV = false; - for (int i = 0; i < attributes.length; i++) { - Attribute attribute = attributes[i]; - if (attribute instanceof RuntimeVisibleAnnotations) { - assertTrue(((RuntimeAnnotations)attribute).areVisible()); - foundRV = true; + private void checkSerialize(AnnotationGen a, ConstantPool cpg) { + try { + String beforeName = a.getTypeName(); + List beforeValues = a.getValues(); + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + DataOutputStream dos = new DataOutputStream(baos); + a.dump(dos); + dos.flush(); + dos.close(); - } - } - assertTrue("Should have seen a RuntimeVisibleAnnotation", foundRV); + byte[] bs = baos.toByteArray(); + ByteArrayInputStream bais = new ByteArrayInputStream(bs); + DataInputStream dis = new DataInputStream(bais); + AnnotationGen annAfter = AnnotationGen.read(dis, cpg, a.isRuntimeVisible()); - // Build a RIV annotation of type 'SimpleAnnotation' with 'id=4' as the only value :) - AnnotationGen a2 = new AnnotationGen(t,elements,false,cp); + dis.close(); - Vector v2 = new Vector(); - v2.add(a2); - Attribute[] attributes2 = Utility.getAnnotationAttributes(cp, v2); - boolean foundRIV = false; - for (int i = 0; i < attributes2.length; i++) { - Attribute attribute = attributes2[i]; - if (attribute instanceof RuntimeInvisibleAnnotations) { - assertFalse(((RuntimeAnnotations)attribute).areVisible()); - foundRIV = true; - } - } - assertTrue("Should have seen a RuntimeInvisibleAnnotation", foundRIV); - } + String afterName = annAfter.getTypeName(); + List afterValues = annAfter.getValues(); - //// - // Helper methods - - private void checkSerialize(AnnotationGen a,ConstantPool cpg) { - try { - String beforeName = a.getTypeName(); - List beforeValues = a.getValues(); - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - DataOutputStream dos = new DataOutputStream(baos); - a.dump(dos); - dos.flush(); - dos.close(); - - byte[] bs = baos.toByteArray(); - - ByteArrayInputStream bais = new ByteArrayInputStream(bs); - DataInputStream dis = new DataInputStream(bais); - AnnotationGen annAfter = AnnotationGen.read(dis,cpg,a.isRuntimeVisible()); - - dis.close(); - - String afterName = annAfter.getTypeName(); - List afterValues = annAfter.getValues(); - - if (!beforeName.equals(afterName)) { - fail("Deserialization failed: before type='"+beforeName+"' after type='"+afterName+"'"); - } - if (a.getValues().size()!=annAfter.getValues().size()) { - fail("Different numbers of element name value pairs?? "+a.getValues().size()+"!="+annAfter.getValues().size()); - } - for (int i=0;i