如何以编程方式在项目中查找所有Java方法调用和给定参数?

时间:2013-07-12 11:13:34

标签: java static-analysis

我有一个多语言Web应用程序,可以从单个对象获取所有翻译,例如lang.getTranslation("Login"),该对象负责以用户语言在xml文件中查找翻译。

我想要做的是一个脚本/自定义静态分析,它输出在应用程序中不再使用的所有缺失的翻译和翻译。我相信我应该首先以编程方式查找对getTranslation方法和字符串参数的每次调用,将数据存储在特殊结构中并将其与所有翻译文件进行比较。

是否有一个允许我轻松完成此操作的库?我已经找到Javassist但我不能用它来读取参数值。我也试过grep ping,但我不确定这是否是一个强大的解决方案(如果有一个调用另一个具有getTranslation方法的类)。我知道Qt在代码中有类似的机制来查找可翻译的字符串,但这是一种完全不同的技术。

我问这个是因为我非常确定这是一个很好的现有解决方案,我不想重新发明轮子。

1 个答案:

答案 0 :(得分:2)

好的,我就是这样做的。不是最佳解决方案,但对我有用。我用Java创建了一个实用程序,用于查找所有方法调用并将参数与现有翻译进行比较。

  1. 使用Reflections
  2. 查找项目根目录包中的所有类
  3. 使用Javassist库查找类中正确类的所有getTranslation方法调用,并创建它们的列表(包含:包,类,行号)
  4. 从给定行读取项目目录中相应的.java文件,直到';'字符
  5. 提取参数值并将其添加到列表
  6. 找到缺失的翻译并输出
  7. 查找冗余翻译并输出
  8. 我花了一段时间才做到这一点,但至少我现在有了一个可重复使用的工具来保持翻译文件的最新状态。