Package org.atmosphere.util.annotation
Class AnnotationDetector
java.lang.Object
org.atmosphere.util.annotation.AnnotationDetector
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:
- Java class file (Wikipedia) (Gentle Introduction);
- Class File Format Specification (Java 6 version) and the Java VM Specification (Chapter 4) for the real work.
- scanning java annotations at runtime.
- JBoss MC Scanning lib;
- Google Reflections, in fact an improved version of scannotation;
- annovention, improved version
of the original Annovention project.
Available from maven:
tv.cntt:annovention:1.2; - If using the Spring Framework, use
ClassPathScanningCandidateComponentProvider
- Since:
- annotation-detector 3.0.0
- Author:
- Ronald K. Muller
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic interfaceAReporterfor field annotations.static interfaceAReporterfor method annotations.static interfaceReporteris the base interface, used to report the detected annotations.static interfaceAReporterfor type annotations. -
Constructor Summary
ConstructorsConstructorDescriptionCreate a newAnnotationDetector, reporting the detected annotations to the specifiedReporter. -
Method Summary
Modifier and TypeMethodDescriptionvoiddestroy()Reclaim memory.voiddetect()Report all Java ClassFile files available on the class path.voidReport all Java ClassFile files available from the specified files and/or directories, including sub directories.voidReport all Java ClassFile files available on the class path within the specified packages and sub packages.
-
Constructor Details
-
AnnotationDetector
Create a newAnnotationDetector, reporting the detected annotations to the specifiedReporter.
-
-
Method Details
-
detect
Report all Java ClassFile files available on the class path.- Throws:
IOException- See Also:
-
detect
Report all Java ClassFile files available on the class path within the specified packages and sub packages.- Throws:
IOException- See Also:
-
detect
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 numberCAFEBABEare silently ignored.- Throws:
IOException
-
destroy
public void destroy()Reclaim memory.
-