All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.introproventures.graphql.jpa.query.introspection.AnnotationDescriptor Maven / Gradle / Ivy

There is a newer version: 1.2.11
Show newest version
package com.introproventures.graphql.jpa.query.introspection;


import java.lang.annotation.Annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.Arrays;
import java.util.Objects;

public class AnnotationDescriptor {

    private final Annotation annotation;

    private final Class annotationType;

    private final ElementType[] elementTypes;

    private final RetentionPolicy policy;

    private final boolean isDocumented;

    private final boolean isInherited;

    public  AnnotationDescriptor(A annotation) {
        this.annotation = annotation;
        annotationType = annotation.annotationType();

        Target target = annotationType.getAnnotation(Target.class);
        elementTypes = (target == null) ? ElementType.values() : target.value();

        Retention retention = annotationType.getAnnotation(Retention.class);
        policy = (retention == null) ? RetentionPolicy.CLASS : retention.value();

        Documented documented = annotationType.getAnnotation(Documented.class);
        isDocumented = (documented != null);

        Inherited inherited = annotationType.getAnnotation(Inherited.class);
        isInherited = (inherited != null);
    }

    @SuppressWarnings("unchecked")
    public  A getAnnotation() {
        return (A) annotation;
    }

    public Class getAnnotationType() {
        return annotationType;
    }

    public ElementType[] getElementTypes() {
        return elementTypes;
    }

    public RetentionPolicy getPolicy() {
        return policy;
    }

    public boolean isDocumented() {
        return isDocumented;
    }

    public boolean isInherited() {
        return isInherited;
    }

    @Override
    public String toString() {
        StringBuilder builder = new StringBuilder();
        builder.append("AnnotationDescriptor [annotation=")
               .append(annotation)
               .append(", annotationType=")
               .append(annotationType)
               .append(", elementTypes=")
               .append(Arrays.toString(elementTypes))
               .append(", policy=")
               .append(policy)
               .append(", isDocumented=")
               .append(isDocumented)
               .append(", isInherited=")
               .append(isInherited)
               .append("]");
        return builder.toString();
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + Arrays.hashCode(elementTypes);
        result = prime * result + Objects.hash(annotation, annotationType, isDocumented, isInherited, policy);
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        AnnotationDescriptor other = (AnnotationDescriptor) obj;
        return Objects.equals(annotation, other.annotation) 
                && Objects.equals(annotationType, other.annotationType) 
                && Arrays.equals(elementTypes, other.elementTypes) 
                && isDocumented == other.isDocumented 
                && isInherited == other.isInherited 
                && policy == other.policy;
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy