Search in sources :

Example 61 with Elements

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

the class CompositeTypeConstructorGenerator 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) Elements(javax.lang.model.util.Elements)

Example 62 with Elements

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

the class ConfiguredObjectRegistrationGenerator method getCategory.

private String getCategory(final TypeElement e) {
    Elements elementUtils = processingEnv.getElementUtils();
    TypeElement annotationElement = elementUtils.getTypeElement(MANAGED_OBJECT_CANONICAL_NAME);
    String category = null;
    List<? extends AnnotationMirror> annotationMirrors = e.getAnnotationMirrors();
    if (annotationMirrors != null) {
        for (AnnotationMirror a : annotationMirrors) {
            if (a.getAnnotationType().asElement().equals(annotationElement)) {
                category = e.getSimpleName().toString().toLowerCase();
                for (Map.Entry<? extends ExecutableElement, ? extends AnnotationValue> entry : a.getElementValues().entrySet()) {
                    if (entry.getKey().getSimpleName().toString().equals("category")) {
                        if (!Boolean.TRUE.equals(entry.getValue().getValue())) {
                            category = null;
                        }
                        break;
                    }
                }
                break;
            }
        }
    }
    if (category == null) {
        for (TypeMirror interfaceMirror : e.getInterfaces()) {
            category = getCategory((TypeElement) processingEnv.getTypeUtils().asElement(interfaceMirror));
            if (category != null) {
                break;
            }
        }
    }
    if (category == null && e.getSuperclass() != null) {
        TypeElement parent = (TypeElement) processingEnv.getTypeUtils().asElement(e.getSuperclass());
        if (parent != null) {
            category = getCategory(parent);
        }
    }
    return category;
}
Also used : AnnotationMirror(javax.lang.model.element.AnnotationMirror) TypeMirror(javax.lang.model.type.TypeMirror) TypeElement(javax.lang.model.element.TypeElement) Elements(javax.lang.model.util.Elements) HashMap(java.util.HashMap) Map(java.util.Map)

Example 63 with Elements

use of javax.lang.model.util.Elements 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 64 with Elements

use of javax.lang.model.util.Elements 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 65 with Elements

use of javax.lang.model.util.Elements 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)

Aggregations

Elements (javax.lang.model.util.Elements)146 TypeElement (javax.lang.model.element.TypeElement)90 TypeMirror (javax.lang.model.type.TypeMirror)52 Element (javax.lang.model.element.Element)46 Types (javax.lang.model.util.Types)40 VariableElement (javax.lang.model.element.VariableElement)35 ExecutableElement (javax.lang.model.element.ExecutableElement)32 Map (java.util.Map)18 ArrayList (java.util.ArrayList)17 SupportedAnnotationTypes (javax.annotation.processing.SupportedAnnotationTypes)17 PackageElement (javax.lang.model.element.PackageElement)17 LinkedHashSet (java.util.LinkedHashSet)15 AnnotationMirror (javax.lang.model.element.AnnotationMirror)15 Test (org.junit.Test)15 List (java.util.List)14 XmlElements (javax.xml.bind.annotation.XmlElements)14 Metadata (org.apache.camel.spi.Metadata)14 Set (java.util.Set)12 DeclaredType (javax.lang.model.type.DeclaredType)12 AnnotationProcessorHelper.findTypeElement (org.apache.camel.tools.apt.AnnotationProcessorHelper.findTypeElement)12