Byte Buddyでいくつかのメソッドの可視性を変更することは可能ですか?私はプライベートな静的メソッドを持つユーザークラスを持っているので、それらのメソッドにいくつかの呼び出しを委譲する必要がありますが、プライベートなので現在失敗しています。だから、上記のメソッドをpublic修飾子を追加してトランスフォームすることで、ユーザークラスを再定義できるかどうかと思います。レコードのメソッドの可視性を変更する
、バイトバディはまだ、次の例外で失敗としてではなく、効果としてターゲットJavaメソッドのsetAccessible(true)
メソッドを呼び出す:
java.lang.IllegalStateException: class net.bytebuddy.renamed.java.lang.Object$ByteBuddy$VHdvjIkb cannot see private java.lang.String org.mockaccino.MockaccinoTest.lambda$3() throws java.lang.Exception
at net.bytebuddy.implementation.MethodCall$MethodInvoker$ForContextualInvocation.invoke(MethodCall.java:2387)
...
私はトリックを行う可能性がありますいくつかのAPIを見つけたが、私は私の場合には必要ではないメソッドを計測する必要があります。
例:
byteBuddy.redefine(targetClass)
.method(ElementMatchers.named(targetMethod.getName()))
.intercept(???)
.transform(Transformer.ForMethod.withModifiers(Visibility.PUBLIC))
.make()
.load(getClassLoader(), ClassReloadingStrategy.fromInstalledAgent());
私の質問は:再定義されているソースメソッドの本体を呼び出すことができますインターセプターはありますか?
また、ターゲットメソッドを公開する別の方法がありますか?