簡體   English   中英

Java字節/源代碼分析-如何以編程方式找到使用另一個類的所有類/方法?

[英]Java byte/source code analysis - how do I find all the classes/methods that use another class - programmatically?

我需要以編程方式知道哪些類正在調用給定類的(例如X)getter和setter。 這里的關鍵是“以編程方式”。

例如,如果類A使用X的setPropertyABC()而類B使用X的getPropertyABC(),則我想根據對X的調用來定義類之間的依賴關系-在這種情況下,類A的執行必須先於類B.

我需要以編程方式執行此操作(而不是通過IDE)。 我想創建一個程序,該程序將查看類的已編譯字節碼或源代碼,並弄清楚哪些類在給定類上使用哪些方法。 為此目的使用的最佳Java庫是什么? 字節碼工具更合適嗎? 我當時在想ANTLR是否可以完成這項工作,但我不確定。 公共領域中是否有任何示例代碼可以解決此問題?

也許您可以使用Aspects 您將擁有一個切入點,可以攔截該類的所有get*set*方法。 顧問程序可以使用Thread.currentThread().getStackTrace()找出調用方法是什么,然后記錄結果。 這不完全是字節碼分析技術,但可能更簡單。

[edit]就計算兩個類之間的某種時間依賴關系(其中一個依賴於其他人調用的setter)而言,顧問可以將有關每次調用的信息附加到某種插入順序數據結構(LinkedHashMap) 。 如果調用了getX ,則可以查看對setX調用。

幾年前,我使用稱為“依賴關系查找器”的工具在源代碼級別分析了依賴關系。 我在http://dev.saxonica.com/blog/mike/2009/09/analyzing-dependencies-in-a-class-library-a-use-case-for-xslt-streaming.html上報告了該項目。

該工具以XML形式輸出有關模塊之間依賴性的信息,並且可以根據報告的粒度進行配置。 我對XML報告進行了相當多的分析(使用XSLT),以獲得對代碼結構的理解,在這種情況下,代碼結構是整個OpenJDK庫。

該博客着重於如何對一些非常大的XML文件進行分析,但是我希望它能為您提供一些見識。

博客文章上的公眾評論還指向其他兩個依賴分析工具。

考慮了所有其他選擇之后,我決定使用ASM庫進行字節碼分析。 它被證明是非常合適和有用的。 謝謝大家的答復。

暫無
暫無

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

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