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

标签 java static-analysis

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

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

有没有一个库可以让我轻松地做到这一点?我已经找到Javassist但我无法用它来读取参数值。我还尝试了 grep ping,但我不确定这是否是一个可靠的解决方案(以防调用另一个具有 getTranslation 方法的类)。我知道 Qt 有类似的机制来查找代码中的可翻译字符串,但这是一种完全不同的技术..

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

最佳答案

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

  1. 使用 Reflections 查找项目根包中的所有类图书馆
  2. 使用 Javassist 查找类中正确类的所有 getTranslation 方法调用库并创建它们的列表(包含:包、类、行号)
  3. 从给定行读取项目目录中相应的 .java 文件,直到“;”字符
  4. 提取参数值并将其添加到列表中
  5. 找到缺失的翻译并输出
  6. 找到多余的翻译并输出

我花了一段时间才做到这一点,但至少我现在有了一个可重用的实用程序来保持翻译文件最新。

关于java - 如何以编程方式查找项目中的所有 Java 方法调用和给定参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17613668/

相关文章:

iphone - Objective-C 2.0中带下划线的实例变量和@synthetize重命名导致Xcode 4的 'Analyze'工具优化警告

java - 将 @Autowired 与 AspectJ 和 Springboot 一起使用

Java:在具有外部源的 netbeans 上自动完成源代码的方法

java - JSch ChannelSftp.ls 抛出空指针

java - 定义 map 、集合等,然后传递/获取它们

c++ - 让 clang-tidy 发现静态可推导的逻辑错误

javascript - Flow.js 从节点模块推断返回类型

c++ - 在构建期间捕获所有编译器调用和命令行参数

java - 是否可以为HttpSession设置过期时间(Jetty impl)

java - [java bean]hibernate Session 破坏了 java bean?