如何在原始文件中获取Object的位置(#-线)?

时间:2013-08-22 00:14:36

标签: validation xtext

以下是我的语法规则:

Stmts: (stmts += Stmt ';')* ;
Stmt: Stmt1 | Stmt2 | Stmt3 ... ;

我想知道每个Stmt#是stmts中的#th stmt及其确切位置(原始文档中的#th行)。这样我可以在用户犯错时指出位置。

我覆盖验证器构造函数并存储HashMap <Stmt, Integer>以使每个Stmt#是stmts中的#th stmt(不确定这是否是正确的方法......)。但是我不知道如何获得他们的行号。

任何帮助?

2 个答案:

答案 0 :(得分:5)

给定一个EObject,您可以使用org.eclipse.xtext.nodemodel.util.NodeModelUtils.getNode(EObject)轻松获取源文件中的位置。

例如:

    INode node = NodeModelUtils.getNode(o);
    System.out.println(String.format("Node goes from line %s to line %s",node.getStartLine(), node.getEndLine()));

答案 1 :(得分:0)

为了指出错误,只需编写一个声明性验证器就更合适了 - 在这种情况下,你只需要给出Xtext有问题的EObject,并设法将其追溯到源代码。此外,在您的语言项目中生成验证器存根。

但是,如果您需要手动追溯节点,可以使用Injectable ILocationInFileProvider来帮助您。