Diigu Plugin ハマり解消。

昨日のエントリは、僕の誤解が色々あったという事が判明。


static でないインナークラスのコンストラクタは、その外側のクラスへの参照が、
暗黙的に第一引数となる為、
コード上に記述されている引数だけを指定しても、
Javassistは、コンストラクタオブジェクトへの参照を返してくれません。


interfaceに定義されたインナークラスや、static なインナークラスのコンストラクタは、
暗黙的な外側のクラスへの参照が引数として定義されないので、
コード上に記述されている引数だけを指定すれば、
Javassistは、コンストラクタオブジェクトへの参照を返してくれます。


Javaのクラスファイルの構造を知っている人からすれば、
もしかしたら、アタリマエの事なのかもしれませんが、
少なくとも、僕は知りませんでした。情け無い事に。
そして、この仕様は、ちょっと分りずらいんじゃないかな〜とか。


少なくとも、Pluginでは、まぁ、既に実装できてしまっているので、
アレですが、BeanDescから、コンストラクタの引数名を取る所では、
将来に渡ってハマる人が、存在すると思います。
そもそも、BeanDescから、コンストラクタの引数名を取りたいと思う人が、
どの程度存在するかは、謎極まりないですが…。
しかも、引数の型を指定して、コンストラクタの引数名が欲しい人って、どの位いるのか…。*1
しかも、static でないインナークラスの引数名を…。


考えられる対応策は二つ。

  • BeanDescのJavaDocに、注意事項として書いておく。
  • BeanDescに、トリックを仕込む。

ハテサテ…。どうですか?id:koichikさん?

*1:ほぼ全く、と言うかゼロに近い、もしくは、欲しくなるのは将来の自分だけ?みたいな…