samples/livedb/src/org/apidesign/livedb/impl/LiveDBProcessor.java
author Jaroslav Tulach <jtulach@netbeans.org>
Tue, 01 Jun 2010 12:08:47 +0200
changeset 355 d1e7424dc988
child 357 837370f791ba
permissions -rw-r--r--
Example of Annotation Processor that generates a db access class
     1 /*
     2  * To change this template, choose Tools | Templates
     3  * and open the template in the editor.
     4  */
     5 
     6 package org.apidesign.livedb.impl;
     7 
     8 import java.io.IOException;
     9 import java.io.Writer;
    10 import java.util.Set;
    11 import javax.annotation.processing.AbstractProcessor;
    12 import javax.annotation.processing.Processor;
    13 import javax.annotation.processing.RoundEnvironment;
    14 import javax.annotation.processing.SupportedAnnotationTypes;
    15 import javax.annotation.processing.SupportedSourceVersion;
    16 import javax.lang.model.SourceVersion;
    17 import javax.lang.model.element.Element;
    18 import javax.lang.model.element.PackageElement;
    19 import javax.lang.model.element.TypeElement;
    20 import javax.tools.JavaFileObject;
    21 import org.apidesign.livedb.LiveDB;
    22 import org.openide.util.lookup.ServiceProvider;
    23 
    24 /**
    25  *
    26  * @author Jaroslav Tulach <jtulach@netbeans.org>
    27  */
    28 @SupportedAnnotationTypes("org.apidesign.livedb.LiveDB")
    29 @SupportedSourceVersion(SourceVersion.RELEASE_6)
    30 @ServiceProvider(service=Processor.class)
    31 public class LiveDBProcessor extends AbstractProcessor {
    32     @Override
    33     public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
    34         for (Element e : roundEnv.getElementsAnnotatedWith(LiveDB.class)) {
    35             LiveDB db = e.getAnnotation(LiveDB.class);
    36             PackageElement pe = (PackageElement)e;
    37             String clsName = pe.getQualifiedName().toString() + "." + db.classname();
    38             try {
    39                 JavaFileObject src = processingEnv.getFiler().createSourceFile(clsName, pe);
    40                 Writer w = src.openWriter();
    41                 w.append("package " + pe.getQualifiedName() + ";\n");
    42                 w.append("class " + db.classname() + " {\n");
    43                 w.append("  public String " + db.field() + ";\n");
    44                 w.append("}");
    45                 w.close();
    46             } catch (IOException ex) {
    47                 throw new IllegalStateException(ex);
    48             }
    49         }
    50         return true;
    51     }
    52 
    53 }