2015-08-25 7 views
6

Ich schreibe einen Code-Generator JavaPoet verwenden und benötigen eine Anmerkung für die KlasseGenerieren von Annotationen JavaPoet mit

Zum Beispiel zu setzen:

package some.package 

import org.hibernate.annotations.CacheConcurrencyStrategy; 
import javax.persistence.Entity; 
import javax.persistence.Cache 

@Entity 
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) 
public class SomeClass { 
} 

Mein Code sieht wie folgt aus:

TypeSpec spec = TypeSpec 
    .classBuilder("SomeClass") 
    .addAnnotation(Entity.class) 
    .addAnnotation(AnnotationSpec.builder(Cache.class) 
    .addMember("usage", "$L", CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) 
    .build()) 
    .build() 

Dieser Code erzeugt die Klasse, aber der resultierende Code die import-Anweisung für die CacheConcurrencyStrategy fehlt. Wie kann ich den Code generieren, so dass alle erforderlichen Code ausgegeben wird?

Antwort

8

Try this:

TypeSpec spec = TypeSpec 
    .classBuilder("SomeClass") 
    .addAnnotation(Entity.class) 
    .addAnnotation(AnnotationSpec.builder(Cache.class) 
     .addMember("usage", "$T.$L", CacheConcurrencyStrategy.class, 
      CacheConcurrencyStrategy.NONSTRICT_READ_WRITE.name()) 
     .build()) 
    .build() 

Die $T identifiziert die Enum-Klasse und die $L die Enum konstant.

+0

Das funktionierte. Danke – nvalada

Verwandte Themen