2016-04-29 8 views
1

У меня есть следующий фрагмент код в моем AbstractFieldProcessor.doTransformation переопределения:Как добавить параметр типа String к сгенерированному набору java с использованием активных аннотаций Xtend?

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

Как я могу генерировать параметр Strings типа для параметра «значения». Свойство field.type не является строкой. Как создать TypeReference для строки?

ответ

2

A 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 по телефону TransformationContext.newTypeReference()

Например, чтобы создать TypeReference к LinkedHashMap<String, Object> в методе doTransform(), вы можете использовать

LinkedHashMap.findTypeGlobally.newTypeReference(string, object) 
+0

работал. Спасибо. – KennyBartMan