aboutsummaryrefslogtreecommitdiffstats
path: root/tests/multiIncremental/ProcessorProject3/base/src/DemoProcessor2.java
blob: e55e665bc25be500cdcf9e777e1b92d6099039e6 (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= {"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;
	}
}