我有一个关于 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 扩展
EObject
,但不是 EStructuralFeature
.warning(String message, EStructuralFeature feature)
warning
还有许多其他原型(prototype), 但没有一个只需要 String
和 Eobject
.使用 null
或从 eContainingFeature
中提取的各种值记录错误,有时会在正确的位置显示警告。搜索示例,我发现这些值通常来自名为 Literals
的类的静态字段。或 ***Package
,项目中生成的包含EStructuralFeature
s,但我不知道要使用哪一个,或者为什么我需要其中一个。所以问题是:
如何在给定的 AST 元素上放置警告?
最佳答案
EStructuralFeature 是您的 AST 的属性。您将找到一个生成的 EPackage 类,其中包含常量。
我想你的情况是这样的:
MyDslPackage.Literals.EXPRESSION_MULTIPLICATION__LEFT
和
MyDslPackage.Literals.EXPRESSION_MULTIPLICATION__RIGHT
关于xtext - AbstractDeclarativeValidator.warning 和 error 应该使用哪些参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17026243/