Inserta el código del Método en una nueva class

Intento crear una biblioteca sobre bytebuddy que se pueda usar para realizar transformaciones de time de ejecución en una class. La API que estoy creando no es directamente operable con ByteBuddy para insert código de método en las classs transformadas (quiero que los methods no anotados se agreguen completamente a la class transformada y los methods anotados con @Inject para ser inyectados en la cabeza o queue de un método existente), Mi solución a la falta de interoperabilidad fue crear una class temporal utilizando ByteBuddy, que se transforma entre mi API de nivel superior y la API de asesoramiento de ByteBuddy. Pero no puedo entender cómo pude insert todo el código de un método en la API de nivel superior en los methods definidos en el nivel inferior, ya que no puedo usar el asesoramiento para hacerlo. ¿Hay alguna manera de que yo pueda hacer esto?

Este es el código que he llegado a este punto

 fun apply(vararg transformerClasses: Class<*>) { for(clazz in transformerClasses) { val builder = ByteBuddy() .subclass(clazz) val mixinAnnotation = clazz.getAnnotation(Mixin::class.java) as? Mixin ?: throw RuntimeException("Passed transformer class without @Mixin annotation") val mixinTarget = mixinAnnotation.target.java for(method in clazz.declanetworkingMethods) { if(method.annotations.isEmpty()) { builder.defineMethod(method.name, method.returnType, Visibility.PUBLIC, Ownership.STATIC) .intercept(???) } } } } 

Realmente no hay una buena manera de hacerlo, pero una solución sería TypeDescription una instancia de TypeDescription donde traduzca sus annotations personalizadas a las de Byte Buddy. Podría usar una implementación de InstrumentedType para crear dicho object.

Byte Buddy aún lee el código de bytes del file de class correcto si el nombre de la class coincide. No hay verificación de coinheritance entre el file de class y la descripción del tipo.

  • Exception Handler no funciona con `spring-boot-starter-data-rest`
  • Forma idiomática de iniciar session en Kotlin
  • La debugging de Android Kotlin Task no se encuentra en el proyecto raíz
  • cómo usar kapt en Android
  • Notificación de Android no aparece en la API 26
  • Cómo sobrecargar constructores en kotlin difiere en el tipo de retorno lambda
  • Diferencia entre los methods de OnclickListener en Kotlin
  • Cómo realizar la initialization en varios pasos de val
  • Una function con tipo de retorno genérico
  • Spring & kotlin: ¿Cuál es la diferencia entre el constructor y la inyección tardía?
  • Kotlin: ¿Cómo ejecutar methods de service en el context de una class de transacción?