Class Indexer

java.lang.Object
org.jboss.jandex.Indexer

public final class Indexer extends Object
Analyzes and indexes the annotation and key structural information of a set of classes. The indexer will purposefully skip any class that is not Java 5 or later. It will also do a basic/quick structural scan on any class it determines does not have annotations.

The Indexer operates on input streams that point to class file data. Input streams do not need to be buffered, as the indexer already does this. There is also no limit to the number of class file streams the indexer can process, other than available memory.

The Indexer attempts to minimize the final memory state of the index, but to do this it must maintain additional in-process state (intern tables etc) until the index is complete.

Numerous optimizations are taken during indexing to attempt to minimize the CPU and I/O cost, however, the Java class file format was not designed for partial searching, which ultimately limits the efficiency of processing them.

Thread-Safety This class is not thread-safe can not be shared between threads. The index it produces however is thread-safe.

  • Field Details

    • CONSTANT_CLASS

      private static final int CONSTANT_CLASS
      See Also:
    • CONSTANT_FIELDREF

      private static final int CONSTANT_FIELDREF
      See Also:
    • CONSTANT_METHODREF

      private static final int CONSTANT_METHODREF
      See Also:
    • CONSTANT_INTERFACEMETHODREF

      private static final int CONSTANT_INTERFACEMETHODREF
      See Also:
    • CONSTANT_STRING

      private static final int CONSTANT_STRING
      See Also:
    • CONSTANT_INTEGER

      private static final int CONSTANT_INTEGER
      See Also:
    • CONSTANT_FLOAT

      private static final int CONSTANT_FLOAT
      See Also:
    • CONSTANT_LONG

      private static final int CONSTANT_LONG
      See Also:
    • CONSTANT_DOUBLE

      private static final int CONSTANT_DOUBLE
      See Also:
    • CONSTANT_NAMEANDTYPE

      private static final int CONSTANT_NAMEANDTYPE
      See Also:
    • CONSTANT_UTF8

      private static final int CONSTANT_UTF8
      See Also:
    • CONSTANT_INVOKEDYNAMIC

      private static final int CONSTANT_INVOKEDYNAMIC
      See Also:
    • CONSTANT_METHODHANDLE

      private static final int CONSTANT_METHODHANDLE
      See Also:
    • CONSTANT_METHODTYPE

      private static final int CONSTANT_METHODTYPE
      See Also:
    • CONSTANT_MODULE

      private static final int CONSTANT_MODULE
      See Also:
    • CONSTANT_PACKAGE

      private static final int CONSTANT_PACKAGE
      See Also:
    • CONSTANT_DYNAMIC

      private static final int CONSTANT_DYNAMIC
      See Also:
    • RUNTIME_ANNOTATIONS

      private static final byte[] RUNTIME_ANNOTATIONS
    • RUNTIME_PARAM_ANNOTATIONS

      private static final byte[] RUNTIME_PARAM_ANNOTATIONS
    • RUNTIME_TYPE_ANNOTATIONS

      private static final byte[] RUNTIME_TYPE_ANNOTATIONS
    • ANNOTATION_DEFAULT

      private static final byte[] ANNOTATION_DEFAULT
    • SIGNATURE

      private static final byte[] SIGNATURE
    • EXCEPTIONS

      private static final byte[] EXCEPTIONS
    • INNER_CLASSES

      private static final byte[] INNER_CLASSES
    • ENCLOSING_METHOD

      private static final byte[] ENCLOSING_METHOD
    • METHOD_PARAMETERS

      private static final byte[] METHOD_PARAMETERS
    • LOCAL_VARIABLE_TABLE

      private static final byte[] LOCAL_VARIABLE_TABLE
    • CODE

      private static final byte[] CODE
    • MODULE

      private static final byte[] MODULE
    • MODULE_PACKAGES

      private static final byte[] MODULE_PACKAGES
    • MODULE_MAIN_CLASS

      private static final byte[] MODULE_MAIN_CLASS
    • RECORD

      private static final byte[] RECORD
    • RUNTIME_INVISIBLE_ANNOTATIONS

      private static final byte[] RUNTIME_INVISIBLE_ANNOTATIONS
    • RUNTIME_INVISIBLE_PARAM_ANNOTATIONS

      private static final byte[] RUNTIME_INVISIBLE_PARAM_ANNOTATIONS
    • RUNTIME_INVISIBLE_TYPE_ANNOTATIONS

      private static final byte[] RUNTIME_INVISIBLE_TYPE_ANNOTATIONS
    • PERMITTED_SUBCLASSES

      private static final byte[] PERMITTED_SUBCLASSES
    • RUNTIME_ANNOTATIONS_LEN

      private static final int RUNTIME_ANNOTATIONS_LEN
    • RUNTIME_PARAM_ANNOTATIONS_LEN

      private static final int RUNTIME_PARAM_ANNOTATIONS_LEN
    • RUNTIME_TYPE_ANNOTATIONS_LEN

      private static final int RUNTIME_TYPE_ANNOTATIONS_LEN
    • ANNOTATION_DEFAULT_LEN

      private static final int ANNOTATION_DEFAULT_LEN
    • SIGNATURE_LEN

      private static final int SIGNATURE_LEN
    • EXCEPTIONS_LEN

      private static final int EXCEPTIONS_LEN
    • INNER_CLASSES_LEN

      private static final int INNER_CLASSES_LEN
    • ENCLOSING_METHOD_LEN

      private static final int ENCLOSING_METHOD_LEN
    • METHOD_PARAMETERS_LEN

      private static final int METHOD_PARAMETERS_LEN
    • LOCAL_VARIABLE_TABLE_LEN

      private static final int LOCAL_VARIABLE_TABLE_LEN
    • CODE_LEN

      private static final int CODE_LEN
    • MODULE_LEN

      private static final int MODULE_LEN
    • MODULE_PACKAGES_LEN

      private static final int MODULE_PACKAGES_LEN
    • MODULE_MAIN_CLASS_LEN

      private static final int MODULE_MAIN_CLASS_LEN
    • RECORD_LEN

      private static final int RECORD_LEN
    • RUNTIME_INVISIBLE_ANNOTATIONS_LEN

      private static final int RUNTIME_INVISIBLE_ANNOTATIONS_LEN
    • RUNTIME_INVISIBLE_PARAM_ANNOTATIONS_LEN

      private static final int RUNTIME_INVISIBLE_PARAM_ANNOTATIONS_LEN
    • RUNTIME_INVISIBLE_TYPE_ANNOTATIONS_LEN

      private static final int RUNTIME_INVISIBLE_TYPE_ANNOTATIONS_LEN
    • PERMITTED_SUBCLASSES_LEN

      private static final int PERMITTED_SUBCLASSES_LEN
    • HAS_RUNTIME_ANNOTATION

      private static final int HAS_RUNTIME_ANNOTATION
      See Also:
    • HAS_RUNTIME_PARAM_ANNOTATION

      private static final int HAS_RUNTIME_PARAM_ANNOTATION
      See Also:
    • HAS_RUNTIME_TYPE_ANNOTATION

      private static final int HAS_RUNTIME_TYPE_ANNOTATION
      See Also:
    • HAS_SIGNATURE

      private static final int HAS_SIGNATURE
      See Also:
    • HAS_EXCEPTIONS

      private static final int HAS_EXCEPTIONS
      See Also:
    • HAS_INNER_CLASSES

      private static final int HAS_INNER_CLASSES
      See Also:
    • HAS_ENCLOSING_METHOD

      private static final int HAS_ENCLOSING_METHOD
      See Also:
    • HAS_ANNOTATION_DEFAULT

      private static final int HAS_ANNOTATION_DEFAULT
      See Also:
    • HAS_METHOD_PARAMETERS

      private static final int HAS_METHOD_PARAMETERS
      See Also:
    • HAS_LOCAL_VARIABLE_TABLE

      private static final int HAS_LOCAL_VARIABLE_TABLE
      See Also:
    • HAS_CODE

      private static final int HAS_CODE
      See Also:
    • HAS_MODULE

      private static final int HAS_MODULE
      See Also:
    • HAS_MODULE_PACKAGES

      private static final int HAS_MODULE_PACKAGES
      See Also:
    • HAS_MODULE_MAIN_CLASS

      private static final int HAS_MODULE_MAIN_CLASS
      See Also:
    • HAS_RECORD

      private static final int HAS_RECORD
      See Also:
    • HAS_RUNTIME_INVISIBLE_ANNOTATION

      private static final int HAS_RUNTIME_INVISIBLE_ANNOTATION
      See Also:
    • HAS_RUNTIME_INVISIBLE_PARAM_ANNOTATION

      private static final int HAS_RUNTIME_INVISIBLE_PARAM_ANNOTATION
      See Also:
    • HAS_RUNTIME_INVISIBLE_TYPE_ANNOTATION

      private static final int HAS_RUNTIME_INVISIBLE_TYPE_ANNOTATION
      See Also:
    • HAS_PERMITTED_SUBCLASSES

      private static final int HAS_PERMITTED_SUBCLASSES
      See Also:
    • constantPoolSize

      private int constantPoolSize
    • constantPool

      private byte[] constantPool
    • constantPoolOffsets

      private int[] constantPoolOffsets
    • constantPoolAnnoAttrributes

      private byte[] constantPoolAnnoAttrributes
    • currentClass

      private ClassInfo currentClass
    • classAnnotations

      private HashMap<DotName,List<AnnotationInstance>> classAnnotations
    • elementAnnotations

      private ArrayList<AnnotationInstance> elementAnnotations
    • signaturePresent

      private IdentityHashMap<AnnotationTarget,Object> signaturePresent
    • signatures

      private List<Object> signatures
    • classSignatureIndex

      private int classSignatureIndex
    • innerClasses

      private Map<DotName,Indexer.InnerClassInfo> innerClasses
    • typeAnnotations

    • methods

      private List<MethodInfo> methods
    • fields

      private List<FieldInfo> fields
    • recordComponents

      private List<RecordComponentInfo> recordComponents
    • methodParams

    • modulePackages

      private List<DotName> modulePackages
    • moduleMainClass

      private DotName moduleMainClass
    • masterAnnotations

      private Map<DotName,List<AnnotationInstance>> masterAnnotations
    • subclasses

      private Map<DotName,List<ClassInfo>> subclasses
    • subinterfaces

      private Map<DotName,List<ClassInfo>> subinterfaces
    • implementors

      private Map<DotName,List<ClassInfo>> implementors
    • classes

      private Map<DotName,ClassInfo> classes
    • modules

      private Map<DotName,ModuleInfo> modules
    • users

      private Map<DotName,Set<ClassInfo>> users
    • names

      private NameTable names
    • signatureParser

      private GenericSignatureParser signatureParser
    • tmpObjects

      private final Indexer.TmpObjects tmpObjects
  • Constructor Details

    • Indexer

      public Indexer()
  • Method Details