[英]Is it possible to change the value of an annotation using ByteBuddy?
我正在嘗試開發一種需要使用注釋的工具。 一個重要的功能是將帶有注釋的元素作為目標並更改其值,即
// from this
@Annotation(value = "foo")
class SomeClass {}
// to this
@Annotation(value = "bar")
class SomeClass {}
我嘗試過,首先使用AsmVisitorWrapper
刪除注釋,然后使用修改后的值重新添加注釋。
不幸的是,這似乎不起作用。
我使用byte-buddy-maven-plugin添加了此轉換。 錯誤發生在轉換目標期間。 我將一般錯誤歸結為NullReferenceException
:Asm ClassVisitor似乎發生在annotateType()
步驟之后,並嘗試將訪問步驟應用於新附加的注釋值。 我認為NullReferenceException
是由訪客引起的,因為刪除注釋需要返回null。
我在github上建立了一個測試庫,在那里我進行了嘗試。 希望它有助於理解我需要實現的目標。 https://github.com/Fed03/bytebuddy-switch-annotation-test
謝謝
這確實是Byte Buddy中的一個錯誤,現已在master上修復,並將成為1.10.2版的一部分。 問題在於您正在刪除要添加的注釋,並且這不被視為場景。
但是,即使有了此修復程序,盡管構建綠色,您的問題仍無法解決。 您需要更好地進行區分,以告知Byte Buddy您要刪除的注釋。 我建議您先轉換注釋,然后再刪除它,以后再添加。 區分兩個注釋中的哪一個需要刪除的任何匹配器都必須已經部分實現了這種更改發現,這就是為什么首先實現轉換器應該不難得多的原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.