使用Acceleo进行枚举的未定义测试

时间:2012-05-04 07:48:02

标签: acceleo

首先:感谢您的支持!

我的问题:我想简单地测试是否定义了“枚举”属性。

让我说我有:

  • 具有2个值VALEUR1和VALEUR
  • 的EnumValues枚举
  • 具有可选属性值
  • 的EObject对象

我希望通过这个表达式测试值的存在:

object.value.oclIsUndefined()

但是这个表达式总是返回true,因为value属性似乎是用枚举的第一个值初始化的。我发现的唯一旁路方法是不将EnumValues声明为枚举,而是将其声明为EObject。然后,当未在模型中设置属性时,oclIsUndefined()方法返回false。顺便说一句,我的模型是由Xtext生成的。

这似乎是一个愚蠢的问题,但我无法在Google,OCL规范或Acceleo资源中找到答案。

我发现的唯一材料here表示,实现此目的的唯一方法是使用isUndefined或更通用的isUndefined('value')OCL辅助方法。但我无法在Acceleo环境中拒绝这一点。

你有什么想法吗?

预先感谢您的回复!

斯特凡

2 个答案:

答案 0 :(得分:0)

在EMF中,Enumerations有一个默认值(默认情况下,枚举的第一个枚举文字),如果你真的想要创建一个默认值的枚举,请使用this。请记住,这不是EMF中枚举的“常规”行为。

Acceleo只是报告你EMF告诉你的内容:“你的枚举有一个值”。

您可以使用以下表达式在Acceleo中测试您的枚举:

[myObject.myEnumValue = MyEnum::MyEnumLiteral/]

wiki中所述。

此致

Acceleo的领导人Stephane Begaudeau

答案 1 :(得分:0)

我会做以下事情:

  • 在Xtext中使用手动维护的元模型
  • 但不要将Dummy Literal添加到EEnum
  • 清洁解决方案是imho将包含Enum值的EAttribute声明为不可设置,因此EMF会告诉您该值是明确设置还是默认值。