2016-10-13 16 views
0

私は、アブストラクトプロセッサを使用してカスタム注釈と注釈プロセッサを作成しました。これは、コンパイルの前にアノテーション処理を行いたいということです。 カスタムアノテーションとプロセッサをJarとしてエクスポートし、単純なJavaテストプログラムで使用しようとしました。 コンパイル時に私のJavaプロセッサクラスが見つかりましたが、何とか私はコンソール上で期待しているo/pを得ていないと確信しています。 以下は私のプロセッサー内のプロセスメソッドのコードです。カスタム注釈プロセッサ - Java

また、意図的に@SupportedSourceVersion(SourceVersion.RELEASE_6)を使用していますので、テストクラスを実行するときに注釈プロセッサーが見つかることを確認するバージョン警告が表示されます。

ここには私が作成したパッケージ化されたJarも入っている私のフルプロジェクトのGitHub linkがあります。以下は

public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) { 
    // TODO Auto-generated method stub 

    processingEnv.getMessager().printMessage(Kind.NOTE, "Hello compile time message"); 

    for (Element elem : roundEnv.getElementsAnnotatedWith(Contract.class)) { 
     if(elem.getKind() != ElementKind.METHOD) 
     { 
      processingEnv.getMessager().printMessage(Kind.NOTE, "Error"); 
      return true; 
     } 

     System.out.println("Hello ... Inside for "); 
     Contract contract = elem.getAnnotation(Contract.class); 
     String message = "annotation found in " + elem.getSimpleName() 
         + " with complexity " + contract.pre_cond(); 
     processingEnv.getMessager().printMessage(Kind.NOTE, message); 
    } 
    return true; // no further processing of this annotation type 
} 

私はjavac -cp newcontractlib.jar AnnotationTest.javaコマンドを使用して上記のテストクラスをコンパイルしていると私はちょうど私のプロセスメソッドからバージョンの警告なしメッセージを取得

import annotations.Contract; 

public class AnnotationTest { 


public AnnotationTest() 
{ 
    super(); 
} 

@Contract(pre_cond = { "var > 0" }) 
public static void testMethod(int var) 
{ 
    System.out.println("hello1"); 
} 

public static void main(String args[]) 
{ 
    testMethod(1); 
    System.out.println("hello"); 
} 

、私が使用していたテストクラスです。

答えて

1

javacをどのように起動していますか?それはMaven経由でしょうか?私はあなたが種類の診断を見るためにデバッグログを有効にする必要があると思います(-XをあなたのMaven呼び出しに追加する)。

また、あなたのプロセッサがで蹴るかどうかを確認するために、コンパイラオプション-XprintProcessorInfo-XprintRoundsを使用することができます。

関連する問題