You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

DemoProcessor2.java 1.6KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import java.io.*;
  2. import javax.tools.*;
  3. import java.util.*;
  4. import javax.annotation.processing.*;
  5. import javax.lang.model.*;
  6. import javax.lang.model.element.*;
  7. @SupportedAnnotationTypes(value= {"java.lang.SuppressWarnings"})
  8. @SupportedSourceVersion(SourceVersion.RELEASE_6)
  9. public class DemoProcessor2 extends AbstractProcessor {
  10. private Filer filer;
  11. @Override
  12. public void init(ProcessingEnvironment env) {
  13. filer = env.getFiler();
  14. }
  15. @Override
  16. public boolean process(Set elements, RoundEnvironment env) {
  17. System.out.println("Processor (around) running");
  18. // Discover anything marked with @SuppressWarnings
  19. for (Element element: env.getElementsAnnotatedWith(SuppressWarnings.class)) {
  20. if (element.getKind() == ElementKind.METHOD) {
  21. // For any methods we find, create an aspect:
  22. String methodName = element.getSimpleName().toString();
  23. String aspectText =
  24. "public aspect AroundAdvise_"+methodName+" {\n"+
  25. " void around(): execution(* "+methodName+"(..)) {\n"+
  26. " System.out.println(\"Around advice on "+methodName+" running\");\n"+
  27. " }\n"+
  28. "}\n";
  29. try {
  30. JavaFileObject file = filer.createSourceFile("AroundAdvise_"+methodName, element);
  31. file.openWriter().append(aspectText).close();
  32. System.out.println("Generated aspect with around advice to advise "+element.getSimpleName());
  33. } catch (IOException ioe) {
  34. // already creates message can appear if processor runs more than once
  35. if (!ioe.getMessage().contains("already created")) {
  36. ioe.printStackTrace();
  37. }
  38. }
  39. }
  40. }
  41. return false;
  42. }
  43. }