Я реализованы следующие правила в моем XText DSL:Validate пользовательский ввод
House:
'House' name=ID
description=STRING?
('height' height=DOUBLE heightUnit=UNIT)? &
('width' width=DOUBLE widthUnit=UNIT)? &
'end' 'House'
;
enum UNIT:
m = 'm' |
cm = 'cm'
;
Это позволяет мне определить следующее, используя редактор на основе этого DSL:
House MyHouse
"This is my house"
height 15.5 m
width 3000.2 cm
end MyHouse
Как может Я проверяю единицы, определенные пользователем? Например, высота и ширина должны иметь единицу m, и если пользователь определяет что-то другое (например, см), редактор должен показать ошибку.
Я проверил сайт this, в котором описывается, как создавать правила проверки, но где я должен их регистрировать, чтобы они могли работать по-настоящему?
UPDATE: Как описано в Ravens комментарий под свой пост, я использовал обратный инжиниринг и добавил correspondig пакет и класс, который теперь выглядит следующим образом:
package com.language.validation
import com.language.mylanguage.House
import org.eclipse.xtext.validation.Check
class MylanguageValidator {
@Check
def unitCheck(House house) {
val hWidth = house.width
if (hWidth != null) {
if (!hWidth.equals("m")) {
val errorMsg = "House width must be defined in m";
// error method undefined
}
}
}
}
Пакет класса находится внутри подключаемого проекта com.language.mylanguage
. Я пытаюсь проверить, если пользователь использовал м в качестве устройства. Если нет, должно появиться сообщение об ошибке. Метод error()
не определен. Нужно ли мне импортировать или расширять другой класс?
True!После добавления в рабочий процесс mwe2 класс создается автоматически, и я могу добавить к нему свои проверки. Большое спасибо! – John