簡體   English   中英

實現注釋處理器,僅當使用注釋注釋變量時才允許調用方法(如 Rust mut)

[英]Implement annotation processor that allows to call method only if variable annotated with annotation (like Rust mut)

我認為最好從我想要實現的想法開始。 我真的受到 Rust mut 指針的啟發,因此同一類型可以同時是不可變的和可變的。 我在想是否有可能為 JVM 實現類似的東西。

看起來我只需要創建注釋 @Mutates 來注釋更改當前 class state 的方法和注釋 @Mutable 來注釋局部變量、字段和參數。 處理器的邏輯不是太難。 對於由@Mutates 注釋的方法的每次調用,我需要檢查相應的變量/字段/arg 是否由@Mutable 注釋。 如果方法在字段上調用任何 @Mutates 方法或進行賦值(= 運算符),則該方法也必須由 @Mutates 注釋。

主要問題我不知道從哪里開始,因為我沒有注釋處理經驗。 根據我有限的理解,我不能使用注釋處理器,因為它不應該分析方法代碼......所以我似乎需要創建一些編譯器插件(兩個:用於 Java 和 Kotlin)。

有人可以給我一條建議嗎 - 是否有可能做到這一點,這有多難(所以我可以估計我需要的努力和時間,並決定是否值得)

標准注釋處理接口不提供對方法體的訪問。 但是,其他框架可以。 例如, Checker Framework提供了一個 API 用於下降到方法體的注釋處理。 在 Checker Framework 上構建,您可以創建一個注釋處理器,在編譯時強制執行您的可變性規則:如果違反規則,注釋處理器將停止編譯並顯示 javac 錯誤消息。

在 Checker Framework 上構建了數十個注釋處理器,每天在 Amazon、Facebook、Google、Uber 等公司使用。

免責聲明:我是該項目的維護者之一。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM