Package org.apache.axis.utils.bytecode
Class ClassReader
java.lang.Object
java.io.InputStream
java.io.ByteArrayInputStream
org.apache.axis.utils.bytecode.ClassReader
- All Implemented Interfaces:
Closeable
,AutoCloseable
- Direct Known Subclasses:
ParamReader
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 -
Method Summary
Modifier and TypeMethodDescriptionprotected static Map
protected static byte[]
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 String
getSignature
(Member method, Class[] paramTypes) protected final void
read an attributes array.void
readCode()
read a code attributeprotected final void
protected final int
readInt()
protected final int
protected final Class
resolveClass
(int i) protected final Field
resolveField
(int i) protected final Member
resolveMethod
(int index) protected final org.apache.axis.utils.bytecode.ClassReader.NameAndType
resolveNameAndType
(int i) protected final String
resolveUtf8
(int i) protected final void
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, skipNBytes
-
Constructor Details
-
ClassReader
-
-
Method Details
-
getBytes
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:
IOException
-
findAttributeReaders
-
getSignature
-
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
skip n bytes in the input stream.- Throws:
IOException
-
resolveMethod
protected final Member resolveMethod(int index) throws IOException, ClassNotFoundException, NoSuchMethodException -
resolveField
protected final Field resolveField(int i) throws IOException, ClassNotFoundException, NoSuchFieldException -
resolveNameAndType
protected final org.apache.axis.utils.bytecode.ClassReader.NameAndType resolveNameAndType(int i) throws IOException - Throws:
IOException
-
resolveClass
- Throws:
IOException
ClassNotFoundException
-
resolveUtf8
- Throws:
IOException
-
readCpool
- Throws:
IOException
-
skipAttributes
- Throws:
IOException
-
readAttributes
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:
IOException
-
readCode
read a code attribute- Throws:
IOException
-