【发布时间】:2012-11-29 20:32:51
【问题描述】:
我需要构建一个包含交叉引用的语法,这可能是无效的,即指向一个不存在的目标。包含此类引用的文件不应产生错误,而只会产生警告。生成器会将其作为特殊情况处理。
如何使用 XText 做到这一点?
【问题讨论】:
标签: reference grammar xtext cross-reference
我需要构建一个包含交叉引用的语法,这可能是无效的,即指向一个不存在的目标。包含此类引用的文件不应产生错误,而只会产生警告。生成器会将其作为特殊情况处理。
如何使用 XText 做到这一点?
【问题讨论】:
标签: reference grammar xtext cross-reference
无法为 EMF 中不存在的目标创建有效的交叉引用。
我建议使用 EAttributes 而不是 EReferences:
【讨论】:
我在创建 DSL 时也遇到了这个问题,以便为转换阶段的非声明语言提供变量声明。这种方法有效,但问问自己是否真的想要那些讨厌的可能引用。
您可以仅在您的 UI 模块中删除自动生成的错误。为此,请提供ILinkingDiagnosticMessageProvider 并覆盖函数getUnresolvedProxyMessage:
class DSLLinkingDiagnosticMessageProvider extends LinkingDiagnosticMessageProvider {
override getUnresolvedProxyMessage(ILinkingDiagnosticContext context) {
if(context.context instanceof YourReference) {
// return null so the your error is left out
null
} else {
// use super implementation for others
super.getUnresolvedProxyMessage(context)
}
}
}
YourReference 的所有链接器错误都将被遗漏。但请注意,将有一个所有 fealds 为空的虚拟引用对象。特别是名称丢失了,由于CyclicLinkingException,您无法设置它。但是您可以创建一个直接设置名称的新方法。
请注意,虚拟对象将具有您在语法中输入的类型。如果它的摘要你可以很容易地检查女巫参考没有链接。
【讨论】: