●JSR 308 Annotations on Java Types

2009年2月27日公開の分です。
http://groups.csail.mit.edu/pag/javari/java-annotation-design.pdf

まず、クラスファイルのアノテーションの構造体が拡張されます。
同様にローカル変数も構造体拡張がほどこされます。
その他、戻り値の型、変数、クラス、メソッドに参照情報が追加拡張されます。
それら参照情報を利用しコンパイル時にエラー・警告が出力されます。


■使用例

@DefaultQualifier("NonNull") //@クラス全体に@NonNullを適用
class DAG {

    Set<Edge> edges; //@NonNullを付加されたことと同じ効果 “@NonNull Set<@NonNull Edge> edges;”

    // ...

    List<Vertex> getNeighbors(@Interned @Readonly Vertex v) @Readonly { //@Readonly 読み取り専用、つまり変更不可
        List<Vertex> neighbors = new LinkedList<Vertex>();
        for (Edge e : edges)
            if (e.from() == v) //@Internedが付加されていない場合は”equals”を使えと警告がでる。
                neighbors.add(e.to());
        return neighbors;
   }
}