Перехват метода перебазирования, полностью переопределяющий метод

Я пытаюсь изменить код времени выполнения с помощью ByteBuddy. Проблема, с которой я столкнулся, заключается в том, что когда я пытаюсь перебазировать метод, чтобы добавить вызов перехвата в конце, весь метод заменяется, и после этого не объявляется и не вызывается какой-либо метод $original().

Это код, который я использую для правильного преобразования

ByteBuddy()
    .rebase(clazz)
     .method(ElementMatchers.named("onEnable"))
     .intercept(MethodDelegation.to(TestInjector()))
     .make()
     .saveIn(dataFolder)

clazz и dataFolder определены выше и не являются источником проблемы.

Это подпись метода инжектора:

public void intercept(@This JavaPlugin pl)

При анализе выводимого кода класс идентичен классу до преобразования, но весь код, который вызывался в методе onEnable, был удален и заменен делегатом одного метода. Есть ли способ, используя такой метод, сохранить существующее тело метода, но добавить вызов делегата в заголовок метода?


person Redrield    schedule 15.07.2017    source источник


Ответы (1)


Если вы хотите вызвать исходный метод, вы можете связать SuperMethodCall с перехватчиком, используя "andThen". Это указывает Byte Buddy вызывать исходный метод после вызова делегирования.

person Rafael Winterhalter    schedule 16.07.2017