Scripting IDE for DSL awareness

http://www.jetbrains.net/confluence/display/GRVY/Scripting+IDE+for+DSL+awareness


IntelliJ, SUGEEEEEEEEEE!!!!!


何がスゴいかって言うと,GroovyDSLと呼ばれるスクリプトIntelliJに読み込ませることで,特定のDSLやダイナミックなメソッドやプロパティを,IntelliJに把握させることができるんだって。つまり,コード補完やら型推論なんかができるようになるってこと。あ,そうそう。こっちも参照してね。
Use GroovyDSL in IntelliJ IDEA Community Edition - Messages from mrhaki


冒頭のリンク先にあった例を取ると。下記のようなDayCounter.groovyってスクリプトがあるとする。

Integer.metaClass.getDaysFromNow = { ->
  Calendar today = Calendar.instance
  today.add(Calendar.DAY_OF_MONTH, delegate)
  today.time
}

println(5.daysFromNow)


Integer型のdaysFromNow()メソッドは,metaClassで拡張したメソッドなので,Integer型だと思っているIntelliJのコード補完には出てこない。
そこで,GroovyDSL scriptというのを作る。仮にファイル名を,TestScript.gdslとしよう。

def ctx = context(ctype: "java.lang.Integer",
                  scope: scriptScope(name: "DayCounter.groovy"))

contributor(ctx) {
  property name: "daysFromNow", type: "Calendar"
}


そうすると,あら不思議。Integer型の候補に,daysFromNow()が。ちゃんと,型もCalendar型になっとる。


大事な事だからもう一度言います。

                   ∧∧∩
                   ( ゚∀゚ )/
             ハ_ハ   ⊂   ノ    ハ_ハ
           ('(゚∀゚ ∩   (つ ノ   ∩ ゚∀゚)')
       ハ_ハ   ヽ  〈    (ノ    〉  /     ハ_ハ
     ('(゚∀゚∩   ヽヽ_)        (_ノ ノ    .∩ ゚∀゚)')
     O,_  〈                      〉  ,_O
       `ヽ_)                     (_/ ´
   ハ_ハ          IntelliJ, SUGEEEEE!!!!!!        ハ_ハ
⊂(゚∀゚⊂⌒`⊃                       ⊂´⌒⊃゚∀゚)⊃