如何从importURI查询根元素?

时间:2019-05-23 06:57:39

标签: xtext acceleo

我正在开发DSL,并且正在使用Xtext的importURI来处理导入。它在编辑器中可以正常工作,但是我不知道如何从importURI s中查询资源的根元素-它们只是字符串(后来在Acceleo中)。最好的方法是什么?

P.S。我的DSL只允许显式导入。我也有2个元模型:第一个的根元素是 Alg ,第二个的根元素是导入Alg(s)(根元素- Root )。

现在,我有一个“遍历”所有元素并返回导入资源根元素的服务。我认为没有必要遍历整个树,而只是找到可以从导入语句中推断出的东西。

那么,检索所有 Alg 根的List<Alg> getAlgs(Root root) java方法是什么?

语法

Root returns Root:
    {Root} (name = QualifiedName ":")?
    (importStatement += ImportStatement)*
    [...];

ImportStatement:
    'import' importURI=STRING;

[...]

Acceleo

[query public getAlgRoot(arg0 : Root) : Sequence(Alg)
    = invoke('org.example.tojava.services.AlgpRootService', 'getAlgs(org.example.mydsl.model.Root)', Sequence{arg0}) 
/]

1 个答案:

答案 0 :(得分:0)

通常,importURI中的STRING应该是一个指向您要导入的资源的URI,这将使其元素可用于原始语法中的交叉引用。因此,我想说您只是缺少对Alg对象的交叉引用。