Я занимаюсь разработкой DSL и использую атрибут Xtext importURI
для импорта.В редакторе он работает нормально, но я не знаю, как запросить корневой элемент ресурса у importURI
s, которые являются просто строками (позже, в Acceleo).Каков наилучший способ сделать это?
PS Мой DSL разрешает только явный импорт.Также у меня есть 2 метамодели: первый корневой элемент Alg , а второй импортирует Alg (s) (корневой элемент - Root ).
справаТеперь у меня есть служба, которая «проходит» через все элементы и возвращает корневой элемент импортированных ресурсов.Я думаю, что нет необходимости проходить через все дерево только для того, чтобы найти что-то, что могло бы быть выведено из операторов импорта.
Итак, какой бы был List<Alg> getAlgs(Root root)
Java-метод для извлечения всех Alg корни?
Грамматика :
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})
/]