You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2015/05/28 21:12:20 UTC

svn commit: r1682311 - in /tomcat/trunk/java/org/apache/tomcat/util/bcel: ./ classfile/

Author: markt
Date: Thu May 28 19:12:19 2015
New Revision: 1682311

URL: http://svn.apache.org/r1682311
Log:
Merge BCEL changes from r1614166 to r1682271
The changes consist of:
- code clean-up
- Javadoc tweaks
- some renaming
There are no functional changes

Modified:
    tomcat/trunk/java/org/apache/tomcat/util/bcel/   (props changed)
    tomcat/trunk/java/org/apache/tomcat/util/bcel/Constants.java
    tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/AnnotationEntry.java
    tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/Annotations.java
    tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/ClassParser.java
    tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/Constant.java
    tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/ConstantLong.java
    tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/ConstantPool.java
    tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/ConstantUtf8.java
    tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/ElementValue.java
    tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/JavaClass.java
    tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/Utility.java
    tomcat/trunk/java/org/apache/tomcat/util/bcel/package.html

Propchange: tomcat/trunk/java/org/apache/tomcat/util/bcel/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu May 28 19:12:19 2015
@@ -1,2 +1,2 @@
-/commons/proper/bcel/trunk/src/main/java/org/apache/bcel:1149512-1614166
+/commons/proper/bcel/trunk/src/main/java/org/apache/bcel:1149512-1682271
 /jakarta/bcel/trunk/src/main/java/org/apache/bcel:886845-1149511

Modified: tomcat/trunk/java/org/apache/tomcat/util/bcel/Constants.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/bcel/Constants.java?rev=1682311&r1=1682310&r2=1682311&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/bcel/Constants.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/bcel/Constants.java Thu May 28 19:12:19 2015
@@ -24,7 +24,11 @@ package org.apache.tomcat.util.bcel;
  */
 public interface Constants {
 
-  /** One of the access flags for fields, methods, or classes.
+  /**
+   * One of the access flags for fields, methods, or classes.
+   * @see "<a href='http://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.5'>Flag definitions for Fields in the Java Virtual Machine Specification (Java SE 8 Edition).</a>"
+   * @see "<a href='http://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.6'>Flag definitions for Methods in the Java Virtual Machine Specification (Java SE 8 Edition).</a>"
+   * @see "<a href='http://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.7.6-300-D.1-D.1'>Flag definitions for Classes in the Java Virtual Machine Specification (Java SE 8 Edition).</a>"
    */
   public static final short ACC_FINAL        = 0x0010;
 
@@ -90,5 +94,4 @@ public interface Constants {
     "CONSTANT_Methodref", "CONSTANT_InterfaceMethodref",
     "CONSTANT_NameAndType", "", "", "CONSTANT_MethodHandle",
     "CONSTANT_MethodType", "", "CONSTANT_InvokeDynamic" };
-
 }

Modified: tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/AnnotationEntry.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/AnnotationEntry.java?rev=1682311&r1=1682310&r2=1682311&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/AnnotationEntry.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/AnnotationEntry.java Thu May 28 19:12:19 2015
@@ -40,20 +40,20 @@ public class AnnotationEntry implements
     /**
      * Creates an AnnotationEntry from a DataInputStream
      *
-     * @param file
+     * @param input
      * @param constant_pool
      * @throws IOException
      */
-    AnnotationEntry(DataInput file, ConstantPool constant_pool) throws IOException {
+    AnnotationEntry(DataInput input, ConstantPool constant_pool) throws IOException {
 
         this.constant_pool = constant_pool;
 
-        type_index = file.readUnsignedShort();
-        int num_element_value_pairs = file.readUnsignedShort();
+        type_index = input.readUnsignedShort();
+        int num_element_value_pairs = input.readUnsignedShort();
 
         element_value_pairs = new ArrayList<>(num_element_value_pairs);
         for (int i = 0; i < num_element_value_pairs; i++) {
-            element_value_pairs.add(new ElementValuePair(file, constant_pool));
+            element_value_pairs.add(new ElementValuePair(input, constant_pool));
         }
     }
 

Modified: tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/Annotations.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/Annotations.java?rev=1682311&r1=1682310&r2=1682311&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/Annotations.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/Annotations.java Thu May 28 19:12:19 2015
@@ -31,15 +31,14 @@ public class Annotations {
     private final AnnotationEntry[] annotation_table;
 
     /**
-     * @param file Input stream
+     * @param input Input stream
      * @param constant_pool Array of constants
      */
-    Annotations(DataInput file, ConstantPool constant_pool)
-            throws IOException {
-        final int annotation_table_length = (file.readUnsignedShort());
+    Annotations(DataInput input, ConstantPool constant_pool) throws IOException {
+        final int annotation_table_length = (input.readUnsignedShort());
         annotation_table = new AnnotationEntry[annotation_table_length];
         for (int i = 0; i < annotation_table_length; i++) {
-            annotation_table[i] = new AnnotationEntry(file, constant_pool);
+            annotation_table[i] = new AnnotationEntry(input, constant_pool);
         }
     }
 

Modified: tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/ClassParser.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/ClassParser.java?rev=1682311&r1=1682310&r2=1682311&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/ClassParser.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/ClassParser.java Thu May 28 19:12:19 2015
@@ -33,7 +33,7 @@ import org.apache.tomcat.util.bcel.Const
  * the caller.
  *
  * The structure and the names comply, except for a few conveniences,
- * exactly with the <A href="ftp://java.sun.com/docs/specs/vmspec.ps">
+ * exactly with the <A href="http://docs.oracle.com/javase/specs/">
  * JVM specification 1.0</a>. See this paper for
  * further details about the structure of a bytecode file.
  *
@@ -43,7 +43,7 @@ public final class ClassParser {
 
     private static final int MAGIC = 0xCAFEBABE;
 
-    private final DataInput file;
+    private final DataInput dataInputStream;
     private String class_name, superclass_name;
     private int access_flags; // Access rights of parsed class
     private String[] interface_names; // Names of implemented interfaces
@@ -56,10 +56,10 @@ public final class ClassParser {
     /**
      * Parse class from the given stream.
      *
-     * @param file Input stream
+     * @param inputStream Input stream
      */
-    public ClassParser(InputStream file) {
-        this.file = new DataInputStream(new BufferedInputStream(file, BUFSIZE));
+    public ClassParser(InputStream inputStream) {
+        this.dataInputStream = new DataInputStream(new BufferedInputStream(inputStream, BUFSIZE));
     }
 
 
@@ -108,30 +108,29 @@ public final class ClassParser {
      * @throws  ClassFormatException
      */
     private void readAttributes() throws IOException, ClassFormatException {
-        int attributes_count;
-        attributes_count = file.readUnsignedShort();
+        int attributes_count = dataInputStream.readUnsignedShort();
         for (int i = 0; i < attributes_count; i++) {
             ConstantUtf8 c;
             String name;
             int name_index;
             int length;
             // Get class name from constant pool via `name_index' indirection
-            name_index = file.readUnsignedShort();
+            name_index = dataInputStream.readUnsignedShort();
             c = (ConstantUtf8) constant_pool.getConstant(name_index,
                     Constants.CONSTANT_Utf8);
             name = c.getBytes();
             // Length of data in bytes
-            length = file.readInt();
+            length = dataInputStream.readInt();
 
             if (name.equals("RuntimeVisibleAnnotations")) {
                 if (runtimeVisibleAnnotations != null) {
                     throw new ClassFormatException(
                             "RuntimeVisibleAnnotations attribute is not allowed more than once in a class file");
                 }
-                runtimeVisibleAnnotations = new Annotations(file, constant_pool);
+                runtimeVisibleAnnotations = new Annotations(dataInputStream, constant_pool);
             } else {
                 // All other attributes are skipped
-                Utility.skipFully(file, length);
+                Utility.skipFully(dataInputStream, length);
             }
         }
     }
@@ -143,7 +142,7 @@ public final class ClassParser {
      * @throws  ClassFormatException
      */
     private void readClassInfo() throws IOException, ClassFormatException {
-        access_flags = file.readUnsignedShort();
+        access_flags = dataInputStream.readUnsignedShort();
         /* Interfaces are implicitely abstract, the flag should be set
          * according to the JVM specification.
          */
@@ -155,10 +154,10 @@ public final class ClassParser {
             throw new ClassFormatException("Class can't be both final and abstract");
         }
 
-        int class_name_index = file.readUnsignedShort();
+        int class_name_index = dataInputStream.readUnsignedShort();
         class_name = Utility.getClassName(constant_pool, class_name_index);
 
-        int superclass_name_index = file.readUnsignedShort();
+        int superclass_name_index = dataInputStream.readUnsignedShort();
         if (superclass_name_index > 0) {
             // May be zero -> class is java.lang.Object
             superclass_name = Utility.getClassName(constant_pool, superclass_name_index);
@@ -174,7 +173,7 @@ public final class ClassParser {
      * @throws  ClassFormatException
      */
     private void readConstantPool() throws IOException, ClassFormatException {
-        constant_pool = new ConstantPool(file);
+        constant_pool = new ConstantPool(dataInputStream);
     }
 
 
@@ -184,9 +183,9 @@ public final class ClassParser {
      * @throws  ClassFormatException
      */
     private void readFields() throws IOException, ClassFormatException {
-        int fields_count = file.readUnsignedShort();
+        int fields_count = dataInputStream.readUnsignedShort();
         for (int i = 0; i < fields_count; i++) {
-            Utility.swallowFieldOrMethod(file);
+            Utility.swallowFieldOrMethod(dataInputStream);
         }
     }
 
@@ -199,7 +198,7 @@ public final class ClassParser {
      * @throws  ClassFormatException
      */
     private void readID() throws IOException, ClassFormatException {
-        if (file.readInt() != MAGIC) {
+        if (dataInputStream.readInt() != MAGIC) {
             throw new ClassFormatException("It is not a Java .class file");
         }
     }
@@ -211,12 +210,11 @@ public final class ClassParser {
      * @throws  ClassFormatException
      */
     private void readInterfaces() throws IOException, ClassFormatException {
-        int interfaces_count;
-        interfaces_count = file.readUnsignedShort();
+        int interfaces_count = dataInputStream.readUnsignedShort();
         if (interfaces_count > 0) {
             interface_names = new String[interfaces_count];
             for (int i = 0; i < interfaces_count; i++) {
-                int index = file.readUnsignedShort();
+                int index = dataInputStream.readUnsignedShort();
                 interface_names[i] = Utility.getClassName(constant_pool, index);
             }
         } else {
@@ -231,10 +229,9 @@ public final class ClassParser {
      * @throws  ClassFormatException
      */
     private void readMethods() throws IOException, ClassFormatException {
-        int methods_count;
-        methods_count = file.readUnsignedShort();
+        int methods_count = dataInputStream.readUnsignedShort();
         for (int i = 0; i < methods_count; i++) {
-            Utility.swallowFieldOrMethod(file);
+            Utility.swallowFieldOrMethod(dataInputStream);
         }
     }
 
@@ -247,6 +244,6 @@ public final class ClassParser {
     private void readVersion() throws IOException, ClassFormatException {
         // file.readUnsignedShort(); // Unused minor
         // file.readUnsignedShort(); // Unused major
-        Utility.skipFully(file, 4);
+        Utility.skipFully(dataInputStream, 4);
     }
 }

Modified: tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/Constant.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/Constant.java?rev=1682311&r1=1682310&r2=1682311&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/Constant.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/Constant.java Thu May 28 19:12:19 2015
@@ -57,28 +57,28 @@ public abstract class Constant {
 
 
     /**
-     * Read one constant from the given file, the type depends on a tag byte.
+     * Read one constant from the given input, the type depends on a tag byte.
      *
-     * @param file Input stream
+     * @param input Input stream
      * @return Constant object
      */
-    static Constant readConstant(DataInput file ) throws IOException,
+    static Constant readConstant(DataInput input) throws IOException,
             ClassFormatException {
-        byte b = file.readByte(); // Read tag byte
+        byte b = input.readByte(); // Read tag byte
         int skipSize;
         switch (b) {
             case Constants.CONSTANT_Class:
-                return new ConstantClass(file);
+                return new ConstantClass(input);
             case Constants.CONSTANT_Integer:
-                return new ConstantInteger(file);
+                return new ConstantInteger(input);
             case Constants.CONSTANT_Float:
-                return new ConstantFloat(file);
+                return new ConstantFloat(input);
             case Constants.CONSTANT_Long:
-                return new ConstantLong(file);
+                return new ConstantLong(input);
             case Constants.CONSTANT_Double:
-                return new ConstantDouble(file);
+                return new ConstantDouble(input);
             case Constants.CONSTANT_Utf8:
-                return ConstantUtf8.getInstance(file);
+                return ConstantUtf8.getInstance(input);
             case Constants.CONSTANT_String:
             case Constants.CONSTANT_MethodType:
                 skipSize = 2; // unsigned short
@@ -96,7 +96,7 @@ public abstract class Constant {
             default:
                 throw new ClassFormatException("Invalid byte tag in constant pool: " + b);
         }
-        Utility.skipFully(file, skipSize);
+        Utility.skipFully(input, skipSize);
         return null;
     }
 

Modified: tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/ConstantLong.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/ConstantLong.java?rev=1682311&r1=1682310&r2=1682311&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/ConstantLong.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/ConstantLong.java Thu May 28 19:12:19 2015
@@ -41,9 +41,9 @@ public final class ConstantLong extends
      * @param file Input stream
      * @throws IOException
      */
-    ConstantLong(DataInput file) throws IOException {
+    ConstantLong(DataInput input) throws IOException {
         super(Constants.CONSTANT_Long);
-        this.bytes = file.readLong();
+        this.bytes = input.readLong();
     }
 
 

Modified: tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/ConstantPool.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/ConstantPool.java?rev=1682311&r1=1682310&r2=1682311&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/ConstantPool.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/ConstantPool.java Thu May 28 19:12:19 2015
@@ -39,20 +39,20 @@ public class ConstantPool {
 
 
     /**
-     * Read constants from given file stream.
+     * Read constants from given input stream.
      *
-     * @param file Input stream
+     * @param input Input stream
      * @throws IOException
      * @throws ClassFormatException
      */
-    ConstantPool(DataInput file) throws IOException, ClassFormatException {
-        int constant_pool_count = file.readUnsignedShort();
+    ConstantPool(DataInput input) throws IOException, ClassFormatException {
+        int constant_pool_count = input.readUnsignedShort();
         constant_pool = new Constant[constant_pool_count];
         /* constant_pool[0] is unused by the compiler and may be used freely
          * by the implementation.
          */
         for (int i = 1; i < constant_pool_count; i++) {
-            constant_pool[i] = Constant.readConstant(file);
+            constant_pool[i] = Constant.readConstant(input);
             /* Quote from the JVM specification:
              * "All eight byte constants take up two spots in the constant pool.
              * If this is the n'th byte in the constant pool, then the next item

Modified: tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/ConstantUtf8.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/ConstantUtf8.java?rev=1682311&r1=1682310&r2=1682311&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/ConstantUtf8.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/ConstantUtf8.java Thu May 28 19:12:19 2015
@@ -34,8 +34,8 @@ public final class ConstantUtf8 extends
     private final String bytes;
 
 
-    static ConstantUtf8 getInstance(DataInput file) throws IOException {
-        return new ConstantUtf8(file.readUTF());
+    static ConstantUtf8 getInstance(DataInput input) throws IOException {
+        return new ConstantUtf8(input.readUTF());
     }
 
 

Modified: tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/ElementValue.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/ElementValue.java?rev=1682311&r1=1682310&r2=1682311&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/ElementValue.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/ElementValue.java Thu May 28 19:12:19 2015
@@ -13,7 +13,6 @@
  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
- *
  */
 package org.apache.tomcat.util.bcel.classfile;
 
@@ -38,86 +37,59 @@ public abstract class ElementValue
 
     public abstract String stringifyValue();
 
-    public static final int STRING = 's';
+    public static final byte STRING            = 's';
+    public static final byte ENUM_CONSTANT     = 'e';
+    public static final byte CLASS             = 'c';
+    public static final byte ANNOTATION        = '@';
+    public static final byte ARRAY             = '[';
+    public static final byte PRIMITIVE_INT     = 'I';
+    public static final byte PRIMITIVE_BYTE    = 'B';
+    public static final byte PRIMITIVE_CHAR    = 'C';
+    public static final byte PRIMITIVE_DOUBLE  = 'D';
+    public static final byte PRIMITIVE_FLOAT   = 'F';
+    public static final byte PRIMITIVE_LONG    = 'J';
+    public static final byte PRIMITIVE_SHORT   = 'S';
+    public static final byte PRIMITIVE_BOOLEAN = 'Z';
 
-    public static final int ENUM_CONSTANT = 'e';
-
-    public static final int CLASS = 'c';
-
-    public static final int ANNOTATION = '@';
-
-    public static final int ARRAY = '[';
-
-    public static final int PRIMITIVE_INT = 'I';
-
-    public static final int PRIMITIVE_BYTE = 'B';
-
-    public static final int PRIMITIVE_CHAR = 'C';
-
-    public static final int PRIMITIVE_DOUBLE = 'D';
-
-    public static final int PRIMITIVE_FLOAT = 'F';
-
-    public static final int PRIMITIVE_LONG = 'J';
-
-    public static final int PRIMITIVE_SHORT = 'S';
-
-    public static final int PRIMITIVE_BOOLEAN = 'Z';
-
-    public static ElementValue readElementValue(DataInput dis,
-            ConstantPool cpool) throws IOException
+    public static ElementValue readElementValue(DataInput input, ConstantPool cpool) throws IOException
     {
-        byte type = dis.readByte();
+        byte type = input.readByte();
         switch (type)
         {
-        case 'B': // byte
-            return new SimpleElementValue(PRIMITIVE_BYTE, dis
-                    .readUnsignedShort(), cpool);
-        case 'C': // char
-            return new SimpleElementValue(PRIMITIVE_CHAR, dis
-                    .readUnsignedShort(), cpool);
-        case 'D': // double
-            return new SimpleElementValue(PRIMITIVE_DOUBLE, dis
-                    .readUnsignedShort(), cpool);
-        case 'F': // float
-            return new SimpleElementValue(PRIMITIVE_FLOAT, dis
-                    .readUnsignedShort(), cpool);
-        case 'I': // int
-            return new SimpleElementValue(PRIMITIVE_INT, dis
-                    .readUnsignedShort(), cpool);
-        case 'J': // long
-            return new SimpleElementValue(PRIMITIVE_LONG, dis
-                    .readUnsignedShort(), cpool);
-        case 'S': // short
-            return new SimpleElementValue(PRIMITIVE_SHORT, dis
-                    .readUnsignedShort(), cpool);
-        case 'Z': // boolean
-            return new SimpleElementValue(PRIMITIVE_BOOLEAN, dis
-                    .readUnsignedShort(), cpool);
-        case 's': // String
-            return new SimpleElementValue(STRING, dis.readUnsignedShort(),
-                    cpool);
-        case 'e': // Enum constant
-            dis.readUnsignedShort();    // Unused type_index
-            return new EnumElementValue(ENUM_CONSTANT,
-                    dis.readUnsignedShort(), cpool);
-        case 'c': // Class
-            return new ClassElementValue(CLASS, dis.readUnsignedShort(), cpool);
-        case '@': // Annotation
-            // TODO isRuntimeVisible
-            return new AnnotationElementValue(ANNOTATION, new AnnotationEntry(
-                    dis, cpool), cpool);
-        case '[': // Array
-            int numArrayVals = dis.readUnsignedShort();
-            ElementValue[] evalues = new ElementValue[numArrayVals];
-            for (int j = 0; j < numArrayVals; j++)
-            {
-                evalues[j] = ElementValue.readElementValue(dis, cpool);
-            }
-            return new ArrayElementValue(ARRAY, evalues, cpool);
-        default:
-            throw new ClassFormatException(
-                    "Unexpected element value kind in annotation: " + type);
+            case PRIMITIVE_BYTE:
+            case PRIMITIVE_CHAR:
+            case PRIMITIVE_DOUBLE:
+            case PRIMITIVE_FLOAT:
+            case PRIMITIVE_INT:
+            case PRIMITIVE_LONG:
+            case PRIMITIVE_SHORT:
+            case PRIMITIVE_BOOLEAN:
+            case STRING:
+                return new SimpleElementValue(type, input.readUnsignedShort(), cpool);
+
+            case ENUM_CONSTANT:
+                input.readUnsignedShort();    // Unused type_index
+                return new EnumElementValue(ENUM_CONSTANT, input.readUnsignedShort(), cpool);
+
+            case CLASS:
+                return new ClassElementValue(CLASS, input.readUnsignedShort(), cpool);
+
+            case ANNOTATION:
+                // TODO isRuntimeVisible
+                return new AnnotationElementValue(ANNOTATION, new AnnotationEntry(input, cpool), cpool);
+
+            case ARRAY:
+                int numArrayVals = input.readUnsignedShort();
+                ElementValue[] evalues = new ElementValue[numArrayVals];
+                for (int j = 0; j < numArrayVals; j++)
+                {
+                    evalues[j] = ElementValue.readElementValue(input, cpool);
+                }
+                return new ArrayElementValue(ARRAY, evalues, cpool);
+
+            default:
+                throw new ClassFormatException(
+                        "Unexpected element value kind in annotation: " + type);
         }
     }
 }

Modified: tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/JavaClass.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/JavaClass.java?rev=1682311&r1=1682310&r2=1682311&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/JavaClass.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/JavaClass.java Thu May 28 19:12:19 2015
@@ -20,7 +20,7 @@ package org.apache.tomcat.util.bcel.clas
 /**
  * Represents a Java class, i.e., the data structures, constant pool,
  * fields, methods and commands contained in a Java .class file.
- * See <a href="ftp://java.sun.com/docs/specs/">JVM specification</a> for details.
+ * See <a href="http://docs.oracle.com/javase/specs/">JVM specification</a> for details.
  * The intent of this class is to represent a parsed or otherwise existing
  * class file.  Those interested in programatically generating classes
  * should see the <a href="../generic/ClassGen.html">ClassGen</a> class.

Modified: tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/Utility.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/Utility.java?rev=1682311&r1=1682310&r2=1682311&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/Utility.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/Utility.java Thu May 28 19:12:19 2015
@@ -13,7 +13,6 @@
  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
- *
  */
 package org.apache.tomcat.util.bcel.classfile;
 
@@ -86,5 +85,4 @@ final class Utility {
         int length = file.readInt();
         skipFully(file, length);
     }
-
 }

Modified: tomcat/trunk/java/org/apache/tomcat/util/bcel/package.html
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/bcel/package.html?rev=1682311&r1=1682310&r2=1682311&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/bcel/package.html (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/bcel/package.html Thu May 28 19:12:19 2015
@@ -23,7 +23,7 @@
 This package contains basic classes for the
 <a href="http://commons.apache.org/bcel/">Byte Code Engineering Library</a>
  and constants defined by the
-<a href="http://java.sun.com/docs/books/vmspec/html/VMSpecTOC.doc.html">
+<a href="http://docs.oracle.com/javase/specs/">
  JVM specification</a>.
 </p>
 </body>



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