-2

プロセスメソッドが呼び出されたときに「foo」を出力するだけの単純なJavaアノテーションプロセッサのコードスニペットを誰かに提供してもらえますか。私はこれに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 に答える