我有一个关于 xtext 的有效语法,并且正在开始验证代码。
为此,我在为我创建的验证器 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 extends EObject
,但不是EStructuralFeature
.
warning(String message, EStructuralFeature feature)
有许多其他原型warning
,但没有一个只需要 aString
和 a Eobject
。使用null
或从日志中提取的各种值eContainingFeature
会导致错误,并且有时会在正确的位置显示警告。搜索示例,我发现这些值通常来自名为Literals
or的类的静态字段***Package
,项目中生成的包含EStructuralFeature
s,但我不知道要使用哪一个,或者为什么我需要其中一个.
所以问题是:
如何在给定的 AST 元素上放置警告?