2017-07-15 24 views
0

我正在嘗試使用ByteBuddy更改一些運行時代碼。我碰到的問題是,當我嘗試在最後添加一個攔截調用的方法時,整個方法被替換,並且沒有任何$ original()方法被聲明和調用。Rebase方法攔截,完全覆蓋方法

這是我使用了適當變換

ByteBuddy() 
    .rebase(clazz) 
    .method(ElementMatchers.named("onEnable")) 
    .intercept(MethodDelegation.to(TestInjector())) 
    .make() 
    .saveIn(dataFolder) 

clazz和dataFolder上面的代碼本中定義和都沒有問題的來源。

這是注射器方法的簽名:

public void intercept(@This JavaPlugin pl)

在分析它輸出代碼,所述類是相同的預變換,但所有的代碼獲取調用在onEnable方法已被刪除,並替換爲單個方法委託。有沒有辦法,使用這樣的方法,讓我保留現有的方法主體,但添加委託調用的方法的頭部?

回答

1

如果要調用原始方法,可以使用「andThen」將SuperMethodCall鏈接到攔截器。這指示Byte Buddy在委託調用後調用原始方法。