如何使用Xtend活动注释向生成的java setter添加String类型的参数?

时间:2016-04-29 16:18:01

标签: java annotations xtend

我在AbstractFieldProcessor.doTransformation覆盖中有以下代码段:

field.declaringType.addMethod('set'+ field.simpleName.toFirstUpper +'Input' )
    [


        addParameter("values", ########)
        addParameter("keys",field.type)
        body=
        '''
            this.click«field.simpleName.toFirstUpper»();
            «field.simpleName»Input.sendKeys("ABCDEFG");
        '''
    ]

如何为"值"生成字符串类型的参数?参数。 field.type不是String。如何为String创建TypeReference?

1 个答案:

答案 0 :(得分:2)

可以使用TypeReference方法获取String引用类型TypeReferenceProvider.getString()

在实践中,您可以使用TransformationContext界面(因为它扩展了TypeReferenceProvider):

override doTransform(MutableClassDeclaration annotatedClass, extension TransformationContext context)
{
    // Add field of type String
    annotatedClass.addField("stringField") [
        type = string // Get TypeReference to type String
    ]
}

TypeReferenceProvider中还有其他有用的方法可以将TypeReference提供给其他常用类型,例如getObject()getPrimitiveX()等。

要获得TypeReference一般的任何类型,首先应找到该类型,然后为其创建TypeReference。您也可以使用TransformationContext

  1. 使用TransformationContext.findTypeGlobally()TransformationContext.findX()方法查找类型。
  2. 致电TypeReference
  3. 获取TransformationContext.newTypeReference()

    例如,要在TypeReference方法中创建LinkedHashMap<String, Object>doTransform(),您可以使用

    LinkedHashMap.findTypeGlobally.newTypeReference(string, object)