アノテーションによる DbC

こちらは、探せばたぶん誰かが既にやっている気もするのですが、引数チェック等をアノテーションでやってしまえないかなということです。

メソッドの引数が null じゃないことを検査するコードって頻繁に書いていると思いませんか? null 以外でも、特定の範囲内に収まっているかどうかをチェックするコードとかも。
下みたいな感じのです。

public void func(Rectangle rect, int x) {
  if (rect==null)
    throw new IllegalArgumentException("Argument rect is null.");
  if (x<0)
    throw new IllegalArgumentException("Argument x is less than zero.");
   :
   :
}

引数チェックを行なうことで、以降のコードにおいて null では無いことや、特定の範囲内に存在していることを前提とすることができるため、コードをよりシンプルに記述することが可能になります。*1

でも、引数チェックのコードって、それ自体は行ないたい処理の本質ではないので、メソッド本体から排除したいと思うことがあるんですよね。ただし、引数チェックによって、引数の値が保証されているという意図までをコード上から排除してしまっては駄目なんですが。
そこで、アノテーションによって、引数の値に対する制約を明示的に記述し、アノテーションコンパイラ等によりバイトコードレベルで、自動的に引数チェックのコードが追加されないかなと。*2

アスペクトを使用すれば、メソッド本体に手を加えることなく、制約を追加することは可能だと思います。しかし、それではソースコード上に埋め込んでおきたい意図までもメソッド上から除去されてしまうので( ;´Д`)いやぁぁぁぁぁー!です。
そこで、アノテーションによって制約を明示し、アスペクトによってその制約を有効にするという手法が取れるのではないかと。

AspectJ5 からアノテーションを目印にアスペクトを織り込むことが可能になったと思うので、DbC アノテーション/アスペクトがあればよいのかなと。
#どうすれば見やすい記述となるのかが悩みますね

追伸
あったぽい。
http://d.hatena.ne.jp/torutk/20060417#p1 さん経由 http://www-128.ibm.com/developerworks/java/library/j-aopwork17.html

*1:余計な心配の種が無くせるという感じです

*2:これって多分、 DbC における 「前提条件」 ?