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.

  • No se puede depurar un procesador de annotations cuando se usan kapt y gradle
  • Cómo burlarse del repository reactivo que devuelve Observable
  • Android Studio y Kotlin: reference no resuelta: también
  • Igual a la sobrecarga en Kotlin
  • Kotlin para assertThat (foo, instanceOf (Bar.class))
  • ¿Por qué mi editor deslizante no funciona en la cuadrícula Vaadin 8?
  • Kotlin: ¿funciones de extensión y types de plataforma?
  • Convierta ByteArrayOutputStream a json en Kotlin
  • NoSuchMethodError: java.lang.Long.hashCode
  • Clase de datos kotlin + validation de frijol jsr 303
  • Obtener acceso a una instancia en una function de contenedor