У меня есть рабочая грамматика по xtext, и я начинаю проверку кода.Какие параметры следует использовать для AbstractDeclarativeValidator.warning и ошибки?
Для этого я добавил метод в validator xtext, созданный для меня.
Конечно, если выражение недействительно, я хочу дать предупреждение на данном узле AST.
Я попытался очевидное:
@Check
public void testCheck(Expression_Multiplication m){
if(!(m.getLeft() instanceof Expression_Number)){
warning("Multiplication should be on numbers.",m.getLeft());
}
if(!(m.getRight() instanceof Expression_Number)){
warning("Multiplication should be on numbers.",m.getRight());
}
}
без успеха, поскольку Expression_Number расширяет EObject
, но не является EStructuralFeature
.
warning(String message, EStructuralFeature feature)
Есть много других прототипов для warning
, но никто не берет весь String
и Eobject
. Используя null
или различные значения, извлеченные из eContainingFeature
, регистрирует ошибку и иногда показывает предупреждение в правильном месте. В поисках примеров я обнаружил, что значения часто исходили из полей статики класса с именем Literals
или ***Package
, тот, который был сгенерирован в проекте, содержит EStructuralFeature
, но я понятия не имею, какой из них использовать или зачем мне нужно один из них.
Так что вопрос:
Как я могу поместить предупреждение на данном AST элемент?
Хотя это не решение, которое я использовал, он работает, если вы готовы сохранить много состояния. –