Как показать ошибку в Xtext IDE, если на тип ссылаются до его объявления
У нас есть пользовательский DSL на основе Xtext и мы генерируем код C++ из документа, написанного в этом DSL, через Xtend. Вот простой пример DSL:
component CMP
{
type A
{
B member_1;
}
type B
{
string member_1;
}
}
В конце концов, заголовочный файл, содержащий структуры C++ (основанный на type
элементы) генерируется для каждого component
элемент. Теперь возникает следующая проблема: в моем DSL A
а также B
может быть правильно решена (хотя B
объявлен позже, чем A
). Но когда мы генерируем код C++ и делаем что-то вроде resource.contents.filter(TypeElement)
перебирать все type
элементы, они доставляются в том же порядке, как заявлено в документе. Это приводит к ошибкам компилятора для получающегося заголовка C++, потому что B
объявлен позже, чем A
и не может быть решен компилятором без предварительного объявления.
В таком случае я хочу показать ошибку в IDE (т.е. если существует ссылка на type
что происходит позже в документе). Есть ли какой-то стандартный валидатор для таких сценариев? Если нет, то как лучше всего решить эту проблему?
Заранее спасибо!
1 ответ
Не существует стандартного валидатора для прямых ссылок. Вам нужно будет определить один из них самостоятельно, основываясь на значениях ваших целей перекрестных ссылок. Введите ILocationInFileProvider
в свой валидатор, чтобы получить регион ссылочного экземпляра и сравнить его с регионом ссылочного владельца. Это поможет обнаружить прямые ссылки.