Замените статический блок на ByteBuddy (не добавляйте код)JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Замените статический блок на ByteBuddy (не добавляйте код)

Сообщение Anonymous »

Дано: существующий класс (байт-код)
Требуется: создать новый класс на основе существующего класса, заменив инициализатор статического блока (не добавляя код)
На данный момент следующий код добавляет команды к статическому блоку

Код: Выделить всё

Class templateClass;
String newFQCN;
DynamicType.Unloaded unloaded = new ByteBuddy()
.redefine(templateClass)
.name(newFQCN)
.invokable(ElementMatchers.isTypeInitializer())
.intercept(new Implementation.Simple(
(mv, ctx, method) -> {
StackManipulation body =
generateClinit(method.getDeclaringType().asErasure());
// returns "StackManipulation", new code for the static block

StackManipulation.Size size = body.apply(mv, ctx);
mv.visitInsn(Opcodes.RETURN);
return new ByteCodeAppender.Size(
size.getMaximalSize(),
method.getStackSize()
);
}
))
.make();
Пожалуйста, порекомендуйте внести изменения в код, обеспечивающие замену статического блока, а не добавление к нему кода.

Подробнее здесь: https://stackoverflow.com/questions/798 ... ppend-code
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»