【发布时间】:2014-08-19 18:36:23
【问题描述】:
使用 XText 2.6.2,我有一个引用 ecore 的语法,以及一个包含以下内容的模型:
NumberLiteral :
int= LONG;
terminal LONG returns ecore::ELong:
('-')? (NUMBER)+;
terminal fragment NUMBER:
'0'..'9';
这会生成一个 NumberLiteralImpl 类:
protected static final long INT_EDEFAULT = 0L;
和
@Override
public boolean eIsSet(int featureID)
{
switch (featureID)
{
case XCoGPackage.NUMBER_LITERAL__INT:
return int_ != INT_EDEFAULT;
}
return super.eIsSet(featureID);
}
这显然意味着当您将int 属性设置为0 时,它会被视为未设置。
这根本没用;例如,您不能序列化任何带有 0 的表达式。如果你尝试,你会得到一个表单错误:
org.eclipse.xtext.validation.IConcreteSyntaxValidator$InvalidConcreteSyntaxException: These errors need to be fixed before the model can be serialized.
SystemModel.{*snip*}.value->NumberLiteral: Feature NumberLiteral.int must be set.
有解决办法,还是有更好的方法?
【问题讨论】: