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

如何以编程方式在项目中查找所有Java方法调用和给定参数?,java,static-analysis,Java,Static Analysis,我有一个多语言web应用程序,它从单个对象获取所有翻译,例如lang.getTranslation(“Login”),该对象负责在用户语言的xml文件中查找翻译 我想做的是一个脚本/自定义静态分析,输出所有缺失的翻译和应用程序中不再使用的翻译。我认为我应该从编程的方式查找对getTranslation方法和string参数的每次调用开始,将数据存储在一个特殊的结构中,并将其与所有翻译文件进行比较 有没有一个图书馆可以让我轻松地做到这一点?我已经找到了,但无法使用它读取参数值。我还尝试了grepp

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

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

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


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

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

  • 使用库查找项目根包中的所有类
  • 在使用库的类中查找正确类的所有
    getTranslation
    方法调用,并创建它们的列表(包含:包、类、行号)
  • 从给定行读取项目目录中相应的.java文件,直到“;”性格
  • 提取参数值并将其添加到列表中
  • 找到缺少的翻译并输出它们
  • 找到多余的翻译并输出它们

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

    如果您在源代码中的所有位置都调用了
    lang.getTranslation()
    ,您可以进行“调用”搜索-只需使用您的IDE即可。否则,很难确定是否使用了某些东西。您可以添加一个日志机制,找出所使用的内容,并将其与可用文本列表进行比较,以筛选出一段时间内未使用的内容……如果您希望以编程方式执行此操作:读取项目目录中的每个
    .java
    文件。阅读每一行并检查
    lang.getTranslation()
    是否是该行的子字符串。如果是这样,
    regex
    out字符串参数并将其添加到ArrayList或类似的内容中。然后将其与所有字符串参数的列表进行比较。老实说,这是对轮子的重新发明。DaDaDom:我在IDE中已经做到了这一点,而且我有一个记录机制来记录丢失的翻译。但是,我不能一次生成所有可能的字符串和错误消息,我不想手动搜索字符串。我是一个懒惰的程序员,而且懒惰的程序员不会手工操作;)如果只传递静态字符串,比如硬编码的
    “Login”
    ,那么可以使用一个大的枚举来确保翻译存在(编译器支持)。然后可以将枚举与转换文件进行比较。如果您想通过约定动态组合翻译键,那么使用枚举可能会很烦人,文本更灵活,但也更脆弱。只需指出,支持多语言的内置方法是java.util.ResourceBundle。如果找不到条目,则会抛出异常,尽管没有找到“额外”条目的好方法。