Как запросить корневой элемент из importURI? - PullRequest
0 голосов
/ 23 мая 2019

Я занимаюсь разработкой 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}) 
/]

1 Ответ

0 голосов
/ 23 мая 2019

Обычно STRING в importURI должен быть URI, который указывает на ресурс, который вы хотите импортировать, что делает его элементы доступными для перекрестных ссылок в вашей исходной грамматике. Поэтому я бы сказал, что вы просто упускаете перекрестную ссылку на объекты Alg.

...