如何在Java中使用antlr或javaparser查找将字符串文字分配给变量的所有赋值语句?
我试图在Java中找到硬编码的字符串赋值语句。我试图使用antlr或javaparser,但不知道如何找到赋值语句如何在Java中使用antlr或javaparser查找将字符串文字分配给变量的所有赋值语句?,java,antlr,javaparser,Java,Antlr,Javaparser,我试图在Java中找到硬编码的字符串赋值语句。我试图使用antlr或javaparser,但不知道如何找到赋值语句 Javaparser似乎是一个很好的方法。它支持声明等。我试图找到变量声明等,但不是赋值语句。如何使用它来查找赋值语句,其中字符串文字被赋值给变量。我将尝试创建一个侦听器;通过覆盖适当的方法收听赋值语句(Java8.g4中的第1196行),例如: public override void ExitAssignment(Java8Parser.AssignmentContex
Javaparser似乎是一个很好的方法。它支持声明等。我试图找到变量声明等,但不是赋值语句。如何使用它来查找赋值语句,其中字符串文字被赋值给变量。我将尝试创建一个侦听器;通过覆盖适当的方法收听
赋值
语句(Java8.g4中的第1196行),例如:
public override void ExitAssignment(Java8Parser.AssignmentContext context); // C#
检查上下文
是否通过•赋值运算符
可以应用于字符串(=
,+=
)
•如果表达式
解析为类似CharacterLiteral
或StringLiteral
您可以通过方法context.assignmentOperator()
和context.expression()
获得信息,下面是我使用的方法
- 生成示例Java文件的可视AST,例如,一个包含您正在寻找的硬编码表达式的文件。JavaParser可以输出点文件(例如),这是在AST中发现您感兴趣的节点的好方法
- 我通过可视化看到我感兴趣的节点是带有初始值设定项的
VariableDeclarator
,因此我遵循了使用VoidVisitorAdapter
的方法,并重写了相应的visit
方法。一个好的IDE(IntelliJ)帮助我完成了以下工作:
public void visit(VariableDeclarator variableDeclarator, Void arg) {
super.visit(variableDeclarator, arg);
variableDeclarator.getInitializer().ifPresent(expression -> {
expression.ifStringLiteralExpr(stringLiteralExpr -> {/* do something */})
}
请添加一些代码以确定您试图询问的内容。。