Замените статический блок на 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

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