xtext - 如何从 importURI 中查询根元素?
问题描述
我正在开发一个 DSL,我正在使用 Xtext 的importURI
属性来处理导入。它在编辑器中工作正常,但我不知道如何从importURI
s 查询资源的根元素——它们只是字符串(稍后在 Acceleo 中)。最好的方法是什么?
PS My DSL 只允许显式导入。我也有 2 个元模型:第一个的根元素是Alg,第二个导入 Alg(s) (根元素 - Root)。
现在,我有一个“遍历”所有元素并返回导入资源的根元素的服务。我认为没有必要为了找到可以从 import 语句中推断出的东西而遍历整个树。
那么,检索所有Alg根的List<Alg> getAlgs(Root root)
java 方法是什么?
语法:
Root returns Root:
{Root} (name = QualifiedName ":")?
(importStatement += ImportStatement)*
[...];
ImportStatement:
'import' importURI=STRING;
[...]
加速:
[query public getAlgRoot(arg0 : Root) : Sequence(Alg)
= invoke('org.example.tojava.services.AlgpRootService', 'getAlgs(org.example.mydsl.model.Root)', Sequence{arg0})
/]
解决方案
通常 importURI 中的 STRING 应该是一个指向您希望导入的资源的 URI,这使得它的元素可以在您的原始语法中进行交叉引用。所以我想说你只是缺少对 Alg 对象的交叉引用。