Search in sources :

Example 26 with Types

use of javax.lang.model.util.Types in project requery by requery.

the class AttributeMember method validateCollectionType.

private ElementValidator validateCollectionType(ProcessingEnvironment processingEnvironment) {
    Types types = processingEnvironment.getTypeUtils();
    TypeElement collectionElement = (TypeElement) types.asElement(typeMirror());
    if (collectionElement != null) {
        ElementValidator validator = new ElementValidator(collectionElement, processingEnvironment);
        if (Mirrors.isInstance(types, collectionElement, List.class)) {
            builderClass = ListAttributeBuilder.class;
        } else if (Mirrors.isInstance(types, collectionElement, Set.class)) {
            builderClass = SetAttributeBuilder.class;
        } else if (Mirrors.isInstance(types, collectionElement, Iterable.class)) {
            builderClass = ResultAttributeBuilder.class;
        } else {
            validator.error("Invalid collection type, must be Set, List or Iterable");
        }
        return validator;
    }
    return null;
}
Also used : SetAttributeBuilder(io.requery.meta.SetAttributeBuilder) Types(javax.lang.model.util.Types) EnumSet(java.util.EnumSet) Set(java.util.Set) LinkedHashSet(java.util.LinkedHashSet) TypeElement(javax.lang.model.element.TypeElement)

Example 27 with Types

use of javax.lang.model.util.Types in project requery by requery.

the class ListenerMethod method process.

@Override
public Set<ElementValidator> process(ProcessingEnvironment processingEnvironment) {
    ElementValidator validator = new ElementValidator(element(), processingEnvironment);
    annotations = ListenerAnnotations.all().map(this::annotationOf).filter(Optional::isPresent).map(Optional::get).collect(Collectors.toList());
    if (!annotations.isEmpty()) {
        ExecutableElement element = element();
        if (!element.getParameters().isEmpty()) {
            validator.error("Callback method cannot have arguments");
        }
        if (element.getModifiers().contains(Modifier.PRIVATE)) {
            validator.error("Callback method cannot be private");
        }
        if (element.getModifiers().contains(Modifier.ABSTRACT)) {
            validator.error("Callback method cannot be abstract");
        }
        if (!element.getThrownTypes().isEmpty()) {
            Types types = processingEnvironment.getTypeUtils();
            for (TypeMirror mirror : element.getThrownTypes()) {
                Element exceptionElement = types.asElement(mirror);
                if (exceptionElement != null && exceptionElement.getKind() == ElementKind.CLASS) {
                    TypeElement typeElement = (TypeElement) exceptionElement;
                    if (!Mirrors.isInstance(types, typeElement, RuntimeException.class)) {
                        validator.error("Callback method cannot throw checked exception(s)");
                    }
                }
            }
        }
        annotations.stream().filter(annotation -> element().getSimpleName().contentEquals(Names.lowerCaseFirst(annotation.getClass().getSimpleName()))).forEach(annotation -> validator.error("Callback method cannot have the same name as the listener method"));
    }
    return Collections.singleton(validator);
}
Also used : ElementKind(javax.lang.model.element.ElementKind) Modifier(javax.lang.model.element.Modifier) ExecutableElement(javax.lang.model.element.ExecutableElement) Collection(java.util.Collection) Set(java.util.Set) Element(javax.lang.model.element.Element) TypeElement(javax.lang.model.element.TypeElement) Types(javax.lang.model.util.Types) Collectors(java.util.stream.Collectors) TypeMirror(javax.lang.model.type.TypeMirror) List(java.util.List) ProcessingEnvironment(javax.annotation.processing.ProcessingEnvironment) Annotation(java.lang.annotation.Annotation) Optional(java.util.Optional) Collections(java.util.Collections) Types(javax.lang.model.util.Types) Optional(java.util.Optional) TypeMirror(javax.lang.model.type.TypeMirror) TypeElement(javax.lang.model.element.TypeElement) ExecutableElement(javax.lang.model.element.ExecutableElement) ExecutableElement(javax.lang.model.element.ExecutableElement) Element(javax.lang.model.element.Element) TypeElement(javax.lang.model.element.TypeElement)

Example 28 with Types

use of javax.lang.model.util.Types in project neo4j by neo4j.

the class ProcedureProcessor method init.

@Override
public synchronized void init(ProcessingEnvironment processingEnv) {
    super.init(processingEnv);
    Types typeUtils = processingEnv.getTypeUtils();
    Elements elementUtils = processingEnv.getElementUtils();
    visitedProcedures.clear();
    messagePrinter = new MessagePrinter(processingEnv.getMessager());
    visitor = new StoredProcedureVisitor(typeUtils, elementUtils, processingEnv.getOptions().containsKey(IGNORE_CONTEXT_WARNINGS));
    duplicationPredicate = new DuplicatedProcedureValidator<>(elementUtils, sprocType, ProcedureProcessor::getCustomName);
}
Also used : Types(javax.lang.model.util.Types) MessagePrinter(org.neo4j.tooling.procedure.messages.MessagePrinter) StoredProcedureVisitor(org.neo4j.tooling.procedure.visitors.StoredProcedureVisitor) Elements(javax.lang.model.util.Elements)

Example 29 with Types

use of javax.lang.model.util.Types in project neo4j by neo4j.

the class UserFunctionProcessor method init.

@Override
public synchronized void init(ProcessingEnvironment processingEnv) {
    super.init(processingEnv);
    Types typeUtils = processingEnv.getTypeUtils();
    Elements elementUtils = processingEnv.getElementUtils();
    visitedFunctions.clear();
    messagePrinter = new MessagePrinter(processingEnv.getMessager());
    visitor = new UserFunctionVisitor(typeUtils, elementUtils, new TypeMirrorUtils(typeUtils, elementUtils));
    duplicationPredicate = new DuplicatedProcedureValidator<>(elementUtils, userFunctionType, UserFunctionProcessor::getCustomName);
}
Also used : Types(javax.lang.model.util.Types) UserFunctionVisitor(org.neo4j.tooling.procedure.visitors.UserFunctionVisitor) MessagePrinter(org.neo4j.tooling.procedure.messages.MessagePrinter) Elements(javax.lang.model.util.Elements) TypeMirrorUtils(org.neo4j.tooling.procedure.compilerutils.TypeMirrorUtils)

Example 30 with Types

use of javax.lang.model.util.Types in project neo4j by neo4j.

the class RecordTypeVisitorTest method prepare.

@Before
public void prepare() {
    Types types = compilation.getTypes();
    Elements elements = compilation.getElements();
    TypeMirrorUtils typeMirrors = new TypeMirrorUtils(types, elements);
    typeMirrorTestUtils = new TypeMirrorTestUtils(compilation);
    visitor = new RecordTypeVisitor(types, typeMirrors);
}
Also used : Types(javax.lang.model.util.Types) TypeMirrorTestUtils(org.neo4j.tooling.procedure.testutils.TypeMirrorTestUtils) Elements(javax.lang.model.util.Elements) TypeMirrorUtils(org.neo4j.tooling.procedure.compilerutils.TypeMirrorUtils) Before(org.junit.Before)

Aggregations

Types (javax.lang.model.util.Types)33 TypeMirror (javax.lang.model.type.TypeMirror)21 Elements (javax.lang.model.util.Elements)16 TypeElement (javax.lang.model.element.TypeElement)14 ExecutableElement (javax.lang.model.element.ExecutableElement)9 Element (javax.lang.model.element.Element)7 Test (org.junit.Test)7 DeclaredType (javax.lang.model.type.DeclaredType)6 LinkedHashMap (java.util.LinkedHashMap)5 Map (java.util.Map)5 Set (java.util.Set)5 LinkedHashSet (java.util.LinkedHashSet)4 List (java.util.List)4 Optional (java.util.Optional)4 VariableElement (javax.lang.model.element.VariableElement)4 TypeMirrorUtils (org.neo4j.tooling.procedure.compilerutils.TypeMirrorUtils)4 ArrayList (java.util.ArrayList)3 HashMap (java.util.HashMap)3 SupportedAnnotationTypes (javax.annotation.processing.SupportedAnnotationTypes)3 Before (org.junit.Before)3