2009年3月15日日曜日

Judeの不具合?

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;
}
これらをJudeの「Javaソースコードの読み込み」機能で読み込もうとするとJavaの解析中に以下のようなエラーが出てしまう。

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値を使用するとダメなよぅだ。

コメントを投稿