扫描代码库以使用已弃用的方法

时间:2013-01-23 21:47:40

标签: java eclipse deprecated eclipse-jdt

我的任务是开发一个工具来扫描大量的Java项目(~7000 .java个文件),以便使用不推荐的方法/属性/ API。已经指定该工具一次扫描一个文件,执行一些分析,并输出有问题的文件列表,以及不推荐使用的代码片段出现的行号。我一直在使用Eclipse JDT Java解析器来实现这一点,但我似乎无法弄清楚这一点。

因为每次扫描每个文件,编译器不知道哪些方法已被弃用,哪些不是,所以我不能只调用一些isDeprecated()方法并将其留在那里。

我编译了代码中要查找的所有弃用方法的列表,并检查了代码库中的每个方法调用(有很多),但这是一个丑陋的解决方案,产生了一个不可接受的大由于解析器的限制或我对解析器的了解限制,误报的数量。

我是否可以构建每个单独的项目并将编译器警告输出到某个.txt文件或其他内容?这是我第一次处理这种规模的项目,所以我不确定这样的东西是如何工作的。这并不完全符合规范,而且我想象的时间相当耗时,但如果这就是它需要的东西,那就是它需要的东西。

3 个答案:

答案 0 :(得分:1)

Eclipse已经为您做到了这一点。您只需启用compiler warning Java development user guide > Reference > Preferences > Java > Compiler > Deprecated API

即可

如果您不知道,Eclipse编译器也可以在Eclipse IDE之外使用,可以在Eclipse help中找到说明。

答案 1 :(得分:0)

有趣的问题!您说您编译了代码中要查找的所有已弃用方法的列表,并针对代码库中的每个方法调用进行了检查。

我认为如果你使用JDT,这是一个很好的方法。可以改进的是在解析目标库/包时使用相应的类和包来获取已弃用的方法。例如,如果您解析SDK,则会获得所有已弃用的方法及其相应的类和包。使用这些合格的方法名称,您可以通过匹配方法,类和包的名称来搜索大型Java项目集合。这应该大大减少误报。

答案 2 :(得分:0)

非常有趣的是,你试图解决的问题是确切的问题(再加上与此相关的更多问题)我的工作...... 我想我有一个很好的解决方案,对我有用。

第1步:使用抓取器程序构建文件,此抓取工具的目的是创建一个文件,例如csv文件(在工作场所很常见),其中包含所有功能不推荐使用api,(方法,字段,接口,类,构造函数等)。建立这个文件不适合初学者,但如果你有一些经验,可以通过3-4个小时的工作完成。

步骤2:从第1步获取文件后,对于每个需要检查扫描的java文件,如果第1步中的数据集已更新,则需要将其与步骤1中的文件进行比较。进步好,然后你不会错过任何事情......

第3步:输出清单 - 我会把这个留给你作为练习。玩得开心 !

直觉:使用简单的html解析器(如jsoup或json)使用Java或您喜欢的任何语言编写数据集,然后编写一个比较数据集和您需要扫描的.java文件的bash脚本。在脚本中 - 对于每个使用不推荐使用的api的.java,都会创建一个.txt文件,其中包含有关此用途的所需信息。 祝好运。