java - Method delegation with Byte Buddy -


i have problem getting simple example working byte buddy, here's code:

import static java.util.arrays.aslist; import java.util.stream.stream; import net.bytebuddy.bytebuddy; import net.bytebuddy.dynamic.loading.classloadingstrategy; import net.bytebuddy.implementation.methoddelegation;  public class foo {   public static class bar {     public void bar (string s, integer i) {       system.out.println ("s:" + s + " i:" + i);     }   }   public static class baz {     public void baz (integer i, string s) {       system.out.println ("i:" + + " s:" + s);     }   }    public static void main (string[] args) {     try {       class<?> c = new bytebuddy ()         .subclass (object.class)         .definemethod ("bar", void.class, aslist (string.class, integer.class), 1)         .intercept (methoddelegation.to (new bar ()))         .definemethod ("baz", void.class, aslist (integer.class, string.class), 1)         .intercept (methoddelegation.to (new baz ()))         .make ()         .load (foo.class.getclassloader (), classloadingstrategy.default.wrapper)         .getloaded ();       stream.of (c.getdeclaredmethods ()).foreach (system.out::println);     } catch (exception e) {       e.printstacktrace ();     }   } } 

which expect work , forward calls respected interceptor instances, exception:

java.lang.illegalargumentexception: none of [protected void java.lang.object.finalize() throws java.lang.throwable, public final void java.lang.object.wait(long,int) throws java.lang.interruptedexception, public final native void java.lang.object.wait(long) throws java.lang.interruptedexception, public final void java.lang.object.wait() throws java.lang.interruptedexception, public boolean java.lang.object.equals(java.lang.object), public java.lang.string java.lang.object.tostring(), public native int java.lang.object.hashcode(), public final native java.lang.class java.lang.object.getclass(), protected native java.lang.object java.lang.object.clone() throws java.lang.clonenotsupportedexception, public final native void java.lang.object.notify(), public final native void java.lang.object.notifyall(), public void foo$bar.bar(java.lang.string,java.lang.integer)] allows delegation public java.lang.void net.bytebuddy.renamed.java.lang.object$bytebuddy$p87hq3lq.bar(java.lang.string,java.lang.integer) @ net.bytebuddy.implementation.bind.methoddelegationbinder$processor.process(methoddelegationbinder.java:881) @ net.bytebuddy.implementation.methoddelegation$appender.apply(methoddelegation.java:1218) @ net.bytebuddy.dynamic.scaffold.typewriter$methodpool$record$fordefinedmethod$withbody.applybody(typewriter.java:510) @ net.bytebuddy.dynamic.scaffold.typewriter$methodpool$record$fordefinedmethod.apply(typewriter.java:444) @ net.bytebuddy.dynamic.scaffold.typewriter$default$forcreation.create(typewriter.java:3193) @ net.bytebuddy.dynamic.scaffold.typewriter$default.make(typewriter.java:1481) @ net.bytebuddy.dynamic.scaffold.subclass.subclassdynamictypebuilder.make(subclassdynamictypebuilder.java:234) @ net.bytebuddy.dynamic.dynamictype$builder$abstractbase$abstractdelegatingbuilder.make(dynamictype.java:2177) @ foo.main(foo.java:55) 

the weirdest part being @ end of exception message:

[...] public void foo$bar.bar(java.lang.string,java.lang.integer)] allows delegation public java.lang.void net.bytebuddy.renamed.java.lang.object$bytebuddy$p87hq3lq.bar(java.lang.string,java.lang.integer) 

what doing wrong?

you right assumption. byte buddy cannot assign void non-type void type. byte buddy can assign null reference type void method, when annotated interceptors @runtimetype:

public class bar {   @runtimetype   public void bar (string s, integer i) {     system.out.println ("s:" + s + " i:" + i);   } } public class baz {   @runtimetype   public void baz (integer i, string s) {     system.out.println ("i:" + + " s:" + s);   } } 

Comments

Popular posts from this blog

ruby - Trying to change last to "x"s to 23 -

jquery - Clone last and append item to closest class -

c - Unrecognised emulation mode: elf_i386 on MinGW32 -