Class ClassIndexProcessor

  • All Implemented Interfaces:
    javax.annotation.processing.Processor

    public class ClassIndexProcessor
    extends javax.annotation.processing.AbstractProcessor
    Generates index files for ClassIndex.
    • Field Summary

      Fields 
      Modifier and Type Field Description
      private java.util.Map<java.lang.String,​java.util.Set<java.lang.String>> annotatedMap  
      private boolean annotationDriven  
      private javax.lang.model.util.Elements elementUtils  
      private javax.annotation.processing.Filer filer  
      private java.util.Set<java.lang.String> indexedAnnotations  
      private java.util.Set<java.lang.String> indexedPackages  
      private java.util.Set<java.lang.String> indexedSuperclasses  
      private java.util.Set<javax.lang.model.element.TypeElement> javadocAlreadyStored  
      private javax.annotation.processing.Messager messager  
      private java.util.Map<java.lang.String,​java.util.Set<java.lang.String>> packageMap  
      private java.util.Map<java.lang.String,​java.util.Set<java.lang.String>> subclassMap  
      private javax.lang.model.util.Types types  
      • Fields inherited from class javax.annotation.processing.AbstractProcessor

        processingEnv
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      private java.lang.String getFullName​(javax.lang.model.element.TypeElement typeElement)  
      private javax.lang.model.element.PackageElement getPackage​(javax.lang.model.element.Element typeElement)  
      private java.lang.String getShortName​(javax.lang.model.element.TypeElement typeElement)  
      java.util.Set<java.lang.String> getSupportedAnnotationTypes()  
      javax.lang.model.SourceVersion getSupportedSourceVersion()  
      private boolean hasAnnotation​(javax.lang.model.element.TypeElement element, java.lang.Class<? extends java.lang.annotation.Annotation> inheritedClass)  
      protected void indexAnnotations​(java.lang.Class<?>... classes)
      Adds given annotations for indexing.
      protected void indexPackages​(java.lang.String... packages)
      Adds given package for indexing.
      protected void indexSubclasses​(java.lang.Class<?>... classes)
      Adds given classes for subclass indexing.
      private void indexSupertypes​(javax.lang.model.element.TypeElement rootElement, javax.lang.model.element.TypeElement element)
      Index super types for IndexSubclasses and any IndexAnnotated additionally accompanied by Inherited.
      void init​(javax.annotation.processing.ProcessingEnvironment processingEnv)  
      boolean process​(java.util.Set<? extends javax.lang.model.element.TypeElement> annotations, javax.annotation.processing.RoundEnvironment roundEnv)  
      private <K> void putElement​(java.util.Map<K,​java.util.Set<java.lang.String>> map, K keyElement, java.lang.String valueElement)  
      private <K> void putElement​(java.util.Map<K,​java.util.Set<java.lang.String>> map, K keyElement, javax.lang.model.element.TypeElement valueElement)  
      private static void readOldIndexFile​(java.util.Set<java.lang.String> entries, java.io.Reader reader)  
      private javax.tools.FileObject readOldIndexFile​(java.util.Set<java.lang.String> entries, java.lang.String resourceName)  
      private void storeAnnotation​(javax.lang.model.element.TypeElement annotationElement, javax.lang.model.element.TypeElement rootElement)  
      private void storeClassFromPackage​(javax.lang.model.element.PackageElement packageElement, javax.lang.model.element.TypeElement rootElement)  
      private void storeJavadoc​(javax.lang.model.element.TypeElement element)  
      private void storeRepeatableAnnotation​(javax.lang.model.element.AnnotationMirror annotation, javax.lang.model.element.TypeElement typeElement)  
      private void storeSubclass​(javax.lang.model.element.TypeElement superTypeElement, javax.lang.model.element.TypeElement rootElement)  
      private void writeFile​(java.lang.String content, java.lang.String resourceName)  
      private void writeIndexFile​(java.util.Set<java.lang.String> entries, java.lang.String resourceName, javax.tools.FileObject overrideFile)  
      private void writeIndexFiles​(java.lang.String prefix, java.util.Map<java.lang.String,​java.util.Set<java.lang.String>> indexMap)  
      private void writeSimpleNameIndexFile​(java.util.Set<java.lang.String> elementList, java.lang.String resourceName)  
      • Methods inherited from class javax.annotation.processing.AbstractProcessor

        getCompletions, getSupportedOptions, isInitialized
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • subclassMap

        private java.util.Map<java.lang.String,​java.util.Set<java.lang.String>> subclassMap
      • annotatedMap

        private java.util.Map<java.lang.String,​java.util.Set<java.lang.String>> annotatedMap
      • packageMap

        private java.util.Map<java.lang.String,​java.util.Set<java.lang.String>> packageMap
      • annotationDriven

        private boolean annotationDriven
      • indexedAnnotations

        private java.util.Set<java.lang.String> indexedAnnotations
      • indexedSuperclasses

        private java.util.Set<java.lang.String> indexedSuperclasses
      • indexedPackages

        private java.util.Set<java.lang.String> indexedPackages
      • javadocAlreadyStored

        private java.util.Set<javax.lang.model.element.TypeElement> javadocAlreadyStored
      • types

        private javax.lang.model.util.Types types
      • filer

        private javax.annotation.processing.Filer filer
      • elementUtils

        private javax.lang.model.util.Elements elementUtils
      • messager

        private javax.annotation.processing.Messager messager
    • Constructor Detail

      • ClassIndexProcessor

        public ClassIndexProcessor()
      • ClassIndexProcessor

        protected ClassIndexProcessor​(java.lang.Class<?>... classes)
        Used when creating subclasses of the processor which will index some annotations which cannot be itself annotated with IndexAnnotated or IndexSubclasses.
        Parameters:
        classes - list of classes which the processor will be indexing
    • Method Detail

      • indexAnnotations

        protected final void indexAnnotations​(java.lang.Class<?>... classes)
        Adds given annotations for indexing.
      • indexSubclasses

        protected final void indexSubclasses​(java.lang.Class<?>... classes)
        Adds given classes for subclass indexing.
      • indexPackages

        protected final void indexPackages​(java.lang.String... packages)
        Adds given package for indexing.
      • getSupportedSourceVersion

        public javax.lang.model.SourceVersion getSupportedSourceVersion()
        Specified by:
        getSupportedSourceVersion in interface javax.annotation.processing.Processor
        Overrides:
        getSupportedSourceVersion in class javax.annotation.processing.AbstractProcessor
      • getSupportedAnnotationTypes

        public java.util.Set<java.lang.String> getSupportedAnnotationTypes()
        Specified by:
        getSupportedAnnotationTypes in interface javax.annotation.processing.Processor
        Overrides:
        getSupportedAnnotationTypes in class javax.annotation.processing.AbstractProcessor
      • init

        public void init​(javax.annotation.processing.ProcessingEnvironment processingEnv)
        Specified by:
        init in interface javax.annotation.processing.Processor
        Overrides:
        init in class javax.annotation.processing.AbstractProcessor
      • process

        public boolean process​(java.util.Set<? extends javax.lang.model.element.TypeElement> annotations,
                               javax.annotation.processing.RoundEnvironment roundEnv)
        Specified by:
        process in interface javax.annotation.processing.Processor
        Specified by:
        process in class javax.annotation.processing.AbstractProcessor
      • storeRepeatableAnnotation

        private void storeRepeatableAnnotation​(javax.lang.model.element.AnnotationMirror annotation,
                                               javax.lang.model.element.TypeElement typeElement)
                                        throws java.io.IOException
        Throws:
        java.io.IOException
      • writeIndexFiles

        private void writeIndexFiles​(java.lang.String prefix,
                                     java.util.Map<java.lang.String,​java.util.Set<java.lang.String>> indexMap)
                              throws java.io.IOException
        Throws:
        java.io.IOException
      • readOldIndexFile

        private javax.tools.FileObject readOldIndexFile​(java.util.Set<java.lang.String> entries,
                                                        java.lang.String resourceName)
                                                 throws java.io.IOException
        Throws:
        java.io.IOException
      • readOldIndexFile

        private static void readOldIndexFile​(java.util.Set<java.lang.String> entries,
                                             java.io.Reader reader)
                                      throws java.io.IOException
        Throws:
        java.io.IOException
      • writeIndexFile

        private void writeIndexFile​(java.util.Set<java.lang.String> entries,
                                    java.lang.String resourceName,
                                    javax.tools.FileObject overrideFile)
                             throws java.io.IOException
        Throws:
        java.io.IOException
      • writeSimpleNameIndexFile

        private void writeSimpleNameIndexFile​(java.util.Set<java.lang.String> elementList,
                                              java.lang.String resourceName)
                                       throws java.io.IOException
        Throws:
        java.io.IOException
      • writeFile

        private void writeFile​(java.lang.String content,
                               java.lang.String resourceName)
                        throws java.io.IOException
        Throws:
        java.io.IOException
      • indexSupertypes

        private void indexSupertypes​(javax.lang.model.element.TypeElement rootElement,
                                     javax.lang.model.element.TypeElement element)
                              throws java.io.IOException
        Index super types for IndexSubclasses and any IndexAnnotated additionally accompanied by Inherited.
        Throws:
        java.io.IOException
      • hasAnnotation

        private boolean hasAnnotation​(javax.lang.model.element.TypeElement element,
                                      java.lang.Class<? extends java.lang.annotation.Annotation> inheritedClass)
      • storeAnnotation

        private void storeAnnotation​(javax.lang.model.element.TypeElement annotationElement,
                                     javax.lang.model.element.TypeElement rootElement)
                              throws java.io.IOException
        Throws:
        java.io.IOException
      • storeSubclass

        private void storeSubclass​(javax.lang.model.element.TypeElement superTypeElement,
                                   javax.lang.model.element.TypeElement rootElement)
                            throws java.io.IOException
        Throws:
        java.io.IOException
      • storeClassFromPackage

        private void storeClassFromPackage​(javax.lang.model.element.PackageElement packageElement,
                                           javax.lang.model.element.TypeElement rootElement)
                                    throws java.io.IOException
        Throws:
        java.io.IOException
      • putElement

        private <K> void putElement​(java.util.Map<K,​java.util.Set<java.lang.String>> map,
                                    K keyElement,
                                    javax.lang.model.element.TypeElement valueElement)
      • putElement

        private <K> void putElement​(java.util.Map<K,​java.util.Set<java.lang.String>> map,
                                    K keyElement,
                                    java.lang.String valueElement)
      • getFullName

        private java.lang.String getFullName​(javax.lang.model.element.TypeElement typeElement)
      • getShortName

        private java.lang.String getShortName​(javax.lang.model.element.TypeElement typeElement)
      • getPackage

        private javax.lang.model.element.PackageElement getPackage​(javax.lang.model.element.Element typeElement)
      • storeJavadoc

        private void storeJavadoc​(javax.lang.model.element.TypeElement element)
                           throws java.io.IOException
        Throws:
        java.io.IOException