Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中使用antlr或javaparser查找将字符串文字分配给变量的所有赋值语句?_Java_Antlr_Javaparser - Fatal编程技术网

如何在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

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


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 */})
    }
    

请添加一些代码以确定您试图询问的内容。。