Class AnnotationDetector


  • public final class AnnotationDetector
    extends java.lang.Object
    AnnotationDetector reads Java Class File (".class") files and reports the encountered annotations via a simple, developer friendly API.

    A Java Class File consists of a stream of 8-bit bytes. All 16-bit, 32-bit, and 64-bit quantities are constructed by reading in two, four, and eight consecutive 8-bit bytes, respectively. Multi byte data items are always stored in big-endian order, where the high bytes come first. In the Java and Java 2 platforms, this format is supported by interfaces DataInput and DataOutput.

    A class file consists of a single ClassFile structure:

     ClassFile {
       u4 magic;
       u2 minor_version;
       u2 major_version;
       u2 constant_pool_count;
       cp_info constant_pool[constant_pool_count-1];
       u2 access_flags;
       u2 this_class;
       u2 super_class;
       u2 interfaces_count;
       u2 interfaces[interfaces_count];
       u2 fields_count;
       field_info fields[fields_count];
       u2 methods_count;
       method_info methods[methods_count];
       u2 attributes_count;
       attribute_info attributes[attributes_count];
     }
    
     Where:
     u1 unsigned byte DataInput.readUnsignedByte()
     u2 unsigned short DataInput.readUnsignedShort()
     u4 unsigned int DataInput.readInt()
    
     Annotations are stored as Attributes (i.e. "RuntimeVisibleAnnotations" and
     "RuntimeInvisibleAnnotations").
     
    References:

    Similar projects / libraries:

    All above mentioned projects make use of a byte code manipulation library (like BCEL, ASM or Javassist).

    Since:
    annotation-detector 3.0.0
    Author:
    Ronald K. Muller
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void destroy()
      Reclaim memory.
      void detect()
      Report all Java ClassFile files available on the class path.
      void detect​(java.io.File... filesOrDirectories)
      Report all Java ClassFile files available from the specified files and/or directories, including sub directories.
      void detect​(java.lang.String... packageNames)
      Report all Java ClassFile files available on the class path within the specified packages and sub packages.
      • Methods inherited from class java.lang.Object

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

      • AnnotationDetector

        public AnnotationDetector​(AnnotationDetector.Reporter reporter)
        Create a new AnnotationDetector, reporting the detected annotations to the specified Reporter.
    • Method Detail

      • detect

        public void detect()
                    throws java.io.IOException
        Report all Java ClassFile files available on the class path.
        Throws:
        java.io.IOException
        See Also:
        detect(File...)
      • detect

        public final void detect​(java.lang.String... packageNames)
                          throws java.io.IOException
        Report all Java ClassFile files available on the class path within the specified packages and sub packages.
        Throws:
        java.io.IOException
        See Also:
        detect(File...)
      • detect

        public void detect​(java.io.File... filesOrDirectories)
                    throws java.io.IOException
        Report all Java ClassFile files available from the specified files and/or directories, including sub directories.

        Note that non-class files (files, not starting with the magic number CAFEBABE are silently ignored.

        Throws:
        java.io.IOException
      • destroy

        public void destroy()
        Reclaim memory.