Example usage for javax.lang.model.element Element accept

List of usage examples for javax.lang.model.element Element accept

Introduction

In this page you can find the example usage for javax.lang.model.element Element accept.

Prototype

<R, P> R accept(ElementVisitor<R, P> v, P p);

Source Link

Document

Applies a visitor to this element.

Usage

From source file:ca.sqlpower.object.annotation.SPAnnotationProcessor.java

@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
    for (TypeElement el : annotations) {
        if (!this.annotations.contains(el.getQualifiedName().toString())) {
            return false;
        }/*ww w  .jav a 2s.  c  om*/
    }
    Map<Class<? extends SPObject>, SPClassVisitor> visitors = new HashMap<Class<? extends SPObject>, SPClassVisitor>();
    for (Element typeDecl : roundEnv.getElementsAnnotatedWith(Persistable.class)) {
        SPClassVisitor visitor = new SPClassVisitor(typeDecl);
        typeDecl.accept(visitor, null);
        if (visitor.isValid() && visitor.getVisitedClass() != null) {
            visitors.put(visitor.getVisitedClass(), visitor);
        }
    }

    // This block checks if each of the classes has super classes that
    // contain persistable properties. If so, they should inherit those
    // persistable properties. Any additional packages should be
    // imported as well.
    for (Entry<Class<? extends SPObject>, SPClassVisitor> e : visitors.entrySet()) {
        Class<? extends SPObject> superClass = e.getKey();
        SPClassVisitor visitor = e.getValue();

        Multimap<String, String> mutatorImports = HashMultimap.create(visitor.getMutatorImports());
        Map<String, Class<?>> propertiesToAccess = new HashMap<String, Class<?>>(
                visitor.getPropertiesToAccess());
        Multimap<String, String> accessorAdditionalInfo = LinkedHashMultimap
                .create(visitor.getAccessorAdditionalInfo());
        Map<String, Class<?>> propertiesToMutate = new HashMap<String, Class<?>>(
                visitor.getPropertiesToMutate());
        Multimap<String, MutatorParameterObject> mutatorExtraParameters = LinkedHashMultimap
                .create(visitor.getMutatorExtraParameters());
        Multimap<String, Class<? extends Exception>> mutatorThrownTypes = HashMultimap
                .create(visitor.getMutatorThrownTypes());
        Set<String> propertiesToPersistOnlyIfNonNull = new HashSet<String>(
                visitor.getPropertiesToPersistOnlyIfNonNull());

        importedClassNames.clear();

        // Generate the persister helper file if the SPObject class is not abstract.
        if (!Modifier.isAbstract(visitor.getVisitedClass().getModifiers())) {
            generatePersisterHelperFile(superClass, visitor.getConstructorImports(),
                    visitor.getConstructorParameters(), propertiesToAccess, accessorAdditionalInfo,
                    mutatorImports, propertiesToMutate, mutatorExtraParameters, mutatorThrownTypes,
                    propertiesToPersistOnlyIfNonNull);
        } else {
            generateAbstractPersisterHelperFile(superClass, visitor.getConstructorImports(), propertiesToAccess,
                    accessorAdditionalInfo, mutatorImports, propertiesToMutate, mutatorExtraParameters,
                    mutatorThrownTypes, propertiesToPersistOnlyIfNonNull);
        }
    }
    return true;
}