Xtext - 暂时容忍无法解析的引用并使引用名称用户可读

Xtext - Temporarily tolerate unresolvable references and make the reference name user readable

假设我有一种语言可以对 Whosebug 的一部分进行建模。用户被保存在一个资源中,问题被保存在另一个资源中。

用户:

user fred : fred@foobar.com
user notfred : notfred@foobar.com

问题:

question 123 by fred message "smart question"
question 124 by notfred message "not so smart question"

现在,用户 "fred" 想要删除他的帐户,但这行不通,因为在将两种资源加载到我的 ResourceSet 后,我​​将得到一个非空的 Resource#getErrors()。

我可以通过从错误中过滤 XtextLinkingDiagnostic 来解决这个问题,但阅读 "smart question" 的其他用户仍然无法判断它是由一个叫 "fred" 的人询问的。信息仍然存在,例如,当我使用 LazyLinkingResource#setDiagnosticMessageProvider(...) 设置 LinkingDiagnosticMessageProvider 时,我可以访问它;然而,我现在能做的最好的事情是,向其他用户显示 "fred" 已被删除的验证错误,但他们不知道 "fred" 写了他们刚刚阅读的消息。知道这一点会对他们有很大帮助,因为每个人都知道 "fred" 会写出很好的问题,对吧?

长话短说,我有一个应用程序,用户可以在其中加载声明和定义文件。在极少数情况下,出现问题并且两个文件不完全匹配,这意味着定义中包含未在声明中声明的条目。但是,我知道 ~95% 的条目仍然匹配! 用户无法快速解决此问题,但他们可能很乐意只编辑 95% 的定义,他们仍然需要能够阅读未经编辑的 5% 声明的名称!

我目前没有使用 Xtext 的任何 UI 部分来编辑定义,而是使用 table 形式的自定义 UI。缺少声明的当前状态是除了值列之外的所有内容都是空的。参考 ID 将在另一列中,知道此 ID 将对用户有很大帮助!有没有一种干净的方法可以实现这一目标?

看看 'Node Model' 例如org.eclipse.xtext.nodemodel.util.NodeModelUtils.findNodesForFeature(EObject, EStructuralFeature) 允许您访问文件中写入的文本