我需要构建一个包含交叉引用的语法,它可能是无效的,即指向一个不存在的目标。包含此类引用的文件不应产生错误,而只会产生警告。生成器会将其作为特殊情况处理。
我怎样才能用 XText 做到这一点?
我需要构建一个包含交叉引用的语法,它可能是无效的,即指向一个不存在的目标。包含此类引用的文件不应产生错误,而只会产生警告。生成器会将其作为特殊情况处理。
我怎样才能用 XText 做到这一点?
无法为 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
. 但是您可以创建一个直接设置名称的新方法。
请注意,虚拟对象将具有您在语法中输入的类型。如果它的摘要你可以很容易地检查女巫参考没有链接。