如何使用antlr或javaparser查找在Java中将字符串文字分配给变量的所有赋值语句?

时间:2019-01-25 10:52:11

标签: java antlr javaparser

我试图在Java中找到硬编码的字符串赋值语句。我正在尝试使用antlr或javaparser,但没有得到如何查找赋值语句的信息?

Javaparser似乎是一个不错的选择。它支持声明等。我试图找到变量声明等,但没有赋值语句。我该如何使用它来找到将字符串文字分配给变量的赋值语句。

2 个答案:

答案 0 :(得分:0)

我会尝试创建一个侦听器;通过覆盖适当的方法来监听assignment语句(Java8.g4中的1196行),例如:

    public override void ExitAssignment(Java8Parser.AssignmentContext context);  // C#

检查通过的context是否
assignmentOperator是可以应用于字符串(=+=)的内容
•并且如果expression解析为CharacterLiteralStringLiteral

您可以通过context.assignmentOperator()context.expression()方法获得信息。

答案 1 :(得分:0)

这是我使用的一种方法。

  • 生成示例Java文件的可视化AST,例如,一个包含您要查找的硬编码表达式的文件。 JavaParser可以输出DOT文件(例如blog entry),这是在您感兴趣的AST中发现节点的好方法。
  • 我从可视化中看到,我感兴趣的节点是带有初始化程序的VariableDeclarator,所以我遵循example的使用VoidVisitorAdapter并覆盖了相应的{ {1}}方法。一个好的IDE(IntelliJ)可以帮助我完成其他工作:

    visit