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= {"*"})
- @SupportedSourceVersion(SourceVersion.RELEASE_6)
- public class DemoProcessor 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 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 Advise_"+methodName+" {\n"+
- " before(): execution(* "+methodName+"(..)) {\n"+
- " System.out.println(\""+methodName+" running\");\n"+
- " }\n"+
- "}\n";
- try {
- JavaFileObject file = filer.createSourceFile("Advise_"+methodName, element);
- file.openWriter().append(aspectText).close();
- System.out.println("Generated aspect 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 true;
- }
- }
|