Class FieldInfo

java.lang.Object
org.jboss.jandex.FieldInfo
All Implemented Interfaces:
AnnotationTarget, Declaration, Descriptor, GenericSignature

public final class FieldInfo extends Object implements Declaration, Descriptor, GenericSignature
Represents a field.

Thread-Safety

This class is immutable and can be shared between threads without safe publication.
  • Field Details

  • Constructor Details

  • Method Details

    • create

      public static FieldInfo create(ClassInfo clazz, String name, Type type, short flags)
      Construct a new mock Field instance.
      Parameters:
      clazz - the class declaring the field
      name - the name of the field
      type - the Java field type
      flags - the field attributes
      Returns:
      a mock field
    • name

      public final String name()
      Returns the local name of the field
      Returns:
      the local name of the field
    • declaringClass

      public final ClassInfo declaringClass()
      Returns the class which declared the field
      Returns:
      the declaring class
    • type

      public final Type type()
      Returns the Type declared on this field. This may be an array, a primitive, or a generic type definition.
      Returns:
      the type of this field
    • kind

      public final AnnotationTarget.Kind kind()
      Description copied from interface: AnnotationTarget
      Returns the kind of object this target represents.
      Specified by:
      kind in interface AnnotationTarget
      Returns:
      the target kind.
    • hasAnnotation

      public final boolean hasAnnotation(DotName name)
      Returns whether an annotation instance with given name is declared on this field or any type within its signature.
      Specified by:
      hasAnnotation in interface AnnotationTarget
      Parameters:
      name - name of the annotation type to look for, must not be null
      Returns:
      true if the annotation is present, false otherwise
      See Also:
    • annotation

      public final AnnotationInstance annotation(DotName name)
      Returns the annotation instance with given name declared on this field or any type within its signature. The target() method of the returned annotation instance may be used to determine the exact location of the annotation instance.

      The following is a non-exhaustive list of examples of annotations returned by this method:

       @MyFieldAnnotation
       public String foo;
      
       public List<@MyTypeAnnotation String> bar;
       

      In case an annotation with given name occurs more than once, the result of this method is not deterministic. For such situations, annotations(DotName) is preferable.

      Specified by:
      annotation in interface AnnotationTarget
      Parameters:
      name - name of the annotation type to look for, must not be null
      Returns:
      the annotation instance, or null if not found
      See Also:
    • annotations

      public final List<AnnotationInstance> annotations(DotName name)
      Returns the annotation instances with given name declared on this field or any type within its signature. The target() method of the returned annotation instances may be used to determine the exact location of the respective annotation instance.

      The following is a non-exhaustive list of examples of annotations returned by this method:

       @MyFieldAnnotation
       public String foo;
      
       public List<@MyTypeAnnotation String> bar;
       
      Specified by:
      annotations in interface AnnotationTarget
      Parameters:
      name - name of the annotation type, must not be null
      Returns:
      immutable list of annotation instances, never null
      See Also:
    • annotationsWithRepeatable

      public final List<AnnotationInstance> annotationsWithRepeatable(DotName name, IndexView index)
      Returns the annotation instances with given name declared on this field or any type within its signature. The target() method of the returned annotation instances may be used to determine the exact location of the respective annotation instance.

      If the specified annotation is repeatable, the result also contains all values from the container annotation instance. In this case, the AnnotationInstance.target() returns the target of the container annotation instance.

      Specified by:
      annotationsWithRepeatable in interface AnnotationTarget
      Parameters:
      name - name of the annotation type, must not be null
      index - index used to obtain the annotation type, must not be null
      Returns:
      immutable list of annotation instances, never null
      Throws:
      IllegalArgumentException - if the index is null, if the index does not contain the annotation type or if name does not identify an annotation type
      See Also:
    • annotations

      public final List<AnnotationInstance> annotations()
      Returns the annotation instances declared on this field or any type within its signature. The target() method of the returned annotation instances may be used to determine the exact location of the respective annotation instance.

      The following is a non-exhaustive list of examples of annotations returned by this method:

       @MyFieldAnnotation
       public String foo;
      
       public List<@MyTypeAnnotation String> bar;
       
      Specified by:
      annotations in interface AnnotationTarget
      Returns:
      collection of annotation instances, never null
    • hasDeclaredAnnotation

      public final boolean hasDeclaredAnnotation(DotName name)
      Returns whether an annotation instance with given name is declared on this field.

      Unlike hasAnnotation(DotName), this method ignores annotations declared on types within the field signature.

      Specified by:
      hasDeclaredAnnotation in interface AnnotationTarget
      Parameters:
      name - name of the annotation type to look for, must not be null
      Returns:
      true if the annotation is present, false otherwise
      Since:
      3.0
      See Also:
    • declaredAnnotation

      public final AnnotationInstance declaredAnnotation(DotName name)
      Returns the annotation instance with given name declared on this field.

      Unlike annotation(DotName), this method doesn't return annotations declared on types within the field signature.

      Specified by:
      declaredAnnotation in interface AnnotationTarget
      Parameters:
      name - name of the annotation type to look for, must not be null
      Returns:
      the annotation instance, or null if not found
      Since:
      3.0
      See Also:
    • declaredAnnotationsWithRepeatable

      public final List<AnnotationInstance> declaredAnnotationsWithRepeatable(DotName name, IndexView index)
      Returns the annotation instances with given name declared on this field.

      If the specified annotation is repeatable, the result also contains all values from the container annotation instance. In this case, the AnnotationInstance.target() returns the target of the container annotation instance.

      Unlike annotationsWithRepeatable(DotName, IndexView), this method doesn't return annotations declared on types within the field signature.

      Specified by:
      declaredAnnotationsWithRepeatable in interface AnnotationTarget
      Parameters:
      name - name of the annotation type, must not be null
      index - index used to obtain the annotation type, must not be null
      Returns:
      list of annotation instances, never null
      Throws:
      IllegalArgumentException - if the index is null, if the index does not contain the annotation type or if name does not identify an annotation type
      Since:
      3.0
      See Also:
    • declaredAnnotations

      public final List<AnnotationInstance> declaredAnnotations()
      Returns the annotation instances declared on this field.

      Unlike annotations(), this method doesn't return annotations declared on types within the field signature.

      Specified by:
      declaredAnnotations in interface AnnotationTarget
      Returns:
      list of annotation instances, never null
      Since:
      3.0
      See Also:
    • isEnumConstant

      public final boolean isEnumConstant()
      Returns whether this field is declared as an element of an enum.
      Returns:
      true if the field is declared as an element of an enum, false otherwise
      See Also:
    • flags

      public final short flags()
      Returns the access fields of this field. Modifier can be used on this value.
      Returns:
      the access flags of this field
    • isSynthetic

      public final boolean isSynthetic()
      Returns:
      true if this field is a synthetic field
    • enumConstantOrdinal

      public int enumConstantOrdinal()
      Returns an ordinal of this enum constant, that is, the zero-based position in the enum declaration. This is currently very inefficient (requires traversing fields of the declaring class), but may be improved in the future.

      If this field is not an enum constant, returns -1.

      Note that for the result to actually be the ordinal value, the index must be produced by at least Jandex 2.4. Previous Jandex versions do not store field positions. At most 256 fields may be present in the class; if there's more, outcome is undefined. This also assumes that the bytecode order corresponds to declaration order, which is not guaranteed, but practically always holds.

      Returns:
      ordinal of this enum constant, or -1 if this field is not an enum constant
      Since:
      3.0.1
    • requiresGenericSignature

      public boolean requiresGenericSignature()
      Returns whether this field must have a generic signature. That is, whether the Java compiler when compiling this field had to emit the Signature bytecode attribute.
      Specified by:
      requiresGenericSignature in interface GenericSignature
      Returns:
      whether this field must have a generic signature
    • genericSignature

      public String genericSignature(Function<String,Type> typeVariableSubstitution)
      Returns a generic signature of this field, possibly without any generic-related information. That is, produces a correct generic signature even if this field does not use any type variables.

      Signatures of type variables are substituted for signatures of types provided by the substitution function typeVariableSubstitution. If the substitution function returns null for some type variable identifier, no substitution happens and the type variable signature is used unmodified.

      Note that the return value does not come directly from bytecode. Jandex does not store the signature strings. Instead, the return value is reconstructed from the Jandex object model.

      Specified by:
      genericSignature in interface GenericSignature
      Parameters:
      typeVariableSubstitution - a substitution function from type variable identifiers to types
      Returns:
      a generic signature of this field with type variables substituted, never null
    • descriptor

      public String descriptor(Function<String,Type> typeVariableSubstitution)
      Returns a bytecode descriptor of this field.

      Descriptors of type variables are substituted for descriptors of types provided by the substitution function typeVariableSubstitution. If the substitution function returns null for some type variable identifier, or if it returns the type variable itself, no substitution happens and the type variable descriptor is used unmodified.

      Note that the return value does not come directly from bytecode. Jandex does not store the descriptor strings. Instead, the return value is reconstructed from the Jandex object model.

      Specified by:
      descriptor in interface Descriptor
      Parameters:
      typeVariableSubstitution - a substitution function from type variable identifiers to types
      Returns:
      the bytecode descriptor of this field
    • toString

      public String toString()
      Returns a string representation describing this field. It is similar although not necessarily identical to a Java source code declaration of this field.
      Overrides:
      toString in class Object
      Returns:
      a string representation of this field
    • asClass

      public final ClassInfo asClass()
      Description copied from interface: AnnotationTarget
      Casts and returns this target as a ClassInfo if it is of kind CLASS
      Specified by:
      asClass in interface AnnotationTarget
      Returns:
      this instance cast to a class
    • asField

      public final FieldInfo asField()
      Description copied from interface: AnnotationTarget
      Casts and returns this target as a FieldInfo if it is of kind FIELD
      Specified by:
      asField in interface AnnotationTarget
      Returns:
      this instance cast to a field
    • asMethod

      public final MethodInfo asMethod()
      Description copied from interface: AnnotationTarget
      Casts and returns this target as a MethodInfo if it is of kind METHOD
      Specified by:
      asMethod in interface AnnotationTarget
      Returns:
      this instance cast to a method
    • asMethodParameter

      public final MethodParameterInfo asMethodParameter()
      Description copied from interface: AnnotationTarget
      Casts and returns this target as a MethodParameterInfo if it is of kind METHOD_PARAMETER
      Specified by:
      asMethodParameter in interface AnnotationTarget
      Returns:
      this instance cast to a method parameter
    • asType

      public final TypeTarget asType()
      Description copied from interface: AnnotationTarget
      Casts and returns this target as a TypeTarget if it is of kind TYPE
      Specified by:
      asType in interface AnnotationTarget
      Returns:
      this instance cast to a type target
    • asRecordComponent

      public final RecordComponentInfo asRecordComponent()
      Description copied from interface: AnnotationTarget
      Casts and returns this target as a RecordComponentInfo if it is of kind RECORD_COMPONENT
      Specified by:
      asRecordComponent in interface AnnotationTarget
      Returns:
      this instance cast to a record component
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object
    • equals

      public boolean equals(Object o)
      Overrides:
      equals in class Object
    • setType

      void setType(Type type)
    • setAnnotations

      void setAnnotations(List<AnnotationInstance> annotations)
    • fieldInternal

      FieldInternal fieldInternal()
    • setFieldInternal

      void setFieldInternal(FieldInternal internal)
    • setClassInfo

      void setClassInfo(ClassInfo clazz)