我的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不是字符串。如何为字符串创建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


使用TransformationContext.findTypeGlobally()TransformationContext.findX()方法查找类型。
通过调用TypeReference获得TransformationContext.newTypeReference()


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

LinkedHashMap.findTypeGlobally.newTypeReference(string, object)

09-25 20:52