Я пытаюсь сделать самый простой пример, который я могу придумать, для использования Xbase и JvmModelInferrer, а не для написания генератора кода. Я сократил учебник по языку JVM, но не могу получить правильный код Java из XExpression (или XBlockExpression). Я просмотрел такие ответы, как: -
Как получить тело метода JvmModelInferrer из XExpression и добавить шаблон код
Конкретная ошибка, которую я получаю в настоящее время, заключается в том, что для такого выражения, как 2 + 2, код, который я генерирую: -
return 2./* name is null */;
Моя грамматика: -
grammar org.xtext.example.mydsl.MyDsl with org.eclipse.xtext.xbase.Xbase
generate myDsl "http://www.xtext.org/example/mydsl/MyDsl"
Model:
functions+=Function*
;
Function:
'function' name=ID 'body' exp=XBlockExpression
;
и мой JvmModelInferrer: -
def dispatch void infer(Model element, IJvmDeclaredTypeAcceptor acceptor, boolean isPreIndexingPhase) {
acceptor.accept(element.toClass("my.company.Functions")) [
for (function : element.functions) {
members += function.toMethod(function.name, typeRef(Object)) [
body = function.exp
]
}
]
}
Для ввода: -
function TwoPlusTwo body {2+2}
Сгенерированный код: -
package my.company;
public class Functions {
public java.lang.Object TwoPlusTwo() {
return 2./* name is null */;
}
}
Я делаю какую-то совершенно основную ошибку или имею какое-то фундаментальное непонимание?
Я использую Windows 10, Eclipse 2019-12, Xtext 2.20.0, Coretto JVM.
Любая помощь будет оценена по достоинству.