У меня есть DSL, который выглядит следующим образом:Groovy DSL получения анонимной Строка заданий
aMethod {
"a name"
"another name"
"and a third name"
}
Моя проблема в том, что я не могу получить доступ к трем строку, так как вызов закрытия возвращает только последнее утверждение. Я попытался переопределить конструктор String (символ [] значение), которое вызывается, когда происходит анонимный Стринг-оператор:
def original
// primitive way to get the String(char[])-constructor
String.class.constructors.each {
if(it.toString() == "public java.lang.String(char[])") {
original = it
}
}
// overriding the constructor
String.metaClass.constructor = { char[] value ->
def instance = original.newInstance(value)
// ... do some further stuff with the instance ...
println "Created ${instance}"
instance
}
// teststring to call String(char[] value)
"teststring"
К сожалению, это не сработало, и я все равно думал, что это довольно сложно.
я сомневаюсь, что это работает без какого-либо НРХА. Можете ли вы изменить DSL? Передача строки в качестве аргумента вызову метода может решить эту проблему или не рассматривать их как строку, а как чистый код: 'aMethod {a name}' – Will
+1 Я думаю, вам понадобится ast –
Я попробовал решение с чистым кодом, но в закрытии я также разрешаю вызовы методов с String-params, например: aMethod {forView (другое имя)}. этот шаблон не допускается, я думаю, и я не хотел его смешивать. Nevermind, я думал, что существует очевидное решение, например, обертывание каждого оператора замыкания методом – user3060729