Требуется: создать новый класс на основе существующего класса, заменив инициализатор статического блока (не добавляя код)
На данный момент следующий код добавляет команды к статическому блоку
Код: Выделить всё
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
Мобильная версия