Package aQute.libg.classdump
Class ClassDumper
- java.lang.Object
-
- aQute.libg.classdump.ClassDumper
-
public class ClassDumper extends java.lang.Object
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description (package private) static class
ClassDumper.Assoc
-
Field Summary
Fields Modifier and Type Field 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 Summary
Constructors Constructor Description ClassDumper(java.lang.String path)
ClassDumper(java.lang.String path, java.io.InputStream in)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method 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 ...
-
-
-
Field Detail
-
ACC_PUBLIC
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.
- See Also:
- Constant Field Values
-
ACC_FINAL
static final int ACC_FINAL
- See Also:
- Constant Field Values
-
ACC_SUPER
static final int ACC_SUPER
- See Also:
- Constant Field Values
-
ACC_INTERFACE
static final int ACC_INTERFACE
- See Also:
- Constant Field Values
-
ACC_ABSTRACT
static final int ACC_ABSTRACT
- See Also:
- Constant Field Values
-
path
final java.lang.String path
-
NUM_COLUMN
static final java.lang.String NUM_COLUMN
- See Also:
- Constant Field Values
-
HEX_COLUMN
static final java.lang.String HEX_COLUMN
- See Also:
- Constant Field Values
-
STR_COLUMN
static final java.lang.String STR_COLUMN
- See Also:
- Constant Field Values
-
ps
java.io.PrintStream ps
-
pool
java.lang.Object[] pool
-
in
java.io.InputStream in
-
-
Method Detail
-
dump
public void dump(java.io.PrintStream ps) throws java.lang.Exception
- Throws:
java.lang.Exception
-
parseClassFile
void parseClassFile(java.io.DataInputStream in) throws java.io.IOException
- Throws:
java.io.IOException
-
doAttributes
private void doAttributes(java.io.DataInputStream in, java.lang.String indent) throws java.io.IOException
Called for each attribute in the class, field, or method.- Parameters:
in
- The stream- Throws:
java.io.IOException
-
doAttribute
private void doAttribute(java.io.DataInputStream in, java.lang.String indent) throws java.io.IOException
Process a single attribute, if not recognized, skip it.- Parameters:
in
- the data stream- Throws:
java.io.IOException
-
doSignature
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; }
- Parameters:
in
-indent
-- Throws:
java.io.IOException
-
doEnclosingMethod
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; }
- Throws:
java.io.IOException
-
doExceptions
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]; }
- Parameters:
in
-indent
-- Throws:
java.io.IOException
-
doCode
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]; }
- Throws:
java.io.IOException
-
printHex
protected void printHex(byte[] code)
We must find Class.forName references ...- Parameters:
code
-
-
doSourceFile
private void doSourceFile(java.io.DataInputStream in, java.lang.String indent) throws java.io.IOException
- Throws:
java.io.IOException
-
doAnnotations
private void doAnnotations(java.io.DataInputStream in, java.lang.String indent) throws java.io.IOException
- Throws:
java.io.IOException
-
doAnnotation
private void doAnnotation(java.io.DataInputStream in, java.lang.String indent) throws java.io.IOException
- Throws:
java.io.IOException
-
doElementValue
private void doElementValue(java.io.DataInputStream in, java.lang.String indent) throws java.io.IOException
- Throws:
java.io.IOException
-
doLineNumberTable
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]; }
- Throws:
java.io.IOException
-
doLocalVariableTable
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]; }
- Throws:
java.io.IOException
-
doInnerClasses
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]; }
- Throws:
java.io.IOException
-
printClassAccess
void printClassAccess(int mod)
-
printAccess
void printAccess(int mod)
-
main
public static void main(java.lang.String[] args) throws java.lang.Exception
- Throws:
java.lang.Exception
-
-