我需要构建一个包含交叉引用的语法,它可能无效,即指向一个不存在的目标。包含此类引用的文件不应产生错误,而应仅产生警告。生成器将像处理特殊情况一样处理它。
如何使用XText执行此操作?
答案 0 :(得分:5)
无法在EMF中为不存在的目标创建有效的交叉引用。
我建议使用EAttributes代替EReferences:
答案 1 :(得分:1)
在创建DSL时,我也遇到了这个问题,为转换pahse的非翻译语言提供变量的解码。这个方法有效,但问问自己,你是否真的想要那些讨厌的可能引用。
您可以在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为null。特别是名称已丢失,您无法通过CyclicLinkingException
进行设置。但是您可以创建一个直接设置名称的新方法。
请注意,虚拟对象将具有您在语法中输入的类型。如果它的摘要你很容易检查巫婆参考没有联系。