Class 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 ...
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • 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
      • path

        final java.lang.String path
      • ps

        java.io.PrintStream ps
      • pool

        java.lang.Object[] pool
      • in

        java.io.InputStream in
    • Constructor Detail

      • ClassDumper

        public ClassDumper​(java.lang.String path)
                    throws java.lang.Exception
        Throws:
        java.lang.Exception
      • ClassDumper

        public ClassDumper​(java.lang.String path,
                           java.io.InputStream in)
                    throws java.io.IOException
        Throws:
        java.io.IOException
    • 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]; }
         
        Parameters:
        in -
        pool -
        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