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

我试图在 Java 中找到硬编码的字符串赋值语句。我正在尝试使用 antlr 或 javaparser,但不知道如何找到赋值语句?

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


DIEA
浏览 232回答 2
2回答

饮歌长啸

这是我使用的一种方法。生成示例 Java 文件的可视化 AST,例如,带有您要查找的硬编码表达式的文件。JavaParser 可以输出 DOT 文件(例如blog entry),这是在您感兴趣的 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 */})}

慕容森

我会尝试创建一个监听器;通过覆盖适当的方法来监听assignment语句(Java8.g4 中的第 1196 行),例如:    public override void ExitAssignment(Java8Parser.AssignmentContext context);  // C#检查context通过•是否assignmentOperator可以应用于字符串 ( =, +=)• 是否expression解析为类似CharacterLiteral或StringLiteral您可以通过方法context.assignmentOperator()和获取信息context.expression()。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java