使用xtend 2.7.3设置注释值?

时间:2015-02-09 09:57:01

标签: java xtend

所有 我正在将我的项目从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中设置值。 如何解决?

感谢。

1 个答案:

答案 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
]
...

另请注意:

  1. typeOf已经过时了。您可以直接使用Attr来引用该课程。
  2. 静态成员访问的
  3. ::现在可以用简单的.替换。
  4. 如果类Attr位于活动注释项目和客户端项目的类路径上,则不必使用`findTypeGlobally。
  5. 静态(扩展)导入可以帮助您编写更简洁的代码,例如
  6. 所以你的代码可能会变成

    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
    ]
    

    ...