Я использую Xtext 2.0 с MWE 1 и XPand, но думаю, что проблема для MWE 2 и XTend точно такая же.
Моя грамматика Xtext выглядит следующим образом (отрывок):
grammer org.test.Test with org.eclipse.xtext.common.Terminals
generate test "http://www.test.org/test/Test
Model :
"COMMON STUFF"
"{"
(formatterDefs+=FormatterDef)*
"}"
...
FormatterDef : "Formatter" name=ID ":" formatter=STRING;
Когда я использую это определение mwe (отрывок):
<component class="org.eclipse.xtext.mwe.Reader" path="${project.src.directory}/xtext/model/" >
<register class="org.test.TestStandaloneSetup"/>
<load slot='formatterDefs' type='FormatterDef'/>
</component>
<component class="org.eclipse.xpand2.Generator">
<metaModel class="org.eclipse.xtend.typesystem.emf.EmfRegistryMetaModel"/>
<expand value="templates::Formatter::formatterTxt FOREACH formatterDefs"/>
</component>
Таким образом, слот formatterDefs
заполняется всеми FormaterDef
, а затем используется дляшаблон, и каждая мысль работает нормально.
Но у меня есть несколько шаблонов, для которых требуется корневой элемент модели, названный Model
в грамматике.Поэтому я попытался использовать
<load slot='formatterDefs' type='FormatterDef'/>
и
<expand value="templates::Main::main FOREACH model"/>
.
Но тогда я получаю это предупреждение:
org.eclipse.xtext.mwe.SlotEntry - Не удалось найти экспортируемый элемент типа «Модель» -> Слот «модель» пуст.
И слот содержитпустой список.
Итак, мой вопрос: что мне нужно сделать, чтобы получить root Model
в мои шаблоны?