Samples JDK
SillyProcessor.java
1 package com.freemindcafe.apt.sample1;
2 
3 import java.io.IOException;
4 import java.util.Set;
5 
6 import javax.annotation.processing.AbstractProcessor;
7 import javax.annotation.processing.Filer;
8 import javax.annotation.processing.Messager;
9 import javax.annotation.processing.ProcessingEnvironment;
10 import javax.annotation.processing.RoundEnvironment;
11 import javax.annotation.processing.SupportedAnnotationTypes;
12 import javax.annotation.processing.SupportedSourceVersion;
13 import javax.lang.model.SourceVersion;
14 import javax.lang.model.element.Element;
15 import javax.lang.model.element.TypeElement;
16 import javax.tools.Diagnostic.Kind;
17 import javax.tools.JavaFileObject;
18 
19 @SupportedAnnotationTypes(value= {"com.freemindcafe.apt.sample1.SillyMe"})
20 @SupportedSourceVersion(SourceVersion.RELEASE_6)
21 public class SillyProcessor extends AbstractProcessor {
22 
23  private Filer filer;
24  private Messager messager;
25 
26  @Override
27  public void init(ProcessingEnvironment env) {
28  filer = env.getFiler();
29  messager = env.getMessager();
30  }
31 
32  @Override
33  public boolean process(Set<? extends TypeElement> elements, RoundEnvironment env) {
34 
35  for (Element element : env.getElementsAnnotatedWith(SillyMe.class)){
36  //for (Element element : env.getRootElements()) {
37 
38  if (element.getSimpleName().toString().startsWith("Silly")) {
39  // We don't want generate new silly classes
40  // for auto-generated silly classes
41  continue;
42  }
43 
44  if (element.getSimpleName().toString().startsWith("TestSilly")) {
45  messager.printMessage(Kind.WARNING,
46  "This class name starts with a T!",
47  element);
48  }
49 
50  String sillyClassName = "Silly" + element.getSimpleName();
51  String sillyClassContent =
52  "package silly;\n"
53  + "public class " + sillyClassName + " {\n"
54  + " public String foobar;\n"
55  + "}";
56 
57  JavaFileObject file = null;
58 
59  try {
60  file = filer.createSourceFile(
61  "silly/" + sillyClassName,
62  element);
63  file.openWriter()
64  .append(sillyClassContent)
65  .close();
66  } catch (IOException e) {
67  e.printStackTrace();
68  }
69 
70  }
71 
72  return true;
73  }
74 }