我正在寻找一个大学课程的静态分析器。为了给工具提供更多的权力,我希望能够查找调用层次结构(如在Eclipse中按Ctrl + Alt + H)。这也必须是一个快速操作,所以查找可能不得不针对索引而不是字节码扫描来完成。是否可以分离Eclipse的代码索引功能?
但是,编写一个Eclipse插件将是我期望的雄心太大。相反,我宁愿将创建代码索引的Eclipse部分解耦,然后使用库进行查找。用户的界面将在命令行中,以简化实现。
我读过Eclipse使用Lucene执行索引[1],但是,由于Eclipse允许的功能,必须在Lucene上做大量的工作。
问题是,是否有可能将Eclipse的索引功能解耦以重用?如果没有,还有其他可用的库,可以做我讨论过的那种处理吗?
[1]的Lucene在行动(IIRC)
编辑
我认为其中有一些误解。我不想检查班级层次结构,我想检查调用层次结构。这就是为什么搜索和索引(某种方式,但也许这不是正确的术语)进入讨论的原因。检查类层次结构可能比检查调用层次结构要便宜很多。
至于编写一个Eclipse插件,是的,我很喜欢,但鉴于这个任务是在一个很短的时间尺度上,它可能不太可能我会管理它。但是,有些人认为这并不像我想的那样艰难。
也许我已经把太多的重点放在了Eclipse上,我发现我真的在寻找任何提供用于检查通过字节码的调用图的API的工具。
感谢您的回答!
- 了解Eclipse如何执行如此之快的一个重要事情是,它会创建一次总索引,然后在类更改时单独更新。所以我想,这个Eclipse功能很少能够解耦。我看不出如何避免初始的全字节代码分析,它将构建调用层次结构的索引表(可以保存以避免必须扫描搜索调用层次结构的每种类型)。 说实话,除了在一个非常庞大的代码库上,全面扫描对于ASM来说真的很快,你花时间写一个“delta indexer”的时间不值得我们付出努力。 – Olivier 2009-11-05 19:56:27
初始的前期扫描很好。我更关心的是找到一个API,因为它已经超出了我的课程范围。如果最初的全面扫描是使用ASM,那很好,我只是想避免写这个位;-) – Grundlefleck 2009-11-05 22:44:36