●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; } }