Definir getters y setters simples es fácil usando Asm (y afortunadamente incluso se explica en sus preguntas frecuentes). Pero una cosa que no se menciona, y para la cual no he podido encontrar la documentación, es cómo implementar estos usando información de tipo genérico.Generar métodos con tipos genéricos con generador de códigos de bytes Asm (ClassWriter)
De hecho, soy capaz de determinar la información de tipo genérico con bastante facilidad (dado que el código tomará los campos y/o métodos existentes y existe una resolución y manejo completo del tipo genérico). Solo necesito generar una versión genérica para los tipos que tienen el tipo genérico incluido.
Espero que esto sea algo tan fácil como modificar la firma Asm Las llamadas ClassWriter/MethodVisitor toman, pero algunos comentarios en la documentación indican que podría no ser tan fácil (ya que la información genérica se almacena en un lugar diferente que la información normal).
EDITAR: se parece a punto de entrada es "ClassWriter.visitField/Método (...., cadena de firma) - en cuenta que se trata de 'descripción' que contiene información de la clase no genérica normal, pero término 'firma' (en JLS) se refiere específicamente a los genéricos, incluida la información de tipo
Esto es útil, gracias. Mi problema específico en este momento parece ser que la firma resultante de alguna manera no está escrita correctamente en el archivo de clase, aunque utilizo el formato correcto (hasta donde yo sé). Pero tal vez debería volver a verificar con SignatureWriter para asegurarme ... – StaxMan
@StaxMan: También he tenido problemas para compartirlo. Tal vez este artículo ayude: [Kit de herramientas para la clase: genéricos con ASM] (http://www.ibm.com/developerworks/java/library/j-cwt02076.html) –
¡Ah! FINALMENTE encontré el problema real en mi código: tenía el argumento V1_2 en ClassVisitor.visit(); y esto necesita ser V1_5 o superior para genéricos (y anotaciones) a ser compatibles. ¡Gracias por tu ayuda! – StaxMan