(Xtext) Как изменить объем импортируемых ресурсов через importURI? - PullRequest
0 голосов
/ 23 мая 2019

У меня есть DSL, который позволяет явно импортировать ресурсы (через атрибут importURI). Все работает просто отлично, за исключением того факта, что я хотел бы ссылаться на импортированные элементы напрямую по их идентификатору (а не по полному имени).

Я не использую importedNamespace, потому что я ограничил GlobalScope только тем, что явно импортировано, и для каждого ресурса мне нужны все элементы (например, ModelName . *).

Итак, сейчас я могу ссылаться на импортированные элементы следующим образом: ModelName . OuterElement . InnerElement но я хотел бы иметь что-то вроде этого: OuterElement или InnerElement .

Конечно, общий контекст более сложный и немного другой, но я попытался упростить все вокруг этого вопроса. Поэтому, пожалуйста, обратитесь к следующей грамматике:

Model:
  name=ID ':'
  (include+=Include)?
  (outerElems+=OuterElement ';')*
  (uses+=Use ';')*;

Include:
  'import' importURI=STRING ;

OuterElement:
  'def' name=ID
  '(' (innerElements+=InnerElement (',' innerElements+=InnerElement)* )? ')' ;

InnerElement:
  name=ID;

Element:
    OuterElement | InnerElement;

Use:
  'use' use =[Element|FQN];

FQN:
    ID('.'ID)* ;

1 Ответ

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

если вы хотите ссылаться на элементы по их простому имени, вы должны связать

SimpleNameProvider

как IQualifiedNameProvider

public Class<? extends IQualifiedNameProvider> bindIQualifiedNameProvider() {
    return SimpleNameProvider.class;
}

соответственно

override bindIQualifiedNameProvider() {
    SimpleNameProvider
}
...