Я пытаюсь сделать простейший пример, который я могу использовать для использования Xbase и JvmModelInferrer, вместо написания генератора кода. Я сократил учебник по языку JVM, но не могу получить правильный Java код из XExpression (или XBlockExpression). Я смотрел на ответы, такие как: -
Как получить тело метода JvmModelInferrer из XExpression и добавить шаблонный код
Указанная c ошибка, которую я получаю в настоящее время, заключается в том, что для выражения типа 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 */;
}
}
Я делаю какую-то основную ошибку c или у меня есть некоторые фундаментальное недоразумение?
Я использую Windows 10, Eclipse 2019-12, Xtext 2.20.0, Coretto JVM
Любая помощь будет оценена.