2012-04-09 46 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个教程中没有提到