java - 找出JDT中调用的方法的类型

标签 java eclipse eclipse-plugin eclipse-jdt

在此代码中,prosseek.B#bar()方法调用prosseek.SuperA#foo()。

package prosseek;

public class SuperA {
    int i = 0;
    public void foo()
    {
        System.out.println(i);
    }
}

public class B {
    public void bar()
    {
        SuperA a = new SuperA();
        a.foo();
    }
}

我需要检测 bar() 中调用的 foo() 的类型。 我使用 ASTVisitor 检测 MethodInitation 代码 (a.foo()),但我不确定应该做什么才能从中获取 SuperA 类型。

ICompilationUnit icu = type.getCompilationUnit();
final ASTParser parser = ASTParser.newParser(AST.JLS3);
parser.setKind(ASTParser.K_COMPILATION_UNIT);
parser.setSource(icu);
parser.setResolveBindings(true); // we need bindings later on
CompilationUnit unit = (CompilationUnit) parser.createAST(null);

unit.accept(new ASTVisitor() {
    public boolean visit(MethodInvocation methodInvocation)
    {
        // ???

        return false;
    }
}

添加

我从 JDT 基础教程中得到了提示。

enter image description here

我尝试了以下代码:

IBinding binding = methodInvocation.resolveTypeBinding();
IType type = (IType)binding.getJavaElement();
if (type == null)
    return false;

但是,我得到了 Binding.getJavaElement(); 的返回值 null;

最佳答案

您可能需要从表达式中获取类型,而不是获取MethodInitation的类型。我尚未对此进行测试,但这可能会有所帮助。

public boolean visit(MethodInvocation node) {
    Expression exp = node.getExpression();
    ITypeBinding typeBinding = node.getExpression().resolveTypeBinding();
    System.out.println("Type: " + typeBinding.toString());
}

关于java - 找出JDT中调用的方法的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14428483/

相关文章:

java - 从日期范围选择中选择第一个和最后一个日期

java - fatal error 或无法启动 JNLP

linux - htop 显示 Eclipse 的多个进程

java - 我需要 IMarker 的 char_start 和 char_end

java - Java中使用for循环的等边三角形

java - Java任务中的错误处理

c - 如何在 Eclipse 中记录 C 代码(intellisense/javadoc like tooltips)

android - 无法在 Eclipse 中创建 Android 应用程序。红色 x 图标由 'Theme'

java - 我需要 eclipse 的旧插件 jdo

java - 聆听新贝壳