blob: 05ff201077129fd780f408949a96d27c3845ce6e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
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;
}
}
|