Class AnnotationDB

java.lang.Object
org.scannotation.AnnotationDB
All Implemented Interfaces:
Serializable

public class AnnotationDB extends Object implements Serializable
The class allows you to scan an arbitrary set of "archives" for .class files. These class files are parsed to see what annotations they use. Two indexes are created. The javax, java, sun, com.sun, and javassist packages will not be scanned by default.

One is a map of annotations and what classes use those annotations. This could be used, for example, by an EJB deployer to find all the EJBs contained in the archive

Another is a mpa of classes and what annotations those classes use.

Version:
$Revision: 1 $
See Also:
  • Field Details

    • annotationIndex

      protected Map<String,Set<String>> annotationIndex
    • implementsIndex

      protected Map<String,Set<String>> implementsIndex
    • classIndex

      protected Map<String,Set<String>> classIndex
    • scanClassAnnotations

      protected transient boolean scanClassAnnotations
    • scanMethodAnnotations

      protected transient boolean scanMethodAnnotations
    • scanParameterAnnotations

      protected transient boolean scanParameterAnnotations
    • scanFieldAnnotations

      protected transient boolean scanFieldAnnotations
    • ignoredPackages

      protected transient String[] ignoredPackages
    • scanPackages

      protected transient String[] scanPackages
    • ignoreBadURLs

      protected transient boolean ignoreBadURLs
  • Constructor Details

    • AnnotationDB

      public AnnotationDB()
  • Method Details

    • getScanPackages

      public String[] getScanPackages()
    • setScanPackages

      public void setScanPackages(String[] scanPackages)
      Set explicit packages to scan. Set to null to enable ignore list.
      Parameters:
      scanPackages - packages to scan or null
    • getIgnoredPackages

      public String[] getIgnoredPackages()
    • setIgnoredPackages

      public void setIgnoredPackages(String[] ignoredPackages)
      Override/overwrite any ignored packages
      Parameters:
      ignoredPackages - cannot be null
    • addIgnoredPackages

      public void addIgnoredPackages(String... ignored)
    • crossReferenceMetaAnnotations

      public void crossReferenceMetaAnnotations() throws AnnotationDB.CrossReferenceException
      This method will cross reference annotations in the annotation index with any meta-annotations that they have and create additional entries as needed. For example:
      Throws:
      AnnotationDB.CrossReferenceException
    • crossReferenceImplementedInterfaces

      public void crossReferenceImplementedInterfaces() throws AnnotationDB.CrossReferenceException
      Sometimes you want to see if a particular class implements an interface with certain annotations After you have loaded all your classpaths with the scanArchive() method, call this method to cross reference a class's implemented interfaces. The cross references will be added to the annotationIndex and classIndex indexes
      Throws:
      AnnotationDB.CrossReferenceException - an Exception thrown if referenced interfaces haven't been scanned
    • ignoreScan

      private boolean ignoreScan(String intf)
    • getAnnotationIndex

      public Map<String,Set<String>> getAnnotationIndex()
      returns a map keyed by the fully qualified string name of a annotation class. The Set returne is a list of classes that use that annotation somehow.
    • getClassIndex

      public Map<String,Set<String>> getClassIndex()
      returns a map keyed by the list of classes scanned. The value set returned is a list of annotations used by that class.
    • setScanClassAnnotations

      public void setScanClassAnnotations(boolean scanClassAnnotations)
      Whether or not you want AnnotationDB to scan for class level annotations
      Parameters:
      scanClassAnnotations -
    • setScanMethodAnnotations

      public void setScanMethodAnnotations(boolean scanMethodAnnotations)
      Wheter or not you want AnnotationDB to scan for method level annotations
      Parameters:
      scanMethodAnnotations -
    • setScanParameterAnnotations

      public void setScanParameterAnnotations(boolean scanParameterAnnotations)
      Whether or not you want AnnotationDB to scan for parameter level annotations
      Parameters:
      scanParameterAnnotations -
    • setScanFieldAnnotations

      public void setScanFieldAnnotations(boolean scanFieldAnnotations)
      Whether or not you want AnnotationDB to scan for parameter level annotations
      Parameters:
      scanFieldAnnotations -
    • setIgnoreBadURLs

      public void setIgnoreBadURLs(boolean ignoreBadURLs)
      Whether or not you want AnnotationDB to ignore bad URLs passed to scanArchives. Default is to throw an IOException.
      Parameters:
      ignoreBadURLs -
    • scanArchives

      public void scanArchives(URL... urls) throws IOException
      Scan a url that represents an "archive" this is a classpath directory or jar file
      Parameters:
      urls - variable list of URLs to scan as archives
      Throws:
      IOException
    • scanClass

      public void scanClass(InputStream bits) throws IOException
      Parse a .class file for annotations
      Parameters:
      bits - input stream pointing to .class file bits
      Throws:
      IOException
    • scanClass

      protected void scanClass(javassist.bytecode.ClassFile cf)
    • scanMethods

      protected void scanMethods(javassist.bytecode.ClassFile cf)
      Scanns both the method and its parameters for annotations.
      Parameters:
      cf -
    • scanFields

      protected void scanFields(javassist.bytecode.ClassFile cf)
    • populate

      protected void populate(javassist.bytecode.annotation.Annotation[] annotations, String className)
    • outputAnnotationIndex

      public void outputAnnotationIndex(PrintWriter writer)
      Prints out annotationIndex
      Parameters:
      writer -