2012-04-09 65 views
-2

任何人都可以給我提供一個簡單的java註釋處理器的代碼片段,當它的處理方法被調用時它會打印「foo」。我在這已經工作了2天,我一直沒能走到這一步Java AnnotationProcessor源代碼

這裏是我的代碼:


public class ComplexityProcessor extends AbstractProcessor { 

    public ComplexityProcessor() { 
     super(); 
    } 

    @Override 
    public boolean process(Set annotations, 
          RoundEnvironment roundEnv) { 
     String message = "annotation found in "; 
     processingEnv.getMessager().printMessage(javax.tools.Diagnostic.Kind.NOTE, message); 

     try { 
      JavaFileObject jfo = processingEnv.getFiler().createSourceFile("Foo"); 
      BufferedWriter bw = new BufferedWriter(jfo.openWriter()); 
      bw.append("Bar!!!"); 
      bw.close(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     for (Element elem : roundEnv.getElementsAnnotatedWith(Complexity.class)) { 
      Complexity complexity = elem.getAnnotation(Complexity.class); 
      message = "annotation found in " + elem.getSimpleName() 
          + " with complexity " + complexity.value(); 
      processingEnv.getMessager().printMessage(javax.tools.Diagnostic.Kind.NOTE, message); 
      try { 
       JavaFileObject jfo = processingEnv.getFiler().createSourceFile("Foo"); 
       BufferedWriter bw = new BufferedWriter(jfo.openWriter()); 
       bw.append("Bar!!!"); 
       bw.close(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

     } 
     return true; // no further processing of this annotation type 
    } 
+1

你的代碼在哪裏? – Jeffrey 2012-04-09 14:33:07

+0

[堆棧溢出不是代碼編寫,教程或諮詢服務](http://meta.stackexchange.com/a/128553/172496) – 2012-04-09 14:39:34

+0

在這裏你可以找到[教程](http://www.javalobby。組織/ JAVA /論壇/ t17876.html)。 – dash1e 2012-04-09 14:40:21

回答

2

我已經發現了答案

所以你需要什麼對於未來:

  1. 與註解處理器一個罐子,任何提到的註解,讓您不會有類路徑問題
  2. META-INF/services/processor文件中的文本文件,其中包含處理器類的名稱。這也出現在上面的jar中,我的處理器是
  3. 使用javac -processor參數進行編譯。這就是我一直在尋找的東西,在我最初使用的3或4個教程中沒有提到