Search in sources :

Example 46 with Types

use of javax.lang.model.util.Types in project qpid-broker-j by apache.

the class AttributeAnnotationValidator method isValidType.

static boolean isValidType(ProcessingEnvironment processingEnv, final TypeMirror type, final boolean allowAbstractManagedTypes) {
    Types typeUtils = processingEnv.getTypeUtils();
    Elements elementUtils = processingEnv.getElementUtils();
    Element typeElement = typeUtils.asElement(type);
    if (VALID_PRIMITIVE_TYPES.contains(type.getKind())) {
        return true;
    }
    for (TypeKind primitive : VALID_PRIMITIVE_TYPES) {
        if (typeUtils.isSameType(type, typeUtils.boxedClass(typeUtils.getPrimitiveType(primitive)).asType())) {
            return true;
        }
    }
    if (typeElement != null && typeElement.getKind() == ElementKind.ENUM) {
        return true;
    }
    String className = "org.apache.qpid.server.model.ConfiguredObject";
    TypeMirror configuredObjectType = getErasure(processingEnv, className);
    if (typeUtils.isAssignable(typeUtils.erasure(type), configuredObjectType)) {
        return true;
    }
    final TypeElement managedAttributeTypeValueElement = elementUtils.getTypeElement(ManagedAttributeValueTypeValidator.MANAGED_ATTRIBUTE_VALUE_TYPE_CLASS_NAME);
    if (typeElement != null) {
        for (AnnotationMirror annotation : typeElement.getAnnotationMirrors()) {
            if (annotation.getAnnotationType().asElement().equals(managedAttributeTypeValueElement)) {
                if (allowAbstractManagedTypes) {
                    return true;
                } else {
                    final Map<? extends ExecutableElement, ? extends AnnotationValue> annotationValues = elementUtils.getElementValuesWithDefaults(annotation);
                    for (Map.Entry<? extends ExecutableElement, ? extends AnnotationValue> element : annotationValues.entrySet()) {
                        if ("isAbstract".contentEquals(element.getKey().getSimpleName())) {
                            return element.getValue().getValue().equals(Boolean.FALSE);
                        }
                    }
                    return false;
                }
            }
        }
    }
    if (typeUtils.isSameType(type, elementUtils.getTypeElement("java.lang.Object").asType())) {
        return true;
    }
    if (typeUtils.isSameType(type, elementUtils.getTypeElement("java.lang.String").asType())) {
        return true;
    }
    if (typeUtils.isSameType(type, elementUtils.getTypeElement("java.util.UUID").asType())) {
        return true;
    }
    if (typeUtils.isSameType(type, elementUtils.getTypeElement("java.util.Date").asType())) {
        return true;
    }
    if (typeUtils.isSameType(type, elementUtils.getTypeElement("java.net.URI").asType())) {
        return true;
    }
    if (typeUtils.isSameType(type, elementUtils.getTypeElement("java.security.cert.Certificate").asType())) {
        return true;
    }
    if (typeUtils.isSameType(type, elementUtils.getTypeElement("java.security.Principal").asType())) {
        return true;
    }
    TypeMirror erasedType = typeUtils.erasure(type);
    if (typeUtils.isSameType(erasedType, getErasure(processingEnv, "java.util.List")) || typeUtils.isSameType(erasedType, getErasure(processingEnv, "java.util.Set")) || typeUtils.isSameType(erasedType, getErasure(processingEnv, "java.util.Collection"))) {
        for (TypeMirror paramType : ((DeclaredType) type).getTypeArguments()) {
            if (!isValidType(processingEnv, paramType, allowAbstractManagedTypes)) {
                return false;
            }
        }
        return true;
    }
    if (typeUtils.isSameType(erasedType, getErasure(processingEnv, "java.util.Map"))) {
        List<? extends TypeMirror> args = ((DeclaredType) type).getTypeArguments();
        if (args.size() != 2) {
            throw new IllegalArgumentException("Map types " + type + " must have exactly two type arguments");
        }
        return isValidType(processingEnv, args.get(0), false) && (isValidType(processingEnv, args.get(1), false) || typeUtils.isSameType(args.get(1), getErasure(processingEnv, "java.lang.Object")));
    }
    return false;
}
Also used : Types(javax.lang.model.util.Types) SupportedAnnotationTypes(javax.annotation.processing.SupportedAnnotationTypes) TypeElement(javax.lang.model.element.TypeElement) ExecutableElement(javax.lang.model.element.ExecutableElement) Element(javax.lang.model.element.Element) TypeElement(javax.lang.model.element.TypeElement) TypeKind(javax.lang.model.type.TypeKind) Elements(javax.lang.model.util.Elements) AnnotationMirror(javax.lang.model.element.AnnotationMirror) TypeMirror(javax.lang.model.type.TypeMirror) Map(java.util.Map) DeclaredType(javax.lang.model.type.DeclaredType)

Example 47 with Types

use of javax.lang.model.util.Types in project qpid-broker-j by apache.

the class AttributeAnnotationValidator method getErasure.

private static TypeMirror getErasure(ProcessingEnvironment processingEnv, final String className) {
    final Types typeUtils = processingEnv.getTypeUtils();
    final Elements elementUtils = processingEnv.getElementUtils();
    return typeUtils.erasure(elementUtils.getTypeElement(className).asType());
}
Also used : Types(javax.lang.model.util.Types) SupportedAnnotationTypes(javax.annotation.processing.SupportedAnnotationTypes) Elements(javax.lang.model.util.Elements)

Example 48 with Types

use of javax.lang.model.util.Types in project qpid-broker-j by apache.

the class AttributeAnnotationValidator method isNamed.

static boolean isNamed(ProcessingEnvironment processingEnv, final TypeMirror type) {
    Types typeUtils = processingEnv.getTypeUtils();
    String className = "org.apache.qpid.server.model.Named";
    TypeMirror namedType = getErasure(processingEnv, className);
    return typeUtils.isAssignable(typeUtils.erasure(type), namedType);
}
Also used : Types(javax.lang.model.util.Types) SupportedAnnotationTypes(javax.annotation.processing.SupportedAnnotationTypes) TypeMirror(javax.lang.model.type.TypeMirror)

Example 49 with Types

use of javax.lang.model.util.Types in project qpid-broker-j by apache.

the class ContentHeaderAnnotationValidator method getErasure.

private static TypeMirror getErasure(ProcessingEnvironment processingEnv, final String className) {
    final Types typeUtils = processingEnv.getTypeUtils();
    final Elements elementUtils = processingEnv.getElementUtils();
    return typeUtils.erasure(elementUtils.getTypeElement(className).asType());
}
Also used : Types(javax.lang.model.util.Types) SupportedAnnotationTypes(javax.annotation.processing.SupportedAnnotationTypes) Elements(javax.lang.model.util.Elements)

Example 50 with Types

use of javax.lang.model.util.Types in project qpid-broker-j by apache.

the class OperationAnnotationValidator method getErasure.

private static TypeMirror getErasure(ProcessingEnvironment processingEnv, final String className) {
    final Types typeUtils = processingEnv.getTypeUtils();
    final Elements elementUtils = processingEnv.getElementUtils();
    return typeUtils.erasure(elementUtils.getTypeElement(className).asType());
}
Also used : Types(javax.lang.model.util.Types) SupportedAnnotationTypes(javax.annotation.processing.SupportedAnnotationTypes) Elements(javax.lang.model.util.Elements)

Aggregations

Types (javax.lang.model.util.Types)113 TypeMirror (javax.lang.model.type.TypeMirror)77 TypeElement (javax.lang.model.element.TypeElement)52 Elements (javax.lang.model.util.Elements)48 ExecutableElement (javax.lang.model.element.ExecutableElement)34 Element (javax.lang.model.element.Element)30 SupportedAnnotationTypes (javax.annotation.processing.SupportedAnnotationTypes)27 DeclaredType (javax.lang.model.type.DeclaredType)26 ArrayList (java.util.ArrayList)25 Map (java.util.Map)24 VariableElement (javax.lang.model.element.VariableElement)24 List (java.util.List)21 AnnotationMirror (javax.lang.model.element.AnnotationMirror)20 TypeKind (javax.lang.model.type.TypeKind)18 Set (java.util.Set)16 Collection (java.util.Collection)15 HashMap (java.util.HashMap)13 ElementKind (javax.lang.model.element.ElementKind)13 Modifier (javax.lang.model.element.Modifier)13 IOException (java.io.IOException)12