4

我有一个从 UML 模型生成文本的 XPT 模板。这是我在类的属性上使用的摘录

«FOREACH attribute AS a»
    Id: «a.name»
    Type: «a.type.name»
«ENDFOREACH»

只要type是模型本身的一个类,一切都很好。但如果它是原始类型,则所有字段,包括name,都设置为null。如果我更改«a.type.name»«a.type»,那么响应是这样的:

org.eclipse.uml2.uml.internal.impl.PrimitiveTypeImpl@6e315086 (eProxyURI:
     pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String)

调试器显示仅在eStorage对象上设置了私有字段,这就是toString()产生上述输出的原因。

有趣的是,Acceleo 中的相同表达式被正确评估:

[query public getType(t : Type) : String = t.name /]

问题:如何type在 Xtend 中为原始 uml 类型填写属性字段?

编辑:问题缩小到这个问题:EProxy URI does not resolve in ecore model

4

1 回答 1

1

Acceleo 生成的代码可以解析异常的pathmap://eProxyURI。默认情况下,简单的 Xpand 模板或 Xtend 代码无法解析它们。有关更多详细信息和解决方案,请参阅此问题

于 2013-07-01T12:57:30.117 回答