Xtext отключить проверку проверки для конкретного продукта

У меня есть два продукта. Например, A и B. В продукте A мне нужно включить одну проверку, которая присутствует в файле AValidator.xtend, а продукт B зависит от A, поэтому, когда я запускаю продукт B, эта проверка должна отключить предупреждение.

AValidator.xtend:

@Check
def validateElement(Element e)
{
    warning('''Element «e.name» missing in files.''', e,         package.Literals.NAMED__NAME)
}

Такая же проверка не должна работать для BProduct.

Есть ли какая-либо функция переопределения может сделать для них?

Спасибо заранее.

2 ответа

Решение

Есть два способа решить это:

  • Вы можете добавить системное свойство (возможно, boolean флаг), который включает эту функцию. В INI-файле A, вы включите эту опцию. В B вы опускаете это.

  • Вы можете разделить плагин на библиотеку, а затем два плагина, которые вы используете в продуктах.

Разделение плагина работает так:

Вам нужно создать новый плагин и скопировать в него весь общий код. Он также может содержать код проверки, который одинаков для обоих продуктов. Дайте код подтверждения имени SharedValidator

В этом плагине нужно переименовать DslRuntimeModule (Dsl это имя вашего грамматика, оно расширяет AbstractDslRuntimeModule который содержит привязку для проверки). Переименуйте его в SharedDslRuntimeModule,

Затем вы создаете плагин для продукта А. Он содержит конкретную проверку. Этот класс должен быть расширен SharedValidator,

Вам также необходимо создать привязку, которая расширяет SharedDslRuntimeModule и поэтому вы можете связать новый класс валидатора.

Это грубый набросок. Вам придется скопировать / изменить несколько других файлов (например, DslStandaloneSetup и plugin.xml), но эти изменения должны стать очевидными, когда вы исправите ошибки компиляции.

... Может быть, флаг проще.

Решением этой проблемы является создание точки расширения.

Я создал одну точку расширения в плагине AProduct validator с именем интерфейса IProdcutEnabled одним методом.

И добавил эту точку расширения в плагин валидатора BProduct.

Затем AProduct validator class,Validation i проверил, используется ли точка расширения каким-либо продуктом или нет. Если он используется, не показывать предупреждение.

Другие вопросы по тегам