public class ClassDumper
extends java.lang.Object
Modifier and Type | Class and Description |
---|---|
(package private) static class |
ClassDumper.Assoc |
Modifier and Type | Field and Description |
---|---|
(package private) static int |
ACC_ABSTRACT |
(package private) static int |
ACC_FINAL |
(package private) static int |
ACC_INTERFACE |
(package private) static int |
ACC_PUBLIC
ACC_PUBLIC 0x0001 Declared public; may be accessed from outside its
package.
|
(package private) static int |
ACC_SUPER |
(package private) static java.lang.String |
HEX_COLUMN |
(package private) java.io.InputStream |
in |
(package private) static java.lang.String |
NUM_COLUMN |
(package private) java.lang.String |
path |
(package private) java.lang.Object[] |
pool |
(package private) java.io.PrintStream |
ps |
(package private) static java.lang.String |
STR_COLUMN |
Constructor and Description |
---|
ClassDumper(java.lang.String path) |
ClassDumper(java.lang.String path,
java.io.InputStream in) |
Modifier and Type | Method and Description |
---|---|
private void |
doAnnotation(java.io.DataInputStream in,
java.lang.String indent) |
private void |
doAnnotations(java.io.DataInputStream in,
java.lang.String indent) |
private void |
doAttribute(java.io.DataInputStream in,
java.lang.String indent)
Process a single attribute, if not recognized, skip it.
|
private void |
doAttributes(java.io.DataInputStream in,
java.lang.String indent)
Called for each attribute in the class, field, or method.
|
private void |
doCode(java.io.DataInputStream in,
java.lang.String indent)
Code_attribute { u2 attribute_name_index; u4 attribute_length; u2
max_stack; u2 max_locals; u4 code_length; u1 code[code_length]; u2
exception_table_length; { u2 start_pc; u2 end_pc; u2 handler_pc; u2
catch_type; } exception_table[exception_table_length]; u2
attributes_count; attribute_info attributes[attributes_count]; }
|
private void |
doElementValue(java.io.DataInputStream in,
java.lang.String indent) |
(package private) void |
doEnclosingMethod(java.io.DataInputStream in,
java.lang.String indent)
EnclosingMethod_attribute { u2 attribute_name_index; u4
attribute_length; u2 class_index u2 method_index; }
|
private void |
doExceptions(java.io.DataInputStream in,
java.lang.String indent)
Exceptions_attribute { u2 attribute_name_index; u4
attribute_length; u2 number_of_exceptions; u2
exception_index_table[number_of_exceptions]; }
|
(package private) void |
doInnerClasses(java.io.DataInputStream in,
java.lang.String indent)
InnerClasses_attribute { u2 attribute_name_index; u4
attribute_length; u2 number_of_classes; { u2 inner_class_info_index; u2
outer_class_info_index; u2 inner_name_index; u2 inner_class_access_flags;
} classes[number_of_classes]; }
|
(package private) void |
doLineNumberTable(java.io.DataInputStream in,
java.lang.String indent)
LineNumberTable_attribute { u2 attribute_name_index; u4
attribute_length; u2 line_number_table_length; { u2 start_pc; u2
line_number; } line_number_table[line_number_table_length]; }
|
(package private) void |
doLocalVariableTable(java.io.DataInputStream in,
java.lang.String indent)
LocalVariableTable_attribute { u2 attribute_name_index; u4
attribute_length; u2 local_variable_table_length; { u2 start_pc; u2
length; u2 name_index; u2 descriptor_index; u2 index; }
local_variable_table[local_variable_table_length]; }
|
(package private) void |
doSignature(java.io.DataInputStream in,
java.lang.String indent)
Signature_attribute { u2 attribute_name_index; u4 attribute_length;
u2 signature_index; }
|
private void |
doSourceFile(java.io.DataInputStream in,
java.lang.String indent) |
void |
dump(java.io.PrintStream ps) |
static void |
main(java.lang.String[] args) |
(package private) void |
parseClassFile(java.io.DataInputStream in) |
(package private) void |
printAccess(int mod) |
(package private) void |
printClassAccess(int mod) |
protected void |
printHex(byte[] code)
We must find Class.forName references ...
|
static final int ACC_PUBLIC
ACC_PUBLIC 0x0001 Declared public; may be accessed from outside its package. ACC_FINAL 0x0010 Declared final; no subclasses allowed. ACC_SUPER 0x0020 Treat superclass methods specially when invoked by the invokespecial instruction. ACC_INTERFACE 0x0200 Is an interface, not a class. ACC_ABSTRACT 0x0400 Declared abstract; may not be instantiated.
static final int ACC_FINAL
static final int ACC_SUPER
static final int ACC_INTERFACE
static final int ACC_ABSTRACT
final java.lang.String path
static final java.lang.String NUM_COLUMN
static final java.lang.String HEX_COLUMN
static final java.lang.String STR_COLUMN
java.io.PrintStream ps
java.lang.Object[] pool
java.io.InputStream in
public ClassDumper(java.lang.String path) throws java.lang.Exception
java.lang.Exception
public ClassDumper(java.lang.String path, java.io.InputStream in) throws java.io.IOException
java.io.IOException
public void dump(java.io.PrintStream ps) throws java.lang.Exception
java.lang.Exception
void parseClassFile(java.io.DataInputStream in) throws java.io.IOException
java.io.IOException
private void doAttributes(java.io.DataInputStream in, java.lang.String indent) throws java.io.IOException
in
- The streamjava.io.IOException
private void doAttribute(java.io.DataInputStream in, java.lang.String indent) throws java.io.IOException
in
- the data streamjava.io.IOException
void doSignature(java.io.DataInputStream in, java.lang.String indent) throws java.io.IOException
Signature_attribute { u2 attribute_name_index; u4 attribute_length; u2 signature_index; }
in
- indent
- java.io.IOException
void doEnclosingMethod(java.io.DataInputStream in, java.lang.String indent) throws java.io.IOException
EnclosingMethod_attribute { u2 attribute_name_index; u4 attribute_length; u2 class_index u2 method_index; }
java.io.IOException
private void doExceptions(java.io.DataInputStream in, java.lang.String indent) throws java.io.IOException
Exceptions_attribute { u2 attribute_name_index; u4 attribute_length; u2 number_of_exceptions; u2 exception_index_table[number_of_exceptions]; }
in
- indent
- java.io.IOException
private void doCode(java.io.DataInputStream in, java.lang.String indent) throws java.io.IOException
Code_attribute { u2 attribute_name_index; u4 attribute_length; u2 max_stack; u2 max_locals; u4 code_length; u1 code[code_length]; u2 exception_table_length; { u2 start_pc; u2 end_pc; u2 handler_pc; u2 catch_type; } exception_table[exception_table_length]; u2 attributes_count; attribute_info attributes[attributes_count]; }
in
- pool
- java.io.IOException
protected void printHex(byte[] code)
code
- private void doSourceFile(java.io.DataInputStream in, java.lang.String indent) throws java.io.IOException
java.io.IOException
private void doAnnotations(java.io.DataInputStream in, java.lang.String indent) throws java.io.IOException
java.io.IOException
private void doAnnotation(java.io.DataInputStream in, java.lang.String indent) throws java.io.IOException
java.io.IOException
private void doElementValue(java.io.DataInputStream in, java.lang.String indent) throws java.io.IOException
java.io.IOException
void doLineNumberTable(java.io.DataInputStream in, java.lang.String indent) throws java.io.IOException
LineNumberTable_attribute { u2 attribute_name_index; u4 attribute_length; u2 line_number_table_length; { u2 start_pc; u2 line_number; } line_number_table[line_number_table_length]; }
java.io.IOException
void doLocalVariableTable(java.io.DataInputStream in, java.lang.String indent) throws java.io.IOException
LocalVariableTable_attribute { u2 attribute_name_index; u4 attribute_length; u2 local_variable_table_length; { u2 start_pc; u2 length; u2 name_index; u2 descriptor_index; u2 index; } local_variable_table[local_variable_table_length]; }
java.io.IOException
void doInnerClasses(java.io.DataInputStream in, java.lang.String indent) throws java.io.IOException
InnerClasses_attribute { u2 attribute_name_index; u4 attribute_length; u2 number_of_classes; { u2 inner_class_info_index; u2 outer_class_info_index; u2 inner_name_index; u2 inner_class_access_flags; } classes[number_of_classes]; }
java.io.IOException
void printClassAccess(int mod)
void printAccess(int mod)
public static void main(java.lang.String[] args) throws java.lang.Exception
java.lang.Exception