JudeのJavaソースコードの読み込み機能にて。
以下のようなふたつのアノテーションとそれを利用したクラスがあった場合。
- MyAnnotation1.java
package com.shin1ogawa; import java.lang.annotation.*; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) public @interface MyAnnotation1 { String value(); }
- MyAnnotation2.java
package com.shin1ogawa; public @interface MyAnnotation2 { MyAnnotation1 value() default @MyAnnotation1("string"); }
- MyClass.java
package com.shin1ogawa; public class MyClass { @MyAnnotation2 String field; @MyAnnotation2(@MyAnnotation1("aaa")) String field2; }
Parsing: /Users/shin1/Documents/workspace.shin1/judeTest/src/com/shin1ogawa/MyAnnotation2.java Failed to parse.m: Encountered "@" at line 4, column 39. Was expecting one of: "abstract" ... "break" ... "catch" ... "do" ... "enum" ... "final" ... "import" ... "int" ... "long" ... "native" ... "public" ... "short" ... "switch" ... "throws" ... "true" ... "while" ...... ... ... ... ... "..." ... "@" ... "<=" ... ">=" ... "!=" ... "||" ... Failed.
どうやら「MyAnnotation1 value() default @MyAnnotation1("string");」でひっかかっている模様。このパラメータのdefaultを設定しないようにすると問題なく解析してくれる。アノテーションのパラメータにアノテーションの型を使用し、なおかつdefault値を使用するとダメなよぅだ。
0 件のコメント:
コメントを投稿