当前位置: 首页 > 知识库问答 >
问题:

如何访问变量声明中的方法调用

容俊豪
2023-03-14

我正在检查使用JDT的方法的调用,并对其参数执行检查。我正在使用一个 AST 访问者类,该类访问方法调用节点并执行此操作。我在访客类中使用以下方法。

    public boolean visit(MethodInvocation node) {

        if (node.getName().toString().equals("createQuery")) {

            String argument= node.arguments().get(0).toString();

            // process the argument here

        }

        return true;
    }

但是作为变量声明一部分的调用没有被访问。

例如:如果我正在寻找方法“createQuery”的调用,将访问以下调用。

    session.createQuery("some query here");

但是这个没有被访问。

    Query query = session.createQuery("another query here");

我怎样才能访问这样的语句并以正确的方式获取参数?

请帮忙。

共有1个答案

盛浩阔
2023-03-14

找到它。。必须访问AST中的VariableDeclarationStatement节点并返回true。

public boolean visit(VariableDeclarationStatement node) {

    return true;
}

这样就可以访问 AST 中可变声明语句的子项。方法调用的特定类型是作为变量声明语句节点的子级出现的,因此它们也会被访问。

 类似资料:
  • 嘿,我正在为JMeter中的API测试做一些beanshell脚本。我已经用beanshell编写了很多jmeter脚本,它在使用方法调用时工作得很好,但是我有一个带有小数位数的值,其中SQL返回值为20.00000,而Json路径提取器得到值为20.0,因此在比较时测试失败。由于这个问题,我决定将这些值作为double变量而不是字符串进行比较,但在BeanShell上使用double.Parse

  • 问题内容: 如何在mysql中声明变量,以便第二个查询可以使用它? 我想写一些像: 问题答案: MySQL中主要有三种类型的变量: 用户定义的变量 (以开头): 您可以访问任何用户定义的变量,而无需对其进行声明或初始化。如果引用的变量尚未初始化,则其值为和字符串类型。 您可以使用或语句来初始化变量: 要么 可以从一组有限的数据类型中为用户变量分配一个值:整数,十进制,浮点数,二进制或非二进制字符串

  • 问题内容: 我有一个Netezza查询,在其中我引用了一系列案例陈述中的几个日期。而不是每次我都想在开始时将一个变量置为一个变量并在整个查询中都使用它时,而不是替换所有这些日期。在SAS中,我会这样做: 问题答案: 不幸的是,Netezza中没有程序SQL扩展,您无法将这样的变量用作SQL语言本身的一部分。纯粹的SQL解决方案将涉及一些麻烦,例如加入CTE并返回该值。但是,NZSQL CLI确实允

  • 问题内容: 为什么我们不能对Java类的方法内部声明的变量使用访问说明符? 问题答案: 因为这没有意义。方法中声明的变量是该方法的局部变量。即它们不能在方法之外访问。修改变量的声明将实现什么?

  • 我知道这个话题听起来像是重复的,但我并不是想在这里调试这个问题,而是想绕过它。 我的程序应该做的是:对于文件夹中的每个文件,创建一个新按钮。如果您单击此按钮,请输入您刚输入的文件夹的名称。 现在我遇到的问题是,“fileName”变量需要放在final中,因为Java提供的是对象的指针,而不是值本身。但如果我这样做,则只会为任何按钮发送最后选择的文件名。

  • 我正在尝试让一个按钮将其值与其他变量进行比较。在onClick方法中,我收到一个错误,说变量在内部类中被访问,需要声明为最终变量。问题是变量应该被更改,所以我无法使其成为最终变量。我如何解决这个问题?这是我的代码: