2016-04-29 14 views
1

Ich habe folgende Code-Schnipsel in meinem AbstractFieldProcessor.doTransformation Überschreibung:Wie füge ich einen Parameter des Typs String zu einem generierten Java-Setter mit aktiven Xtend-Annotationen hinzu?

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

Wie kann ich die Parameter des Typs Strings für den „Wert“ Parameter erzeugen. Der field.type ist kein String. Wie kann ich eine TypeReference für eine Zeichenfolge erstellen?

Antwort

2

Ein TypeReference referenzierender Typ String kann mit der TypeReferenceProvider.getString() Methode erhalten werden.

In der Praxis können Sie die TransformationContext Schnittstelle verwenden (weil es TypeReferenceProvider erweitert):

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

Es gibt andere nützliche Methoden in TypeReferenceProvider ein TypeReference zu anderen häufig verwendeten Typen zu bekommen, wie getObject(), getPrimitiveX() usw.


um einen TypeReference auf jede Art in der Regel zu erhalten, sollten Sie zunächst die Art erstellen Sie dann einefindendazu. Sie können die TransformationContext für diesen Einsatz auch:

  1. den Typ Die TransformationContext.findTypeGlobally() oder TransformationContext.findX() Methoden.
  2. TypeReference Erhalten von TransformationContext.newTypeReference()

Zum Beispiel ruft eine TypeReference-LinkedHashMap<String, Object> im doTransform() Methode zu erstellen, können Sie

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

Arbeitete verwenden. Vielen Dank. – KennyBartMan