Class SearchIndexAnnotatedTypeFactory

  • All Implemented Interfaces:
    AnnotationProvider

    public class SearchIndexAnnotatedTypeFactory
    extends BaseAnnotatedTypeFactory
    The Search Index Checker is used to help type the results of calls to the JDK's binary search methods. It is part of the Index Checker.
    • Field Detail

      • UNKNOWN

        public final javax.lang.model.element.AnnotationMirror UNKNOWN
        The @SearchIndexUnknown annotation.
      • BOTTOM

        public final javax.lang.model.element.AnnotationMirror BOTTOM
        The @SearchIndexBottom annotation.
      • negativeIndexForValueElement

        protected final javax.lang.model.element.ExecutableElement negativeIndexForValueElement
        The NegativeIndexFor.value field/element.
      • searchIndexForValueElement

        protected final javax.lang.model.element.ExecutableElement searchIndexForValueElement
        The SearchIndexFor.value field/element.
    • Constructor Detail

      • SearchIndexAnnotatedTypeFactory

        public SearchIndexAnnotatedTypeFactory​(BaseTypeChecker checker)
        Create a new SearchIndexAnnotatedTypeFactory.
        Parameters:
        checker - the type-checker associated with this
    • Method Detail

      • createSupportedTypeQualifiers

        protected java.util.Set<java.lang.Class<? extends java.lang.annotation.Annotation>> createSupportedTypeQualifiers()
        Description copied from class: AnnotatedTypeFactory
        Returns a mutable set of annotation classes that are supported by a checker.

        Subclasses may override this method to return a mutable set of their supported type qualifiers through one of the 5 approaches shown below.

        Subclasses should not call this method; they should call AnnotatedTypeFactory.getSupportedTypeQualifiers() instead.

        By default, a checker supports all annotations located in a subdirectory called qual that's located in the same directory as the checker. Note that only annotations defined with the @Target({ElementType.TYPE_USE}) meta-annotation (and optionally with the additional value of ElementType.TYPE_PARAMETER, but no other ElementType values) are automatically considered as supported annotations.

        To support a different set of annotations than those in the qual subdirectory, or that have other ElementType values, see examples below.

        In total, there are 5 ways to indicate annotations that are supported by a checker:

        1. Only support annotations located in a checker's qual directory:

          This is the default behavior. Simply place those annotations within the qual directory.

        2. Support annotations located in a checker's qual directory and a list of other annotations:

          Place those annotations within the qual directory, and override AnnotatedTypeFactory.createSupportedTypeQualifiers() by calling AnnotatedTypeFactory.getBundledTypeQualifiers(Class...) with a varargs parameter list of the other annotations. Code example:

           @Override protected Set<Class<? extends Annotation>> createSupportedTypeQualifiers() {
                return getBundledTypeQualifiers(Regex.class, PartialRegex.class, RegexBottom.class, UnknownRegex.class);
            } 
           
        3. Supporting only annotations that are explicitly listed: Override AnnotatedTypeFactory.createSupportedTypeQualifiers() and return a mutable set of the supported annotations. Code example:
           @Override protected Set<Class<? extends Annotation>> createSupportedTypeQualifiers() {
                return new HashSet<Class<? extends Annotation>>(
                        Arrays.asList(A.class, B.class));
            } 
           
          The set of qualifiers returned by AnnotatedTypeFactory.createSupportedTypeQualifiers() must be a fresh, mutable set. The methods AnnotatedTypeFactory.getBundledTypeQualifiers(Class...) must return a fresh, mutable set
        Overrides:
        createSupportedTypeQualifiers in class AnnotatedTypeFactory
        Returns:
        the type qualifiers supported this processor, or an empty set if none