You are viewing a plain text version of this content. The canonical link for it is here.
Posted to bcel-dev@jakarta.apache.org by tc...@apache.org on 2010/01/10 20:26:09 UTC

svn commit: r897687 - in /jakarta/bcel/trunk/src/main/java/org/apache/bcel/classfile: AnnotationEntry.java Annotations.java

Author: tcurdt
Date: Sun Jan 10 19:26:09 2010
New Revision: 897687

URL: http://svn.apache.org/viewvc?rev=897687&view=rev
Log:
https://issues.apache.org/bugzilla/show_bug.cgi?id=41660

Expose annotations to subclasses


Modified:
    jakarta/bcel/trunk/src/main/java/org/apache/bcel/classfile/AnnotationEntry.java
    jakarta/bcel/trunk/src/main/java/org/apache/bcel/classfile/Annotations.java

Modified: jakarta/bcel/trunk/src/main/java/org/apache/bcel/classfile/AnnotationEntry.java
URL: http://svn.apache.org/viewvc/jakarta/bcel/trunk/src/main/java/org/apache/bcel/classfile/AnnotationEntry.java?rev=897687&r1=897686&r2=897687&view=diff
==============================================================================
--- jakarta/bcel/trunk/src/main/java/org/apache/bcel/classfile/AnnotationEntry.java (original)
+++ jakarta/bcel/trunk/src/main/java/org/apache/bcel/classfile/AnnotationEntry.java Sun Jan 10 19:26:09 2010
@@ -29,124 +29,129 @@
  * represents one annotation in the annotation table
  * 
  * @version $Id: AnnotationEntry
- * @author  <A HREF="mailto:dbrosius@mebigfatguy.com">D. Brosius</A>
+ * @author <A HREF="mailto:dbrosius@mebigfatguy.com">D. Brosius</A>
  * @since 5.3
  */
 public class AnnotationEntry implements Node, Constants, Serializable {
 
-    private int type_index;
-    private int num_element_value_pairs;
+    private static final long serialVersionUID = 1L;
+
+    private final int type_index;
+    private final ConstantPool constant_pool;
+    private final boolean isRuntimeVisible;
+
     private List element_value_pairs;
-    private ConstantPool constant_pool;
-    private boolean isRuntimeVisible;
 
+    /**
+     * Factory method to create an AnnotionEntry from a DataInputStream
+     * 
+     * @param file
+     * @param constant_pool
+     * @param isRuntimeVisible
+     * @return
+     * @throws IOException
+     */
+    public static AnnotationEntry read(DataInputStream file, ConstantPool constant_pool, boolean isRuntimeVisible) throws IOException {
+
+        final AnnotationEntry annotationEntry = new AnnotationEntry(file.readUnsignedShort(), constant_pool, isRuntimeVisible);
+        final int num_element_value_pairs = (file.readUnsignedShort());
+        annotationEntry.element_value_pairs = new ArrayList();
+        for (int i = 0; i < num_element_value_pairs; i++) {
+            annotationEntry.element_value_pairs.add(new ElementValuePair(file.readUnsignedShort(), ElementValue.readElementValue(file, constant_pool),
+                    constant_pool));
+        }
+        return annotationEntry;
+    }
 
     /**
      * Construct object from file stream.
+     * 
      * @param file Input stream
      */
     public AnnotationEntry(int type_index, ConstantPool constant_pool, boolean isRuntimeVisible) {
         this.type_index = type_index;
-        
         this.constant_pool = constant_pool;
         this.isRuntimeVisible = isRuntimeVisible;
     }
-    
-    public static AnnotationEntry read(DataInputStream file, ConstantPool constant_pool, boolean isRuntimeVisible) throws IOException 
-    {
-    	AnnotationEntry annotationEntry = new AnnotationEntry(file.readUnsignedShort(), constant_pool, isRuntimeVisible);
-    	annotationEntry.num_element_value_pairs = (file.readUnsignedShort());
-    	annotationEntry.element_value_pairs = new ArrayList();
-        for (int i = 0; i < annotationEntry.num_element_value_pairs; i++) {
-        	annotationEntry.element_value_pairs.add(new ElementValuePair(file.readUnsignedShort(), ElementValue.readElementValue(file, constant_pool), constant_pool));
-        }
-        return annotationEntry;
+
+    public int getTypeIndex() {
+        return type_index;
+    }
+
+    public ConstantPool getConstantPool() {
+        return constant_pool;
     }
 
+    public boolean isRuntimeVisible() {
+        return isRuntimeVisible;
+    }
 
     /**
-     * Called by objects that are traversing the nodes of the tree implicitely
-     * defined by the contents of a Java class. I.e., the hierarchy of methods,
-     * fields, attributes, etc. spawns a tree of objects.
-     *
+     * Called by objects that are traversing the nodes of the tree implicitely defined by the contents of a Java class.
+     * I.e., the hierarchy of methods, fields, attributes, etc. spawns a tree of objects.
+     * 
      * @param v Visitor object
      */
-    public void accept( Visitor v ) {
-        //	    v.visitAnnotationEntry(this);
+    public void accept(Visitor v) {
+        // v.visitAnnotationEntry(this);
     }
 
-
     /**
      * @return the annotation type name
      */
     public String getAnnotationType() {
-        ConstantUtf8 c;
-        c = (ConstantUtf8) constant_pool.getConstant(type_index, CONSTANT_Utf8);
+        final ConstantUtf8 c = (ConstantUtf8) constant_pool.getConstant(type_index, CONSTANT_Utf8);
         return c.getBytes();
     }
-    
+
     /**
      * @return the annotation type index
      */
-    public int getAnnotationTypeIndex()
-    {
-    	return type_index;
+    public int getAnnotationTypeIndex() {
+        return type_index;
     }
 
-
     /**
      * @return the number of element value pairs in this annotation entry
      */
     public final int getNumElementValuePairs() {
-        return num_element_value_pairs;
+        return element_value_pairs.size();
     }
 
-
     /**
      * @return the element value pairs in this annotation entry
      */
     public ElementValuePair[] getElementValuePairs() {
-    	// TOFO return List
+        // TODO return List
         return (ElementValuePair[]) element_value_pairs.toArray(new ElementValuePair[element_value_pairs.size()]);
     }
 
+    public void dump(DataOutputStream dos) throws IOException {
+        dos.writeShort(type_index); // u2 index of type name in cpool
+        dos.writeShort(element_value_pairs.size()); // u2 element_value pair
+        // count
+        for (int i = 0; i < element_value_pairs.size(); i++) {
+            final ElementValuePair envp = (ElementValuePair) element_value_pairs.get(i);
+            envp.dump(dos);
+        }
+    }
+
+    public void addElementNameValuePair(ElementValuePair elementNameValuePair) {
+        element_value_pairs.add(elementNameValuePair);
+    }
 
-	public void dump(DataOutputStream dos) throws IOException
-	{
-		dos.writeShort(type_index);	// u2 index of type name in cpool
-		dos.writeShort(element_value_pairs.size()); // u2 element_value pair count
-		for (int i = 0 ; i<element_value_pairs.size();i++) {
-			ElementValuePair envp = (ElementValuePair) element_value_pairs.get(i);
-			envp.dump(dos);
-		}
-	}
-
-
-	public boolean isRuntimeVisible()
-	{
-		return isRuntimeVisible;
-	}
-
-	public void addElementNameValuePair(ElementValuePair elementNameValuePair)
-	{
-		element_value_pairs.add(elementNameValuePair);
-	}
-
-	public String toShortString()
-	{
-		StringBuffer result = new StringBuffer();
-		result.append("@");
-		result.append(getAnnotationType());
-		if (getElementValuePairs().length > 0)
-		{
-			result.append("(");
-			for (int i = 0; i < getElementValuePairs().length; i++)
-			{
-				ElementValuePair element = getElementValuePairs()[i];
-				result.append(element.toShortString());
-			}
-			result.append(")");
-		}
-		return result.toString();
-	}
+    public String toShortString() {
+        final StringBuffer result = new StringBuffer();
+        result.append("@");
+        result.append(getAnnotationType());
+        if (getElementValuePairs().length > 0) {
+            result.append("(");
+            for (int i = 0; i < getElementValuePairs().length; i++) {
+                final ElementValuePair element = getElementValuePairs()[i];
+                result.append(element.toShortString());
+            }
+            result.append(")");
+        }
+        return result.toString();
+    }
 }

Modified: jakarta/bcel/trunk/src/main/java/org/apache/bcel/classfile/Annotations.java
URL: http://svn.apache.org/viewvc/jakarta/bcel/trunk/src/main/java/org/apache/bcel/classfile/Annotations.java?rev=897687&r1=897686&r2=897687&view=diff
==============================================================================
--- jakarta/bcel/trunk/src/main/java/org/apache/bcel/classfile/Annotations.java (original)
+++ jakarta/bcel/trunk/src/main/java/org/apache/bcel/classfile/Annotations.java Sun Jan 10 19:26:09 2010
@@ -24,15 +24,15 @@
  * base class for annotations
  * 
  * @version $Id: Annotations
- * @author  <A HREF="mailto:dbrosius@qis.net">D. Brosius</A>
+ * @author <A HREF="mailto:dbrosius@qis.net">D. Brosius</A>
  * @since 5.3
  */
 public abstract class Annotations extends Attribute {
 
-    private int annotation_table_length;
-    private AnnotationEntry[] annotation_table; // Table of annotations
-    private boolean isRuntimeVisible;
+    private static final long serialVersionUID = 1L;
 
+    private AnnotationEntry[] annotation_table;
+    private final boolean isRuntimeVisible;
 
     /**
      * @param annotation_type the subclass type of the annotation
@@ -41,17 +41,15 @@
      * @param file Input stream
      * @param constant_pool Array of constants
      */
-    public Annotations(byte annotation_type, int name_index, int length, DataInputStream file,
-            ConstantPool constant_pool, boolean isRuntimeVisible) throws IOException {
+    public Annotations(byte annotation_type, int name_index, int length, DataInputStream file, ConstantPool constant_pool, boolean isRuntimeVisible) throws IOException {
         this(annotation_type, name_index, length, (AnnotationEntry[]) null, constant_pool, isRuntimeVisible);
-        annotation_table_length = (file.readUnsignedShort());
+        final int annotation_table_length = (file.readUnsignedShort());
         annotation_table = new AnnotationEntry[annotation_table_length];
         for (int i = 0; i < annotation_table_length; i++) {
             annotation_table[i] = AnnotationEntry.read(file, constant_pool, isRuntimeVisible);
         }
     }
 
-
     /**
      * @param annotation_type the subclass type of the annotation
      * @param name_index Index pointing to the name <em>Code</em>
@@ -59,45 +57,29 @@
      * @param annotation_table the actual annotations
      * @param constant_pool Array of constants
      */
-    public Annotations(byte annotation_type, int name_index, int length,
-            AnnotationEntry[] annotation_table, ConstantPool constant_pool , boolean isRuntimeVisible) {
+    public Annotations(byte annotation_type, int name_index, int length, AnnotationEntry[] annotation_table, ConstantPool constant_pool, boolean isRuntimeVisible) {
         super(annotation_type, name_index, length, constant_pool);
         setAnnotationTable(annotation_table);
         this.isRuntimeVisible = isRuntimeVisible;
     }
 
-
     /**
-     * Called by objects that are traversing the nodes of the tree implicitely
-     * defined by the contents of a Java class. I.e., the hierarchy of methods,
-     * fields, attributes, etc. spawns a tree of objects.
-     *
+     * Called by objects that are traversing the nodes of the tree implicitely defined by the contents of a Java class.
+     * I.e., the hierarchy of methods, fields, attributes, etc. spawns a tree of objects.
+     * 
      * @param v Visitor object
      */
-    public void accept( Visitor v ) {
+    public void accept(Visitor v) {
         v.visitAnnotation(this);
     }
 
-
     /**
      * @param annotation_table the entries to set in this annotation
      */
-    public final void setAnnotationTable( AnnotationEntry[] annotation_table ) {
+    public final void setAnnotationTable(AnnotationEntry[] annotation_table) {
         this.annotation_table = annotation_table;
-        annotation_table_length = (annotation_table == null) ? 0 : annotation_table.length;
     }
 
-
-    // TODO: update method names
-    /**
-     * @return the annotation entry table
-     */
-    /*
-    public final AnnotationEntry[] getAnnotationTable() {
-        return annotation_table;
-    }*/
-
-
     /**
      * returns the array of annotation entries in this annotation
      */
@@ -105,23 +87,27 @@
         return annotation_table;
     }
 
-
     /**
      * @return the number of annotation entries in this annotation
      */
     public final int getNumAnnotations() {
-        return annotation_table_length;
+        if (annotation_table == null) {
+            return 0;
+        }
+        return annotation_table.length;
+    }
+
+    public boolean isRuntimeVisible() {
+        return isRuntimeVisible;
+    }
+
+    protected void writeAnnotations(DataOutputStream dos) throws IOException {
+        if (annotation_table == null) {
+            return;
+        }
+        dos.writeShort(annotation_table.length);
+        for (int i = 0; i < annotation_table.length; i++) {
+            annotation_table[i].dump(dos);
+        }
     }
-    
-    public boolean isRuntimeVisible()
-    {
-    	return isRuntimeVisible;
-    }
-    
-    protected void writeAnnotations(DataOutputStream dos) throws IOException
-	{
-		dos.writeShort(annotation_table_length);
-		for (int i = 0; i < annotation_table_length; i++)
-			annotation_table[i].dump(dos);
-	}
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: bcel-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: bcel-dev-help@jakarta.apache.org