package br.com.tecsinapse.processors; import static br.com.tecsinapse.processors.ProcessorConstants.INJECT; import static br.com.tecsinapse.processors.ProcessorConstants.STATELESS; import java.util.Set; import javax.annotation.processing.Messager; import javax.annotation.processing.RoundEnvironment; import javax.annotation.processing.SupportedAnnotationTypes; import javax.lang.model.element.Element; import javax.lang.model.element.Modifier; import javax.lang.model.element.QualifiedNameable; import javax.lang.model.element.TypeElement; import javax.lang.model.element.VariableElement; import javax.lang.model.util.ElementFilter; import javax.tools.Diagnostic.Kind; @SupportedAnnotationTypes(STATELESS) public class PossiblyBrokenStatelessProcessor extends BaseProcessor { private Messager messager; @Override protected void doProcess(Set annotations, RoundEnvironment roundEnv) { messager = processingEnv.getMessager(); annotations.forEach(annotation -> roundEnv.getElementsAnnotatedWith(annotation).forEach(element -> scanForMutableFields(element) ) ); } private void scanForMutableFields(Element element) { for (VariableElement field : ElementFilter.fieldsIn(element .getEnclosedElements())) { if (field.getModifiers().contains(Modifier.FINAL) || field.getModifiers().contains(Modifier.STATIC)) { continue; } if (!field.getAnnotationMirrors().stream().anyMatch(mirror -> ((QualifiedNameable)mirror.getAnnotationType().asElement()) .getQualifiedName().contentEquals(INJECT))) { messager.printMessage(Kind.WARNING, "Provável caso de @" + STATELESS + " incorreto", field); } } } }