为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

DIEA 2022-05-21 20:14:01
我试图在 Java 中找到硬编码的字符串赋值语句。我正在尝试使用 antlr 或 javaparser,但不知道如何找到赋值语句?Javaparser 似乎是一个不错的选择。它支持声明等。我试图找到变量声明等,但不是赋值语句。我如何使用它来查找将字符串文字分配给变量的赋值语句。
查看完整描述

2 回答

?
饮歌长啸

TA贡献1951条经验 获得超3个赞

这是我使用的一种方法。


生成示例 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 */})

}


查看完整回答
反对 回复 2022-05-21
?
慕容森

TA贡献1853条经验 获得超18个赞

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

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

检查context通过
•是否assignmentOperator可以应用于字符串 ( =+=)
• 是否expression解析为类似CharacterLiteralStringLiteral

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


查看完整回答
反对 回复 2022-05-21
  • 2 回答
  • 0 关注
  • 186 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信