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!!!!!! ハ_ハ ⊂(゚∀゚⊂⌒`⊃ ⊂´⌒⊃゚∀゚)⊃