1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- import java.io.*;
- import javax.tools.*;
- import java.util.*;
- import javax.annotation.processing.*;
- import javax.lang.model.*;
- import javax.lang.model.element.*;
-
- @SupportedAnnotationTypes(value= {"java.lang.SuppressWarnings"})
- @SupportedSourceVersion(SourceVersion.RELEASE_6)
- public class DemoProcessor2 extends AbstractProcessor {
-
- private Filer filer;
-
- @Override
- public void init(ProcessingEnvironment env) {
- filer = env.getFiler();
- }
-
- @Override
- public boolean process(Set elements, RoundEnvironment env) {
- System.out.println("Processor (around) running");
- // Discover anything marked with @SuppressWarnings
- for (Element element: env.getElementsAnnotatedWith(SuppressWarnings.class)) {
- if (element.getKind() == ElementKind.METHOD) {
- // For any methods we find, create an aspect:
- String methodName = element.getSimpleName().toString();
- String aspectText =
- "public aspect AroundAdvise_"+methodName+" {\n"+
- " void around(): execution(* "+methodName+"(..)) {\n"+
- " System.out.println(\"Around advice on "+methodName+" running\");\n"+
- " }\n"+
- "}\n";
- try {
- JavaFileObject file = filer.createSourceFile("AroundAdvise_"+methodName, element);
- file.openWriter().append(aspectText).close();
- System.out.println("Generated aspect with around advice to advise "+element.getSimpleName());
- } catch (IOException ioe) {
- // already creates message can appear if processor runs more than once
- if (!ioe.getMessage().contains("already created")) {
- ioe.printStackTrace();
- }
- }
- }
- }
- return false;
- }
- }
|