Как ссылаться на ссылку на свойство вместо именованной - PullRequest
0 голосов
/ 01 мая 2019

Этот вопрос является продолжением / "Как добавить отдельный текст в списке xtext" .

У меня есть следующая грамматическая часть:

 Fixture:
                            name            = ID
    ('('                    abbreviation    = ID ')')?
    ':'                     type            = FixtureType 
    'startDmxChannel' '='   startDmxChannel = INT
    ';';

FixtureGroup:
                            name            = ID 
    ('('                    abbreviation    = ID ')')?
    ':'                     fixtures += [Fixture.abbreviation]*
    ';';

А у меня в экземпляре следующая часть:

Fixtures
{
    FrontRight1  (FR1) : FunPar startDmxChannel=1;
    FrontRight2  (FR2) : FunPar startDmxChannel=9;
    FrontRight3  (FR3) : FunPar startDmxChannel=17;
    FrontRight4  (FR4) : FunPar startDmxChannel=25;
}

FixtureGroups
{
    FrontRight: FrontRight1 FrontRight2 FrontRight3 FrontRight4;

Вместо этого я хотел бы использовать имена сокращений в последней строке:

    FrontRight: FR1 FR2 FR3 FR4;

Или, что еще лучше, сочетание имени или аббревиатуры, например:

    FrontRight: FrontRight1 FR2 FR3 FR4;

Как это сделать?

1 Ответ

1 голос
/ 01 мая 2019

Здесь задействованы 3 вещи

  • Для глобальных ссылок (между файлами): Настройка IDefaultResourceDescriptionStrategy (путем подкласса DefaultResourceDescriptionStrategy) позволяет индексировать элементы под несколькими именами и добавлять информацию в пользовательские данные, напримересли имя индекса является аббревиатурой
  • для локальных ссылок, то же самое можно сделать в org.eclipse.xtext.scoping.impl.ImportedNamespaceAwareLocalScopeProvider.internalGetAllDescriptions(Resource)
  • , затем вы можете адаптировать MyDslScopeProvider для фильтрации правильных ссылок.
  • если ссылки в любом случае являются локальными, вы можете сделать все в вашем MyDslScopeProvider
...