我需要构建一个包含交叉引用的语法,该交叉引用可能无效,即指向不存在的目标。包含这种引用的文件不应该产生错误,而只会产生警告。发生器将作为一种特殊情况处理。XText:允许无效的交叉引用
我该如何使用XText做到这一点?
我需要构建一个包含交叉引用的语法,该交叉引用可能无效,即指向不存在的目标。包含这种引用的文件不应该产生错误,而只会产生警告。发生器将作为一种特殊情况处理。XText:允许无效的交叉引用
我该如何使用XText做到这一点?
无法在EMF中创建对现有目标的有效交叉引用。
我建议去与EAttributes代替EReferences:
我也遇到了这个问题,当创建一个DSL提供变量的过渡pahse非declerative语言的变量。这种方法的作品,但问问自己,如果你真的想要有那些讨厌的可能引用。
您可以将自动生成的错误放入您的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。 exspecialy的名称ist丢失,并且由于CyclicLinkingException
,您无法设置它。但是您可以创建一个直接设置名称的新方法。
请注意,虚拟对象将具有您在语法中输入的类型。如果它的摘要很容易检查女巫的参考是没有联系的。