如何使用 Xtend 活动注释将字符串类型的参数添加到生成的 java setter?

How to do I add a parameter of type String to a generated java setter using Xtend active annotations?

我的 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");
        '''
    ]

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

一个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. 通过调用TransformationContext.newTypeReference()获得TypeReference

比如在doTransform()方法中创建一个TypeReferenceLinkedHashMap<String, Object>,可以使用

LinkedHashMap.findTypeGlobally.newTypeReference(string, object)