Class ClassReader

  • All Implemented Interfaces:
    java.io.Closeable, java.lang.AutoCloseable
    Direct Known Subclasses:
    ParamReader

    public class ClassReader
    extends java.io.ByteArrayInputStream
    This is the class file reader for obtaining the parameter names for declared methods in a class. The class must have debugging attributes for us to obtain this information.

    This does not work for inherited methods. To obtain parameter names for inherited methods, you must use a paramReader for the class that originally declared the method.

    don't get tricky, it's the bare minimum. Instances of this class are not threadsafe -- don't share them.

    Author:
    Edwin Smith, Macromedia
    • Field Summary

      • Fields inherited from class java.io.ByteArrayInputStream

        buf, count, mark, pos
    • Constructor Summary

      Constructors 
      Modifier Constructor Description
      protected ClassReader​(byte[] buf, java.util.Map attrMethods)  
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      protected static java.util.Map findAttributeReaders​(java.lang.Class c)  
      protected static byte[] getBytes​(java.lang.Class c)
      load the bytecode for a given class, by using the class's defining classloader and assuming that for a class named P.C, the bytecodes are in a resource named /P/C.class.
      protected static java.lang.String getSignature​(java.lang.reflect.Member method, java.lang.Class[] paramTypes)  
      protected void readAttributes()
      read an attributes array.
      void readCode()
      read a code attribute
      protected void readCpool()  
      protected int readInt()  
      protected int readShort()  
      protected java.lang.Class resolveClass​(int i)  
      protected java.lang.reflect.Field resolveField​(int i)  
      protected java.lang.reflect.Member resolveMethod​(int index)  
      protected org.apache.axis.utils.bytecode.ClassReader.NameAndType resolveNameAndType​(int i)  
      protected java.lang.String resolveUtf8​(int i)  
      protected void skipAttributes()  
      protected void skipFully​(int n)
      skip n bytes in the input stream.
      • Methods inherited from class java.io.ByteArrayInputStream

        available, close, mark, markSupported, read, read, readAllBytes, readNBytes, reset, skip, transferTo
      • Methods inherited from class java.io.InputStream

        nullInputStream, read, readNBytes
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • ClassReader

        protected ClassReader​(byte[] buf,
                              java.util.Map attrMethods)
    • Method Detail

      • getBytes

        protected static byte[] getBytes​(java.lang.Class c)
                                  throws java.io.IOException
        load the bytecode for a given class, by using the class's defining classloader and assuming that for a class named P.C, the bytecodes are in a resource named /P/C.class.
        Parameters:
        c - the class of interest
        Returns:
        a byte array containing the bytecode
        Throws:
        java.io.IOException
      • findAttributeReaders

        protected static java.util.Map findAttributeReaders​(java.lang.Class c)
      • getSignature

        protected static java.lang.String getSignature​(java.lang.reflect.Member method,
                                                       java.lang.Class[] paramTypes)
      • readShort

        protected final int readShort()
        Returns:
        the next unsigned 16 bit value
      • readInt

        protected final int readInt()
        Returns:
        the next signed 32 bit value
      • skipFully

        protected void skipFully​(int n)
                          throws java.io.IOException
        skip n bytes in the input stream.
        Throws:
        java.io.IOException
      • resolveMethod

        protected final java.lang.reflect.Member resolveMethod​(int index)
                                                        throws java.io.IOException,
                                                               java.lang.ClassNotFoundException,
                                                               java.lang.NoSuchMethodException
        Throws:
        java.io.IOException
        java.lang.ClassNotFoundException
        java.lang.NoSuchMethodException
      • resolveField

        protected final java.lang.reflect.Field resolveField​(int i)
                                                      throws java.io.IOException,
                                                             java.lang.ClassNotFoundException,
                                                             java.lang.NoSuchFieldException
        Throws:
        java.io.IOException
        java.lang.ClassNotFoundException
        java.lang.NoSuchFieldException
      • resolveNameAndType

        protected final org.apache.axis.utils.bytecode.ClassReader.NameAndType resolveNameAndType​(int i)
                                                                                           throws java.io.IOException
        Throws:
        java.io.IOException
      • resolveClass

        protected final java.lang.Class resolveClass​(int i)
                                              throws java.io.IOException,
                                                     java.lang.ClassNotFoundException
        Throws:
        java.io.IOException
        java.lang.ClassNotFoundException
      • resolveUtf8

        protected final java.lang.String resolveUtf8​(int i)
                                              throws java.io.IOException
        Throws:
        java.io.IOException
      • readCpool

        protected final void readCpool()
                                throws java.io.IOException
        Throws:
        java.io.IOException
      • skipAttributes

        protected final void skipAttributes()
                                     throws java.io.IOException
        Throws:
        java.io.IOException
      • readAttributes

        protected final void readAttributes()
                                     throws java.io.IOException
        read an attributes array. the elements of a class file that can contain attributes are: fields, methods, the class itself, and some other types of attributes.
        Throws:
        java.io.IOException
      • readCode

        public void readCode()
                      throws java.io.IOException
        read a code attribute
        Throws:
        java.io.IOException