私は、アブストラクトプロセッサを使用してカスタム注釈と注釈プロセッサを作成しました。これは、コンパイルの前にアノテーション処理を行いたいということです。 カスタムアノテーションとプロセッサを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");
}
、私が使用していたテストクラスです。