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

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

容俊豪
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类的方法内部声明的变量使用访问说明符? 问题答案: 因为这没有意义。方法中声明的变量是该方法的局部变量。即它们不能在方法之外访问。修改变量的声明将实现什么?

  • 我有一个关于Groovy中范围规则的问题。在下面的片段中,我有三个变量,具有局部作用域,具有脚本作用域,也应该使用注释获得脚本作用域。 我在用注释指示的行上得到s。上的异常是预期的,因为该变量具有局部作用域。但我希望可以在中访问--事实并非如此。在Groovy1.8.6中没有执行任何操作,尽管升级后它可以工作,所以我想这是一个老错误。但是,在中,无论使用哪一个版本,都是不可访问的。 为什么不能访问

  • let和const是JavaScript里相对较新的变量声明方式。 像我们之前提到过的,let在很多方面与var是相似的,但是可以帮助大家避免在JavaScript里常见一些问题。 const是对let的一个增强,它能阻止对一个变量再次赋值。 因为TypeScript是JavaScript的超集,所以它本身就支持let和const。 下面我们会详细说明这些新的声明方式以及为什么推荐使用它们来代替v