首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何配置Xtext mwe.Reader以填充槽中的根元素

如何配置Xtext mwe.Reader以填充槽中的根元素
EN

Stack Overflow用户
提问于 2011-10-12 09:02:44
回答 4查看 630关注 0票数 1

我在使用XText2.0和MWE 1和XPand,但我想MWE 2和XTend的问题完全一样。

我的Xtext语法看起来如下(节选):

代码语言:javascript
复制
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定义时(节选):

代码语言:javascript
复制
<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 。所以我试着用

代码语言:javascript
复制
<load slot='formatterDefs' type='FormatterDef'/>

代码语言:javascript
复制
<expand value="templates::Main::main FOREACH model"/>

而不是。

但我收到了这样的警告:

org.eclipse.xtext.mwe.SlotEntry -无法找到任何类型为'Model‘->槽’模型‘的导出元素是空的。

该插槽包含一个空列表。

因此,我的问题是:Model 需要做什么,才能将根放到模板中?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-10-19 17:41:30

我的意思是

代码语言:javascript
复制
public class MyDslNameProvider extends DefaultDeclarativeQualifiedNameProvider {

    QualifiedName qualifiedName(Model m) {
        return QualifiedName.create(m.eResource().getURI().toString());
    }
}

public class MyDslRuntimeModule extends
                          org.xtext.example.mydsl.AbstractMyDslRuntimeModule {

    @Override
    public Class<? extends IQualifiedNameProvider> bindIQualifiedNameProvider() {
        return MyDslNameProvider.class;
    }   
}
票数 1
EN

Stack Overflow用户

发布于 2011-10-18 19:19:15

您可以自定义IQualifiedNameProvider以给模型命名。

~克里斯蒂安

票数 1
EN

Stack Overflow用户

发布于 2011-10-23 17:06:15

最好的方法可能是在规则开始时插入文本{Model},以确保创建。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7737617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档