List of usage examples for javax.lang.model.element Element accept
<R, P> R accept(ElementVisitor<R, P> v, P p);
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; }