/ / Comment créer un champ `String []` avec l'annotation active de xtend? - xtend

Comment créer un champ `String []` avec une annotation active de xtend? - xtend

J'ai essayé avec l'annotation active de xtend, et je veux créer une annotation active pouvant générer une String[] champ pour enregistrer les noms des paramètres de la méthode.

@Target(ElementType::TYPE)
@Active(typeof(ParameterRecorderProcessor))
annotation ParameterRecorder {
}

class ParameterRecorderProcessor extends AbstractClassProcessor {

override doTransform(MutableClassDeclaration annotatedClass, extension TransformationContext context) {

var iii = 0;

// add the public methods to the interface
for (method : annotatedClass.declaredMethods) {
if (method.visibility == Visibility::PUBLIC) {
iii = iii + 1
annotatedClass.addField(method.simpleName + "_" + iii) [
type = typeof(String[]).newTypeReference // String[] doesn"t work

var s = ""
for (p : method.parameters) {
if(s.length > 0) s = s + ","
s = s + """ + p.simpleName + """
}
val ss = s

initializer = [
"""[«ss»]"""
]
]
}
}
}
}

Vous pouvez voir que j'utilise typeof(String[]).newTypeReference définir le type du nouveau champ créé, mais cela ne fonctionne pas. Le code java généré ressemble à:

private Object index_1;

Il utilise Object et le initializer la partie doit être vide.

Comment le réparer?

Réponses:

1 pour la réponse № 1

Cela ressemble à un bug pour moi. Pour contourner le problème, vous pouvez utiliser typeof(String).newTypeReference.newArrayTypeReference ou plus concis string.newArrayTypeReference