如何使用 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
:
- 使用
TransformationContext.findTypeGlobally()
或 TransformationContext.findX()
方法查找类型。
- 通过调用
TransformationContext.newTypeReference()
获得TypeReference
比如在doTransform()
方法中创建一个TypeReference
到LinkedHashMap<String, Object>
,可以使用
LinkedHashMap.findTypeGlobally.newTypeReference(string, object)
我的 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
:
- 使用
TransformationContext.findTypeGlobally()
或TransformationContext.findX()
方法查找类型。 - 通过调用
TransformationContext.newTypeReference()
获得TypeReference
比如在doTransform()
方法中创建一个TypeReference
到LinkedHashMap<String, Object>
,可以使用
LinkedHashMap.findTypeGlobally.newTypeReference(string, object)