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