private int processElements(Collection<MutableDeclaredType> elements) {
Map<String, Element> els = new HashMap<String, Element>();
for (MutableDeclaredType element: elements) {
els.put(element.getCanonicalName(), processingEnv.getElementUtils().getTypeElement(element.toString(ClassSerializer.CANONICAL, false)));
}
int processedElementCount = 0;
for (MutableDeclaredType element: elements) {
if (!ListUtils.containsElement(processedElements, element)) {
Element el = els.get(element.getCanonicalName());
if (el == null) {
processingEnv.getMessager().printMessage(Kind.ERROR, "Element " + element.toString() + " is not available for the processing!");
} else {
if (configurer == null || configurer.isSupportedKind(el.getKind())) {
if (processedElements.size() == 0 || !getExecutionType().equals(ExecutionType.ONCE)) {
processedElements.add(element);
init(el, roundEnv);
processedElementCount += processElement(element, roundEnv);
configurer.flushMessages(processingEnv.getMessager(), el);
}
}
}
}
}
return processedElementCount;
}