Diigu Plugin ハマり解消。
昨日のエントリは、僕の誤解が色々あったという事が判明。
static でないインナークラスのコンストラクタは、その外側のクラスへの参照が、
暗黙的に第一引数となる為、
コード上に記述されている引数だけを指定しても、
Javassistは、コンストラクタオブジェクトへの参照を返してくれません。
interfaceに定義されたインナークラスや、static なインナークラスのコンストラクタは、
暗黙的な外側のクラスへの参照が引数として定義されないので、
コード上に記述されている引数だけを指定すれば、
Javassistは、コンストラクタオブジェクトへの参照を返してくれます。
Javaのクラスファイルの構造を知っている人からすれば、
もしかしたら、アタリマエの事なのかもしれませんが、
少なくとも、僕は知りませんでした。情け無い事に。
そして、この仕様は、ちょっと分りずらいんじゃないかな〜とか。
少なくとも、Pluginでは、まぁ、既に実装できてしまっているので、
アレですが、BeanDescから、コンストラクタの引数名を取る所では、
将来に渡ってハマる人が、存在すると思います。
そもそも、BeanDescから、コンストラクタの引数名を取りたいと思う人が、
どの程度存在するかは、謎極まりないですが…。
しかも、引数の型を指定して、コンストラクタの引数名が欲しい人って、どの位いるのか…。*1
しかも、static でないインナークラスの引数名を…。
考えられる対応策は二つ。
- BeanDescのJavaDocに、注意事項として書いておく。
- BeanDescに、トリックを仕込む。
ハテサテ…。どうですか?id:koichikさん?
*1:ほぼ全く、と言うかゼロに近い、もしくは、欲しくなるのは将来の自分だけ?みたいな…