-黒魔術

http://d.hatena.ne.jp/ashigeru/20070823/1187875432
やはり、Irenkaクエリはやや黒魔術なのですな。昨日きしださんに見せた時、クエリで細工するやりかたを見せると彼は天才入っちゃってるから瞬時に意味を理解してくれたけど、それでも怪訝な顔をしていた。スニペットはその黒魔術の最たるものに進化する危険があります。Jackpotは基本的に黒魔術系なアーキテクチャに落ちいりやすいので、アレをパクるのはまだ危険だと思う。百歩譲って究極的にはそこを極めるのがゴールだとしても、まだ時代がついてこれない。だからたぶん、Jackpotはその存在価値がしばらく理解されないし、しばらく普及しないと思う。そしてIrenkaの危険も同じだ。

/**
 * @when zero = 0 // intリテラルをパラメータドライブ
 */
public void hack(Messager messager, CtLiteral<Integer> zero,
    CtNewInstance<? extends ArrayList<?>> listConstructor) {
  List<CtExpression<?>> args = listConstructor.getArguments();
  if(args.size() == 0) {
    messager.warn("引数がゼロ個はダメです.");
  } else if(zero.equals(args.get(0))) {
    messager.warn("初期値:0はダメです.");
  }
}

まずはこのぐらい。なんとかこのぐらいなら白だと思ってもらえる。。。かなぁ。パラメータドライブも時代が早くて今は理解してもらえないかも。DIの新しい形だと思うのだけどね。そうなるとここにLiteralFactoryを持ってくればいい。きしださんならパラメータドライブのやり方を見て、説明せずともJavaにメソッドリテラルが無いことへの施策であると直結させてきてくれたけど、普通はガミラス語にしか聞こえないと思う。本当はメソッドパラメータに「CtNewInstance< ? extends ArrayList< ? > >」を持ってくる時点でやっちまってるんだが、これは普通には気がつかずにスルーしてもらえるかも。何よりJavaエディタ上で”型に堅い”のでこのラインなら白だとしよう。もうどうにもならねーから。スニペットに走る前に、HackパラメータのDOMジェネリックス型にextendsとsuperとの型引数動作をきちんと実装したほうがいいな。


Thanx:お題はこちらから
http://d.hatena.ne.jp/masanobuimai/20070822#1187763253