我正在开发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})
/]
答案 0 :(得分:0)
通常,importURI中的STRING应该是一个指向您要导入的资源的URI,这将使其元素可用于原始语法中的交叉引用。因此,我想说您只是缺少对Alg对象的交叉引用。