Как использовать модель JVM с выводом xtext вне проекта xtext?

В разделе Вывод модели JVM документации Xtext (http://www.eclipse.org/Xtext/documentation.html#_17) он начинается со слов: «Во многих случаях вам понадобится ваши концепции DSL будут использоваться в качестве элементов Java. Например, Entity станет классом Java и должен использоваться как таковой ".

В приведенном выше примере, как я могу использовать сгенерированный класс Entity вне xbase, то есть в реальном Java-коде в проекте, отличном от проекта xtext?

По сути, я спрашиваю, могут ли классы Java, созданные мной с помощью модели Inferrer, действительно использоваться как реальные классы Java, которые могут вызывать свои методы и поля, доступные из кода Java, в совершенно другом проекте, и если да, то как это можно сделать? быть сделано?

Изучение документации заставило меня опасаться, что сгенерированные «классы Java» являются только типами Xbase, только ссылками в контексте xtext и, следовательно, не являются настоящими классами Java ...


person Marcus Mathioudakis    schedule 29.06.2012    source источник


Ответы (1)


Компилятор Xbase может компилировать все выражения Xbase в простой код Java, который можно использовать везде, где доступны коды Java.

Если вы добавляете в язык свои собственные элементы, вам необходимо расширить генератор, чтобы он также поддерживал эти элементы - по этой причине вы определяете свой собственный JVMModelInferrer.

Затем базовый компилятор Xtext выполняет JVMModelInferrer, вычисляет модель JVM, которая может (или не может) содержать выражения Xbase; затем эта модель JVM может быть сгенерирована в Java-компилируемый (таким образом, Java-повторно используемый) код.

Если вы хотите протестировать эту функциональность, просто сгенерируйте пример модели домена Xtext (доступный в мастерах New ... в категории Xtext / Примеры) и оцените результаты: когда вы редактируете модель своей предметной области, Xtext автоматически генерирует пригодный для использования код Java. (если установлены необходимые зависимости).

person Zoltán Ujhelyi    schedule 29.06.2012
comment
Спасибо за ответ. Что вы имеете в виду, когда автоматически генерируете пригодный для использования Java-код, если установлены необходимые зависимости? Какие зависимости? Вы предлагаете, чтобы он генерировал код без использования generator.xtend (а просто с использованием JVMModelInferrer), и если да, то где будет сгенерирован этот код? - person Marcus Mathioudakis; 02.07.2012
comment
Вам нужно выполнить минимальную настройку, поскольку Xbase можно использовать только как язык выражений, поэтому классы не настраиваются. Единственное, что вам нужно сделать, это определить, какие классы вашей модели представляют класс или метод в сгенерированном коде - тело метода может быть создано из выражений Xbase. Подробнее см. eclipse.org/Xtext/documentation.html##_8. . - person Zoltán Ujhelyi; 02.07.2012
comment
Большое спасибо за ваш ответ. хотя я видел этот подход, я не знал, что он также генерирует код для папки src-gen. Поэтому все, что мне нужно сделать, это загрузить классы из этой папки. - person Marcus Mathioudakis; 02.07.2012