所有 我正在将我的项目从xtend 2.4.3迁移到2.7.3
我遇到了一些问题。 这是代码适用于2.4.3
val AttrType = findTypeGlobally(typeof(Attr));
val fld = Cls.addField(Pkt::getMemberName(m))
[
val annot = addAnnotation(AttrType )
annot.set("value", GenHelper::getAnnot(m))
visibility = Visibility::PUBLIC
]
setFieldType(m, fld, context)
在2.7.3上,addAnnotation返回AnnotationReference。
无法在AnnotationReference中设置值。 如何解决?
感谢。
答案 0 :(得分:1)
使用带有lambda的addAnnotation
方法来初始化注释引用。在该lambda中,您可以访问AnnotationReferenceBuildContext
来设置值。
val AttrType = findTypeGlobally(typeof(Attr))
val fld = Cls.addField(Pkt::getMemberName(m))
[
val annot = addAnnotation(AttrType) [
set("value", GenHelper::getAnnot(m))
]
visibility = Visibility::PUBLIC
]
...
另请注意:
typeOf
已经过时了。您可以直接使用Attr
来引用该课程。::
现在可以用简单的.
替换。Attr
位于活动注释项目和客户端项目的类路径上,则不必使用`findTypeGlobally。所以你的代码可能会变成
import static extension <whereever>.Pkt.*
import static extension <whereever>.GenHelper.*
import static org.xtend.lib.macro.declaration.Visibility.*
...
Cls.addField(m.memberName) [
Attr.addAnnotation [
'value'.set(m.annot)
]
visibility = PUBLIC
type = m.fieldType(context) // might need further refactoring
]
...