Class AnnotationDetector

java.lang.Object
org.atmosphere.util.annotation.AnnotationDetector

public final class AnnotationDetector extends 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
  • Constructor Details

    • AnnotationDetector

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

    • detect

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

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

      public void detect(File... filesOrDirectories) throws 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:
      IOException
    • destroy

      public void destroy()
      Reclaim memory.