Intereting Posts
Val не может переназначить ошибку времени компиляции для локальной переменной в fun в kotlin Котлин «не ожидал никаких параметров» при попытке вернуть встроенную лямбду Kotlin: Интерфейс с неизменяемым свойством, реализуемым классом с изменчивым Приложение Kotlin не показывает мой json-массив Kotlin + Dagger2 @Named аннотация в использовании метода модуля Как объявить сырые типы в Котлин? Как помещать выражение лямбда после параметров на mapTo вызвать юридический синтаксис? Как реализовать ленивый адаптер recyclerView для загрузки, например realm recyclerView, используя kotlin Android Studio 2.2 не может найти ссылки для всех файлов kotlin Как объявить параметр функции для приема функций, которые вы выбрали? Как использовать AndroidAnnotation @FragmentArg с Kotlin? Kotlin – заводская функция для класса с частным конструктором Котлин строит, вызывая JVM к ошибке сегментации Почему я не могу установить слушателя в Котлине? Можно ли смешивать Ktor с Exposed?

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

Я пытаюсь изменить код выполнения во время работы с помощью 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, был удален и заменен делегатом одного метода. Есть ли способ, используя метод, подобный этому, для сохранения существующего тела метода, но добавьте вызов делегата в голову метода?

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