Как показать ошибку в 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 что происходит позже в документе). Есть ли какой-то стандартный валидатор для таких сценариев? Если нет, то как лучше всего решить эту проблему?

Заранее спасибо!

0

Решение

Не существует стандартного валидатора для прямых ссылок. Вам нужно будет определить один из них самостоятельно, основываясь на значениях ваших целей перекрестных ссылок. Введите ILocationInFileProvider в свой валидатор, чтобы получить регион ссылочного экземпляра и сравнить его с регионом ссылочного владельца. Это поможет обнаружить прямые ссылки.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]