Как сгенерировать Java-код для Xbase XExpression с помощью JvmModelInferrer?

Я пытаюсь сделать самый простой пример, который я могу придумать, для использования 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.

Любая помощь будет оценена по достоинству.


person guraaku    schedule 09.03.2020    source источник
comment
вы уверены, что ваш модельный проект является проектом Java и имеет xbase.lib в пути к классам   -  person Christian Dietrich    schedule 09.03.2020
comment
Это было! Я забыл добавить библиотеку Xtend в путь сборки.   -  person guraaku    schedule 09.03.2020


Ответы (1)


Как предложил Кристиан, в проект необходимо добавить правильные библиотеки. В учебнике «Пять шагов к языку JVM» говорится об этом, я просто забыл это сделать:

В новом верстаке создайте проект Java (Файл → Создать → Проект… → Проект Java). Xbase опирается на небольшую библиотеку времени выполнения на пути к классам. Чтобы добавить это, щелкните проект правой кнопкой мыши и выберите «Путь сборки Java» → «Библиотеки» → «Добавить библиотеку» и выберите «Расширить библиотеку».

person guraaku    schedule 09.03.2020