Class AbstractAnnotationReader

  • All Implemented Interfaces:
    AnnotationReader

    public abstract class AbstractAnnotationReader
    extends Object
    implements AnnotationReader
    Abstract implementation of a metadata annotations reader. A metadata annotation reader takes in a class and converts its annotations into internal metadata. Any implementation has to implement the method "processClassAnnotations" which creates the ClassMetaData record for the class, and the method "processFieldAnnotations" which updates the ClassMetaData with its field definition.

    Each annotation reader supports a set of annotations. So it could support "JPA" annotations, or "JDO" annotations, or "DataNucleus" annotations or whatever.

    • Field Detail

      • supportedPackages

        protected String[] supportedPackages
        Supported annotations packages.
      • supportedDuplicateAnnotations

        protected Set<String> supportedDuplicateAnnotations
        Supported annotations that can be duplicated (when used in meta-annotations).
    • Constructor Detail

      • AbstractAnnotationReader

        public AbstractAnnotationReader​(MetaDataManager mgr)
        Constructor.
        Parameters:
        mgr - MetaData manager
    • Method Detail

      • isPersistenceContext

        public boolean isPersistenceContext()
        Description copied from interface: AnnotationReader
        Method to return whether this is reading in a persistence context.
        Specified by:
        isPersistenceContext in interface AnnotationReader
        Returns:
        Whether this is a persistence context
      • getSupportedAnnotationPackages

        public String[] getSupportedAnnotationPackages()
        Method to set the valid annotation packages to be supported when reading.
        Specified by:
        getSupportedAnnotationPackages in interface AnnotationReader
        Returns:
        The supported packages.
      • setSupportedAnnotationPackages

        protected void setSupportedAnnotationPackages​(String[] packages)
        Method to set the valid annotation packages to be supported when reading.
        Parameters:
        packages - The supported packages.
      • addSupportedDuplicateAnnotations

        protected void addSupportedDuplicateAnnotations​(String annot)
      • isSupportedAnnotation

        protected boolean isSupportedAnnotation​(String annotationClassName)
        Convenience method to check whether an annotation class name is supported by this reader.
        Parameters:
        annotationClassName - Name of the annotation class
        Returns:
        Whether it is supported.
      • processClassAnnotations

        protected abstract AbstractClassMetaData processClassAnnotations​(PackageMetaData pmd,
                                                                         Class cls,
                                                                         AnnotationObject[] annotations,
                                                                         ClassLoaderResolver clr)
        Method to process the "class" level annotations and create the outline ClassMetaData object.
        Parameters:
        pmd - Parent PackageMetaData
        cls - The class
        annotations - Annotations for the class
        clr - ClassLoader resolver
        Returns:
        The ClassMetaData (or null if no annotations)
      • processMemberAnnotations

        protected abstract AbstractMemberMetaData processMemberAnnotations​(AbstractClassMetaData cmd,
                                                                           Member member,
                                                                           AnnotationObject[] annotations)
        Method to take the passed in outline ClassMetaData and process the annotations for fields/properties adding any necessary FieldMetaData/PropertyMetaData to the ClassMetaData.
        Parameters:
        cmd - The ClassMetaData (to be updated)
        member - The field/property being processed
        annotations - The annotations for this field/property
        Returns:
        The FieldMetaData/PropertyMetaData that was added (if any)
      • processMethodAnnotations

        protected abstract void processMethodAnnotations​(AbstractClassMetaData cmd,
                                                         Method method)
        Method to take the passed in outline ClassMetaData and process the annotations for method adding any necessary MetaData to the ClassMetaData. Called for all methods and is intended for processing of any methods other than persistence specifications (for example listener methods). Methods for persistence specification are processed via "processMemberAnnotations".
        Parameters:
        cmd - The ClassMetaData (to be updated)
        method - The method
      • getClassAnnotationsForClass

        protected AnnotationObject[] getClassAnnotationsForClass​(Class cls)
        Method returning the annotations for the class.
        Parameters:
        cls - The class
        Returns:
        Class annotations
      • getJavaBeanAccessorAnnotationsForClass

        protected Collection<org.datanucleus.metadata.annotations.AnnotatedMember> getJavaBeanAccessorAnnotationsForClass​(Class cls)
        Method returning a Map containing an array of the annotations for each Java Bean accessor method of the passed class, keyed by the method name.
        Parameters:
        cls - The class
        Returns:
        Collection of the annotated methods (with supported annotations)
      • getFieldAnnotationsForClass

        protected Collection<org.datanucleus.metadata.annotations.AnnotatedMember> getFieldAnnotationsForClass​(Class cls)
        Method returning a Collection of the annotated fields for the specified class.
        Parameters:
        cls - The class
        Returns:
        Collection of the annotated fields (with supported annotations)
      • getAnnotationObjectsForAnnotations

        protected AnnotationObject[] getAnnotationObjectsForAnnotations​(String clsName,
                                                                        Annotation[] annotations)
        Convenience method to convert an array of Annotation objects into an array of AnnotationObjects.
        Parameters:
        clsName - Name of the class
        annotations - The annotations
        Returns:
        The annotation objects