【发布时间】:2009-11-05 15:18:31
【问题描述】:
我希望为大学课程编写一个静态分析器。为了为该工具提供更多功能,我希望能够查找调用层次结构(就像 Eclipse 中的 Ctrl+Alt+H 一样)。这也必须是一个快速操作,因此可能必须针对索引而不是字节码扫描来进行查找。
但是,我期望编写一个 Eclipse 插件过于雄心勃勃。相反,我宁愿解耦创建代码索引的 Eclipse 部分,并使用库进行查找。用户界面将在命令行上,以简化实现。
我了解到 Eclipse 使用 Lucene 进行索引[1],但是,为了 Eclipse 允许的功能,必须在 Lucene 上进行大量工作。
问题是,是否可以将 Eclipse 的索引功能解耦以便重用?如果没有,是否有其他现成的可用库可以进行我讨论过的那种处理?
[1] Lucene In Action (IIRC)
编辑
我认为有一些误解。我不想检查类层次结构,我想检查 call 层次结构。这就是为什么搜索和索引(某种形式,尽管这可能不是正确的术语)进入讨论的原因。检查类层次结构可能比检查调用层次结构要便宜得多。
至于编写 Eclipse 插件,是的,我很乐意,但鉴于这项任务的时间很短,我可能不太可能完成它。但这是有用的信息,你们中的一些人认为这并不像我想象的那么难。
也许我过分强调 Eclipse,我突然想到,我真的在寻找任何提供 API 以通过字节码检查调用图的工具。
到目前为止,感谢您的回答!
【问题讨论】:
-
- 关于 Eclipse 执行速度如此之快的重要一点,它会创建一次通用索引,然后在类更改时单独更新它。所以我猜想与这个 Eclipse 特性没有什么可分离的。我看不出如何避免初始完整字节码分析,这将构建调用层次结构的索引表(可以保存该表以避免必须扫描您搜索调用层次结构的每种类型)。老实说,除了在非常庞大的代码库上,使用 ASM 进行完整扫描真的很快,花在编写“增量索引器”上的时间不值得,imo。
-
初始的前期扫描没问题。我更关心的是找到一个能够做到这一点的 API(因为它超出了我的课程范围)。如果初始全扫描是使用 ASM,那很好,我只是想避免写那一点 ;-)
标签: java eclipse indexing static-analysis