If the fields that You want to join are known and don't need to be discovered dynamically You can try with @FieldValue:
public class Test {
public static void main(String[] args) throws Exception {
String name = Inner.class.getName() + "_bb";
new ByteBuddy()
.redefine(Inner.class)
.name(name)
.defineMethod("doAThing", String.class, Opcodes.ACC_PUBLIC)
.intercept(to(new Interceptor()))
.make()
.load(Test.class.getClassLoader());
Object instance = Class.forName(name).newInstance();
Method m = instance.getClass().getMethod("doAThing");
System.out.println(m.invoke(instance));
}
public static class Interceptor {
public String doAThing(@FieldValue("a") @RuntimeType Object a, @FieldValue("b") @RuntimeType Object b) {
return a + "_" + b;
}
}
public static class Inner {
private String a = "a";
private String b = "b";
}
}