Перекрестная ссылка Xtext для всех файлов в проекте

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

Грамматика:

Model:
    statements+=(MessageDefinition | MessageUsage)*;
MessageDefinition:
    '[MESSAGE_DEF]' name=ID;
MessageUsage:
    '[MESSAGE_USAGE]' usage=[MessageDefinition];

File1.ex:

[MESSAGE_DEF] EXAMPLE_1
[MESSAGE_DEF] EXAMPLE_2
[MESSAGE_USAGE] EXAMPLE_1

File2.ex:

[MESSAGE_USAGE] EXAMPLE_2

В этом примере перекрестная ссылка из EXAMPLE_1 работает так, что «Открытое объявление» об использовании приводит меня к определению. Однако перекрестная ссылка на ПРИМЕР_2 не работает. Я думаю, что правила области действия по умолчанию не позволяют разным файлам обмениваться ссылками.

Что мне нужно добавить, чтобы все файлы в проекте имели одну и ту же глобальную область для перекрестных ссылок?

Дополнительная информация:

  • Параметр «Создавать автоматически» включен во время выполнения проекта.
  • Файл .project включает buildCommand для xtextBuilder и характер для xtextNature.
  • Я только пытаюсь использовать функцию перекрестных ссылок IDE, код не генерируется.
  • Все файлы в проекте среды выполнения находятся в одной папке.

Проект был создан с использованием «Xtext Project» в стандартном мастере, я только отредактировал грамматику из предварительно сгенерированного кода, все остальное соответствует значениям по умолчанию. Я думал, что мне нужно добавить какое-то настраиваемое поведение / правила области видимости для загрузки всех файлов в глобальную область, но я не уверен, как это должно быть сделано?


person Owen    schedule 20.11.2016    source источник
comment
Где вы указываете правила определения области действия / разрешения имен, которые позволяют Xtext знать, что идентификатор EXAMPLE_2 в file2 относится к определению EXAMPLE_2 в file1? В общем, языки имеют произвольные правила области видимости (например, C ++, 600 страниц справочного руководства частично посвящены этому). Грамматика НИЧЕГО не говорит вам о правилах области видимости.   -  person Ira Baxter    schedule 21.11.2016
comment
Ира Я понимаю вашу точку зрения и согласен. Я не изменял правила области действия по умолчанию для xtext. Я не понимаю, как настроить xtext так, чтобы каждое определение в каждом файле проекта автоматически находилось в одной и той же области.   -  person Owen    schedule 21.11.2016


Ответы (1)


он будет отлично работать с вашей грамматикой и областью видимости, если вы

  1. автоматическая сборка включена в вашем рабочем пространстве во время выполнения
  2. проект, который вы моделируете, имеет характер xtext и включен конструктор xtext (щелкните правой кнопкой мыши -> настроить -> ...)
  3. если это java-проект, файлы модели должны находиться в исходной папке или в пакете в исходной папке.
person Christian Dietrich    schedule 21.11.2016
comment
Спасибо за ваши предложения, но у меня все еще есть проблемы. Довольны пунктами 1 и 2, но не понимаете, что вы имеете в виду по пункту 3, не могли бы вы уточнить? Я добавил дополнительную информацию в свой исходный пост. - person Owen; 21.11.2016
comment
в каком проекте находятся File1.ex и File2.ex? было бы неплохо сделать скриншот. Если вы используете диалог открытия элемента модели Crtl / Cmd + Shift + F3, появляются ли ваши элементы там, если вы их ищете? - person Christian Dietrich; 22.11.2016
comment
Я создал проект «Общий› Проект ». Я создал новый исполняемый проект, чтобы подтвердить то, что я делал ранее, и создал эквивалентные файлы с тем же содержимым. Кажется, этого достаточно, чтобы проблема исчезла! Похоже, второй файл (File2.ex) упорно не собирал изменения грамматики. Переноса того же содержимого в новый проект кажется достаточно, чтобы он заработал. Странный! Спасибо за помощь. - person Owen; 22.11.2016