java - ASTParser - 方法调用 - 如何检测静态方法调用

标签 java abstract-syntax-tree

示例代码:

String.valueOf("test");

此代码的访问者:

cu.accept(new ASTVisitor()
{
    public boolean visit(MethodInvocation inv)
    {               
        System.out.println(inv);
        System.out.println(inv.getExpression().getClass());
        return true;
    }
});

输出:

String.valueOf("test")
class org.eclipse.jdt.core.dom.SimpleName

但非静态调用也会返回 SimpleName。

其次,我尝试获取resolveMethodBinding(),但这里没有任何方法可以帮助我检测是否是静态方法。

有人知道这样做吗?谢谢

最佳答案

您需要构建具有可用绑定(bind)的 AST,然后调用:

IMethodBinding binding = inv.resolveMethodBinding();
if (binding.getModifiers() & Modifier.STATIC > 0) {
  // method is static method
} else {
  // method is not static
}

关于java - ASTParser - 方法调用 - 如何检测静态方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31655807/

相关文章:

java - 调试 Android 应用程序崩溃

java - 创建具有空值的对象

java - 静态单例类变为 null

abstract-syntax-tree - 在 xtext 中查看解析树/节点模型/AST

c++ - 是否可以在编译 (g++) 之前使用实例化模板查看 C++ 代码?

parsing - 如何比较两个源代码文件/ast 树?

Java : How to print the content of s3 bucket

java - 无法在 Android 应用程序中使用外部数据库

php - 替换 php 变量声明中的 $

c - 在字节码中存储值