Class AnnotationMetadataHierarchy

java.lang.Object
io.micronaut.inject.annotation.AnnotationMetadataHierarchy
All Implemented Interfaces:
io.micronaut.core.annotation.AnnotationMetadata, io.micronaut.core.annotation.AnnotationSource, Iterable<io.micronaut.core.annotation.AnnotationMetadata>

public final class AnnotationMetadataHierarchy extends Object implements io.micronaut.core.annotation.AnnotationMetadata, Iterable<io.micronaut.core.annotation.AnnotationMetadata>
Used to represent an annotation metadata hierarchy. The first AnnotationMetadata instance passed to the constructor represents the annotation metadata that is declared, hence methods like hasDeclaredAnnotation(String) will return true for the last annotation metadata passed in the hierarchy.

This class is used to internally optimize memory usage and compilation time for classes that declare AOP advice at the type level and where the classes methods typically don't include any annotations and therefore would be wasteful to generate additional annotation metadata classes.

Since:
1.3.0
  • Field Details

    • EMPTY_HIERARCHY

      public static final io.micronaut.core.annotation.AnnotationMetadata[] EMPTY_HIERARCHY
      Constant to represent an empty hierarchy.
  • Constructor Details

    • AnnotationMetadataHierarchy

      public AnnotationMetadataHierarchy(io.micronaut.core.annotation.AnnotationMetadata... hierarchy)
      Default constructor.
      Parameters:
      hierarchy - The annotation hierarchy
    • AnnotationMetadataHierarchy

      @Internal public AnnotationMetadataHierarchy(boolean delegateDeclaredToAllElements, io.micronaut.core.annotation.AnnotationMetadata... hierarchy)
      Default constructor.
      Parameters:
      hierarchy - The annotation hierarchy
      delegateDeclaredToAllElements - The delegate declared to all elements
  • Method Details

    • hasPropertyExpressions

      public boolean hasPropertyExpressions()
      Specified by:
      hasPropertyExpressions in interface io.micronaut.core.annotation.AnnotationMetadata
    • hasEvaluatedExpressions

      public boolean hasEvaluatedExpressions()
      Specified by:
      hasEvaluatedExpressions in interface io.micronaut.core.annotation.AnnotationMetadata
    • getAnnotationType

      public Optional<Class<? extends Annotation>> getAnnotationType(@NonNull @NonNull String name)
      Specified by:
      getAnnotationType in interface io.micronaut.core.annotation.AnnotationMetadata
    • getAnnotationType

      public Optional<Class<? extends Annotation>> getAnnotationType(@NonNull @NonNull String name, @NonNull @NonNull ClassLoader classLoader)
      Specified by:
      getAnnotationType in interface io.micronaut.core.annotation.AnnotationMetadata
    • getDeclaredMetadata

      @NonNull public @NonNull io.micronaut.core.annotation.AnnotationMetadata getDeclaredMetadata()
      Specified by:
      getDeclaredMetadata in interface io.micronaut.core.annotation.AnnotationMetadata
      Returns:
      The metadata that is actually declared in the element
    • getRootMetadata

      @NonNull public @NonNull io.micronaut.core.annotation.AnnotationMetadata getRootMetadata()
      Returns:
      The metadata that is actually declared in the element
    • createSibling

      @NonNull public @NonNull io.micronaut.core.annotation.AnnotationMetadata createSibling(@NonNull @NonNull io.micronaut.core.annotation.AnnotationMetadata child)
      Create a new hierarchy instance from this metadata using this metadata's parents.
      Parameters:
      child - The child annotation metadata
      Returns:
      A new sibling
    • synthesize

      @Nullable public <T extends Annotation> T synthesize(@NonNull @NonNull Class<T> annotationClass, @NonNull @NonNull String sourceAnnotation)
      Specified by:
      synthesize in interface io.micronaut.core.annotation.AnnotationSource
    • synthesizeAll

      public Annotation[] synthesizeAll()
      Specified by:
      synthesizeAll in interface io.micronaut.core.annotation.AnnotationSource
    • synthesizeDeclared

      public Annotation[] synthesizeDeclared()
      Specified by:
      synthesizeDeclared in interface io.micronaut.core.annotation.AnnotationSource
    • synthesizeAnnotationsByType

      public <T extends Annotation> T[] synthesizeAnnotationsByType(Class<T> annotationClass)
      Specified by:
      synthesizeAnnotationsByType in interface io.micronaut.core.annotation.AnnotationSource
    • synthesizeDeclaredAnnotationsByType

      public <T extends Annotation> T[] synthesizeDeclaredAnnotationsByType(Class<T> annotationClass)
      Specified by:
      synthesizeDeclaredAnnotationsByType in interface io.micronaut.core.annotation.AnnotationSource
    • synthesizeDeclared

      @Nullable public <T extends Annotation> T synthesizeDeclared(@NonNull @NonNull Class<T> annotationClass, @NonNull @NonNull String sourceAnnotation)
      Specified by:
      synthesizeDeclared in interface io.micronaut.core.annotation.AnnotationSource
    • synthesize

      @Nullable public <T extends Annotation> T synthesize(@NonNull @NonNull Class<T> annotationClass)
      Specified by:
      synthesize in interface io.micronaut.core.annotation.AnnotationSource
    • synthesizeDeclared

      @Nullable public <T extends Annotation> T synthesizeDeclared(@NonNull @NonNull Class<T> annotationClass)
      Specified by:
      synthesizeDeclared in interface io.micronaut.core.annotation.AnnotationSource
    • findAnnotation

      @NonNull public <T extends Annotation> @NonNull Optional<io.micronaut.core.annotation.AnnotationValue<T>> findAnnotation(@NonNull @NonNull String annotation)
      Specified by:
      findAnnotation in interface io.micronaut.core.annotation.AnnotationSource
    • findDeclaredAnnotation

      @NonNull public <T extends Annotation> @NonNull Optional<io.micronaut.core.annotation.AnnotationValue<T>> findDeclaredAnnotation(@NonNull @NonNull String annotation)
      Specified by:
      findDeclaredAnnotation in interface io.micronaut.core.annotation.AnnotationSource
    • doubleValue

      @NonNull public @NonNull OptionalDouble doubleValue(@NonNull @NonNull Class<? extends Annotation> annotation, @NonNull @NonNull String member)
      Specified by:
      doubleValue in interface io.micronaut.core.annotation.AnnotationMetadata
    • stringValues

      @NonNull public @NonNull String[] stringValues(@NonNull @NonNull Class<? extends Annotation> annotation, @NonNull @NonNull String member)
      Specified by:
      stringValues in interface io.micronaut.core.annotation.AnnotationMetadata
    • stringValues

      @NonNull public @NonNull String[] stringValues(@NonNull @NonNull String annotation, @NonNull @NonNull String member)
      Specified by:
      stringValues in interface io.micronaut.core.annotation.AnnotationMetadata
    • booleanValue

      public Optional<Boolean> booleanValue(@NonNull @NonNull String annotation, @NonNull @NonNull String member)
      Specified by:
      booleanValue in interface io.micronaut.core.annotation.AnnotationMetadata
    • isTrue

      public boolean isTrue(@NonNull @NonNull String annotation, @NonNull @NonNull String member)
      Specified by:
      isTrue in interface io.micronaut.core.annotation.AnnotationMetadata
    • longValue

      public OptionalLong longValue(@NonNull @NonNull String annotation, @NonNull @NonNull String member)
      Specified by:
      longValue in interface io.micronaut.core.annotation.AnnotationMetadata
    • stringValue

      public Optional<String> stringValue(@NonNull @NonNull String annotation, @NonNull @NonNull String member)
      Specified by:
      stringValue in interface io.micronaut.core.annotation.AnnotationMetadata
    • intValue

      public OptionalInt intValue(@NonNull @NonNull String annotation, @NonNull @NonNull String member)
      Specified by:
      intValue in interface io.micronaut.core.annotation.AnnotationMetadata
    • doubleValue

      @NonNull public @NonNull OptionalDouble doubleValue(@NonNull @NonNull String annotation, @NonNull @NonNull String member)
      Specified by:
      doubleValue in interface io.micronaut.core.annotation.AnnotationMetadata
    • enumValue

      public <E extends Enum<E>> Optional<E> enumValue(@NonNull @NonNull Class<? extends Annotation> annotation, @NonNull @NonNull String member, Class<E> enumType)
      Specified by:
      enumValue in interface io.micronaut.core.annotation.AnnotationMetadata
    • classValues

      @NonNull public <T> @NonNull Class<T>[] classValues(@NonNull @NonNull String annotation, @NonNull @NonNull String member)
      Specified by:
      classValues in interface io.micronaut.core.annotation.AnnotationMetadata
    • classValue

      public Optional<Class> classValue(@NonNull @NonNull String annotation, @NonNull @NonNull String member)
      Specified by:
      classValue in interface io.micronaut.core.annotation.AnnotationMetadata
    • getAnnotationNamesByStereotype

      @NonNull public @NonNull List<String> getAnnotationNamesByStereotype(@Nullable @Nullable String stereotype)
      Specified by:
      getAnnotationNamesByStereotype in interface io.micronaut.core.annotation.AnnotationMetadata
    • getAnnotationValuesByStereotype

      public <T extends Annotation> List<io.micronaut.core.annotation.AnnotationValue<T>> getAnnotationValuesByStereotype(String stereotype)
      Specified by:
      getAnnotationValuesByStereotype in interface io.micronaut.core.annotation.AnnotationMetadata
    • getDeclaredAnnotationNames

      @NonNull public @NonNull Set<String> getDeclaredAnnotationNames()
      Specified by:
      getDeclaredAnnotationNames in interface io.micronaut.core.annotation.AnnotationMetadata
    • getAnnotationNames

      @NonNull public @NonNull Set<String> getAnnotationNames()
      Specified by:
      getAnnotationNames in interface io.micronaut.core.annotation.AnnotationMetadata
    • getValues

      @NonNull public <T> @NonNull io.micronaut.core.value.OptionalValues<T> getValues(@NonNull @NonNull String annotation, @NonNull @NonNull Class<T> valueType)
      Specified by:
      getValues in interface io.micronaut.core.annotation.AnnotationMetadata
    • getDefaultValue

      public <T> Optional<T> getDefaultValue(@NonNull @NonNull String annotation, @NonNull @NonNull String member, @NonNull @NonNull io.micronaut.core.type.Argument<T> requiredType)
      Specified by:
      getDefaultValue in interface io.micronaut.core.annotation.AnnotationMetadata
    • getAnnotationValuesByType

      @NonNull public <T extends Annotation> @NonNull List<io.micronaut.core.annotation.AnnotationValue<T>> getAnnotationValuesByType(@NonNull @NonNull Class<T> annotationType)
      Specified by:
      getAnnotationValuesByType in interface io.micronaut.core.annotation.AnnotationMetadata
    • getAnnotationValuesByName

      public <T extends Annotation> List<io.micronaut.core.annotation.AnnotationValue<T>> getAnnotationValuesByName(String annotationType)
      Specified by:
      getAnnotationValuesByName in interface io.micronaut.core.annotation.AnnotationMetadata
    • getDeclaredAnnotationValuesByType

      @NonNull public <T extends Annotation> @NonNull List<io.micronaut.core.annotation.AnnotationValue<T>> getDeclaredAnnotationValuesByType(@NonNull @NonNull Class<T> annotationType)
      Specified by:
      getDeclaredAnnotationValuesByType in interface io.micronaut.core.annotation.AnnotationMetadata
    • getDeclaredAnnotationValuesByName

      public <T extends Annotation> List<io.micronaut.core.annotation.AnnotationValue<T>> getDeclaredAnnotationValuesByName(String annotationType)
      Specified by:
      getDeclaredAnnotationValuesByName in interface io.micronaut.core.annotation.AnnotationMetadata
    • hasDeclaredAnnotation

      public boolean hasDeclaredAnnotation(@Nullable @Nullable String annotation)
      Specified by:
      hasDeclaredAnnotation in interface io.micronaut.core.annotation.AnnotationMetadata
    • hasAnnotation

      public boolean hasAnnotation(@Nullable @Nullable String annotation)
      Specified by:
      hasAnnotation in interface io.micronaut.core.annotation.AnnotationMetadata
    • hasStereotype

      public boolean hasStereotype(@Nullable @Nullable String annotation)
      Specified by:
      hasStereotype in interface io.micronaut.core.annotation.AnnotationMetadata
    • hasDeclaredStereotype

      public boolean hasDeclaredStereotype(@Nullable @Nullable String annotation)
      Specified by:
      hasDeclaredStereotype in interface io.micronaut.core.annotation.AnnotationMetadata
    • enumValue

      public <E extends Enum<E>> Optional<E> enumValue(String annotation, String member, Class<E> enumType)
      Specified by:
      enumValue in interface io.micronaut.core.annotation.AnnotationMetadata
    • enumValues

      public <E extends Enum<E>> E[] enumValues(String annotation, String member, Class<E> enumType)
      Specified by:
      enumValues in interface io.micronaut.core.annotation.AnnotationMetadata
    • intValue

      public OptionalInt intValue(Class<? extends Annotation> annotation, String member)
      Specified by:
      intValue in interface io.micronaut.core.annotation.AnnotationMetadata
    • isFalse

      public boolean isFalse(Class<? extends Annotation> annotation, String member)
      Specified by:
      isFalse in interface io.micronaut.core.annotation.AnnotationMetadata
    • getDefaultValues

      @NonNull public @NonNull Map<CharSequence,Object> getDefaultValues(@NonNull @NonNull String annotation)
      Specified by:
      getDefaultValues in interface io.micronaut.core.annotation.AnnotationMetadata
    • enumValue

      public <E extends Enum<E>> Optional<E> enumValue(@NonNull @NonNull Class<? extends Annotation> annotation, @NonNull @NonNull String member, Class<E> enumType, @Nullable @Nullable Function<Object,Object> valueMapper)
    • enumValue

      public <E extends Enum<E>> Optional<E> enumValue(@NonNull @NonNull String annotation, @NonNull @NonNull String member, Class<E> enumType, @Nullable @Nullable Function<Object,Object> valueMapper)
    • enumValues

      public <E extends Enum<E>> E[] enumValues(@NonNull @NonNull Class<? extends Annotation> annotation, @NonNull @NonNull String member, Class<E> enumType, @Nullable @Nullable Function<Object,Object> valueMapper)
    • enumValues

      public <E extends Enum<E>> E[] enumValues(@NonNull @NonNull String annotation, @NonNull @NonNull String member, Class<E> enumType, @Nullable @Nullable Function<Object,Object> valueMapper)
    • classValue

      public Optional<Class> classValue(@NonNull @NonNull Class<? extends Annotation> annotation, @NonNull @NonNull String member, Function<Object,Object> valueMapper)
    • classValue

      public Optional<Class> classValue(@NonNull @NonNull String annotation, @NonNull @NonNull String member, @Nullable @Nullable Function<Object,Object> valueMapper)
    • intValue

      public OptionalInt intValue(@NonNull @NonNull Class<? extends Annotation> annotation, @NonNull @NonNull String member, @Nullable @Nullable Function<Object,Object> valueMapper)
    • booleanValue

      public Optional<Boolean> booleanValue(@NonNull @NonNull Class<? extends Annotation> annotation, @NonNull @NonNull String member, Function<Object,Object> valueMapper)
    • booleanValue

      @NonNull public @NonNull Optional<Boolean> booleanValue(@NonNull @NonNull String annotation, @NonNull @NonNull String member, @Nullable @Nullable Function<Object,Object> valueMapper)
    • longValue

      public OptionalLong longValue(@NonNull @NonNull Class<? extends Annotation> annotation, @NonNull @NonNull String member, @Nullable @Nullable Function<Object,Object> valueMapper)
    • longValue

      @NonNull public @NonNull OptionalLong longValue(@NonNull @NonNull String annotation, @NonNull @NonNull String member, @Nullable @Nullable Function<Object,Object> valueMapper)
    • intValue

      @NonNull public @NonNull OptionalInt intValue(@NonNull @NonNull String annotation, @NonNull @NonNull String member, @Nullable @Nullable Function<Object,Object> valueMapper)
    • longValue

      public OptionalLong longValue(Class<? extends Annotation> annotation, String member)
      Specified by:
      longValue in interface io.micronaut.core.annotation.AnnotationMetadata
    • enumValues

      public <E extends Enum<E>> E[] enumValues(Class<? extends Annotation> annotation, String member, Class<E> enumType)
      Specified by:
      enumValues in interface io.micronaut.core.annotation.AnnotationMetadata
    • classValues

      public <T> Class<T>[] classValues(Class<? extends Annotation> annotation, String member)
      Specified by:
      classValues in interface io.micronaut.core.annotation.AnnotationMetadata
    • classValue

      public Optional<Class> classValue(Class<? extends Annotation> annotation, String member)
      Specified by:
      classValue in interface io.micronaut.core.annotation.AnnotationMetadata
    • stringValue

      public Optional<String> stringValue(Class<? extends Annotation> annotation, String member)
      Specified by:
      stringValue in interface io.micronaut.core.annotation.AnnotationMetadata
    • booleanValue

      public Optional<Boolean> booleanValue(Class<? extends Annotation> annotation, String member)
      Specified by:
      booleanValue in interface io.micronaut.core.annotation.AnnotationMetadata
    • isTrue

      public boolean isTrue(Class<? extends Annotation> annotation, String member)
      Specified by:
      isTrue in interface io.micronaut.core.annotation.AnnotationMetadata
    • isPresent

      public boolean isPresent(Class<? extends Annotation> annotation, String member)
      Specified by:
      isPresent in interface io.micronaut.core.annotation.AnnotationMetadata
    • stringValue

      public Optional<String> stringValue(@NonNull @NonNull Class<? extends Annotation> annotation, @NonNull @NonNull String member, Function<Object,Object> valueMapper)
    • stringValues

      @NonNull public @NonNull String[] stringValues(@NonNull @NonNull Class<? extends Annotation> annotation, @NonNull @NonNull String member, Function<Object,Object> valueMapper)
    • stringValues

      public String[] stringValues(String annotation, String member, Function<Object,Object> valueMapper)
    • stringValue

      @NonNull public @NonNull Optional<String> stringValue(@NonNull @NonNull String annotation, @NonNull @NonNull String member, @Nullable @Nullable Function<Object,Object> valueMapper)
    • isTrue

      public boolean isTrue(@NonNull @NonNull Class<? extends Annotation> annotation, @NonNull @NonNull String member, Function<Object,Object> valueMapper)
    • isTrue

      public boolean isTrue(@NonNull @NonNull String annotation, @NonNull @NonNull String member, @Nullable @Nullable Function<Object,Object> valueMapper)
    • doubleValue

      public OptionalDouble doubleValue(@NonNull @NonNull Class<? extends Annotation> annotation, @NonNull @NonNull String member, @Nullable @Nullable Function<Object,Object> valueMapper)
    • doubleValue

      @NonNull public @NonNull OptionalDouble doubleValue(@NonNull @NonNull String annotation, @NonNull @NonNull String member, Function<Object,Object> valueMapper)
    • getValue

      @NonNull public <T> @NonNull Optional<T> getValue(@NonNull @NonNull String annotation, @NonNull @NonNull String member, @NonNull @NonNull io.micronaut.core.type.Argument<T> requiredType, @Nullable @Nullable Function<Object,Object> valueMapper)
    • iterator

      @NonNull public @NonNull Iterator<io.micronaut.core.annotation.AnnotationMetadata> iterator()
      Specified by:
      iterator in interface Iterable<io.micronaut.core.annotation.AnnotationMetadata>
    • isEmpty

      public boolean isEmpty()
      Specified by:
      isEmpty in interface io.micronaut.core.annotation.AnnotationMetadata
    • isRepeatableAnnotation

      public boolean isRepeatableAnnotation(Class<? extends Annotation> annotation)
      Specified by:
      isRepeatableAnnotation in interface io.micronaut.core.annotation.AnnotationMetadata
    • isRepeatableAnnotation

      public boolean isRepeatableAnnotation(String annotation)
      Specified by:
      isRepeatableAnnotation in interface io.micronaut.core.annotation.AnnotationMetadata
    • findRepeatableAnnotation

      public Optional<String> findRepeatableAnnotation(Class<? extends Annotation> annotation)
      Specified by:
      findRepeatableAnnotation in interface io.micronaut.core.annotation.AnnotationMetadata
    • findRepeatableAnnotation

      public Optional<String> findRepeatableAnnotation(String annotation)
      Specified by:
      findRepeatableAnnotation in interface io.micronaut.core.annotation.AnnotationMetadata
    • merge

      public MutableAnnotationMetadata merge()
      Merges the hierarchy into one MutableAnnotationMetadata.
      Returns:
      merged metadata
      Since:
      4.0.0
    • copyAnnotationMetadata

      public io.micronaut.core.annotation.AnnotationMetadata copyAnnotationMetadata()
      Specified by:
      copyAnnotationMetadata in interface io.micronaut.core.annotation.AnnotationMetadata
    • size

      public int size()
      The size of the hierarchy.
      Returns:
      The size
      Since:
      4.0.0