Моя проблема выглядит следующим образом: я написал DSL в Groovy, и теперь я хочу, чтобы код завершался в IntelliJ.То, чего я хочу достичь, это что-то вроде этого:
foo("aa").is {
bar("bb").is {
foobar("cc")
}
}
Итак, я написал файл .gdsl
def globalContext = context(scope: scriptScope())
contributor(globalContext) {
method name: "foo", type: "A", params: [name:"java.lang.String"]
}
def aContext = context(ctype:"A")
contributor(aContext) {
method name: "is", type: "A", params: [closure:"groovy.lang.Closure"]
}
def bContext = context(ctype:"B")
contributor(bContext) {
method name: "is", type: "B", params: [closure:"groovy.lang.Closure"]
}
def closureContext = context(scope: closureScope())
contributor(closureContext, {
def call = enclosingCall("is")
if (call) {
def callingMethod = call.bind()
if ("A".equals(callingMethod?.returnType?.name)) {
method name: "bar", type: "B", params:
[name:"java.lang.String"]
}
else if ("B".equals(callingMethod?.returnType?.name)) {
method name: "foobar", type: "C", params:
[name:"java.lang.String"]
}
}
})
Кажется, все работает, пока я не завершу закрывающие скобки до bar.is
, когдавнезапно Intellij перестает понимать ключевое слово bar
.Не могли бы вы, пожалуйста, совет?