我将 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
被 all 填满FormaterDef
,然后这个被用于模板,每个想法都很好。
但是我有一些模板需要模型根元素,Model
在语法中命名。所以我尝试使用
<load slot='formatterDefs' type='FormatterDef'/>
和
<expand value="templates::Main::main FOREACH model"/>
反而。
但后来我收到了这个警告:
org.eclipse.xtext.mwe.SlotEntry - 找不到任何“模型”类型的导出元素 -> 插槽“模型”为空。
并且该插槽包含一个空列表。
所以我的问题是:我需要做什么才能将根目录Model
放入我的模板中?