-2

谁能给我一个简单的java注释处理器的代码片段,当它的process方法被调用时,它只打印“foo”。我已经为此工作了 2 天,但我还没能走到那一步

这是我的代码:


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
    }
4

1 回答 1

2

我发现了答案

所以你未来需要什么:

  1. 带有注释处理器和任何提到的注释的 jar,这样您就不会遇到类路径问题
  2. META-INF/services/processor 文件中带有处理器类名称的文本文件。这也放在我的处理器所在的罐子里
  3. 使用 javac -processor 参数进行编译。这就是我最初使用的 3 或 4 个教程中没有提到的内容
于 2012-04-09T15:23:19.673 回答