0

根节点的默认标签文本是文件名。如果我创建了一个名为 的文件名test.mydsl,它将显示test为标签。但我要更改的是完整文件名test.mydsl

首先,我重写createRoot(IXtextDocument document)以获取一个IXtextDocument类型对象,但其中似乎不存在文件名信息。

第二次尝试只是附加.mydsl在原始文本的末尾。奇怪的是,如果我_text(Model model)在子类中覆盖

def _xtext(Model model) { return super._xtext(model) }

test将按预期给出原始标签。但是,如果我尝试用它附加一个字符串,它将失败

def _xtext(Model model) {
   val filename = super._xtext(model)
   // or cast it to a string
   val filename = super._xtext(model) as String

   return filename + ".mydsl"

的值filename始终是null_xtext()是不是其他东西的返回值String

4

2 回答 2

0

您可以使用 readOnly 操作来查询该资源的文档并询问该资源的 URI。像这样的东西可以解决问题:

myXtextDocument.readOnly(new IUnitOfWork<String, XtextResource>() {
  public String exec(XtextResource resource) {
    return resource.getURI().lastSegment();
  }
});
于 2013-08-15T19:58:57.783 回答
0

好的!这是我在大纲提供程序类中的 xtend 代码片段

override createRoot(IXtextDocument doc) {

  filename = doc.readOnly([res|
    return res.URI.lastSegment
  ]);               

  super.createRoot(doc)     
}

filename并返回类成员变量def _text(ROOT_NODE_TYPE)

于 2013-08-16T17:33:30.713 回答