java - Eclipse JDT Core - 解析参数化 super 方法的通用返回类型

标签 java eclipse eclipse-jdt

我对 JDT api 缺乏经验,所以如果有人可以帮助我,那就太好了。

我的问题是如何解析下面代码中测试方法的返回类型?

public interface BaseInterface<T> {
    T test();
}

public interface Messages extends BaseInterface<String> {}

我尝试过在 google 和 stackoverflow 上进行各种搜索(ASTParser、访问者、方法绑定(bind)等),但似乎找不到一种简单的方法来使用 JDT 获取返回类型。

编辑*** 这与我在https://github.com/gwt-plugins/gwt-eclipse-plugin/issues/373中创建/发现的错误有关。 ,并试图修复它。我第一次使用 JDT 和 gwt-eclipse 插件代码,所以这只是一个尝试,不确定您是否可以提供任何建议。整个事情可能需要以稍微不同的方式进行攻击。

它首先调用 JavaModelSearch.findMethodInHierarchy,它获取 IMethod,并将其向下传递,但随后无法确定 T 的返回类型

最佳答案

您应该首先找到接口(interface)“Messages”的org.eclipse.jdt.core.dom.ITypeBinding

从那里您可以导航到 getSuperclass() 或在您的情况下导航到 getInterfaces()。这应该授予对参数化类型“BaseInterface”的访问权限(注意,轻量级 JavaModel 由 ITypeIMethod 等不支持此处所需的参数化类型的概念)

从后一个绑定(bind)中,询问 getDeclaredMethods() 应该回答所需的方法“String test()”,返回类型确实为“String”。

为了获得更多灵感,您可能需要查看内部方法 org.eclipse.jdt.internal.corext.dom.Bindings .findMethodInHierarchy(ITypeBinding, String, ITypeBinding[]).

关于java - Eclipse JDT Core - 解析参数化 super 方法的通用返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49117612/

相关文章:

java - 如何在 Java 类中限制对象创建不超过 3 个?

java - Eclipse 自动重构字符串比较

java - 安卓 : import libraries Like PhotoView

java - 如何使用 CAPTURE 绑定(bind)创建 AST?

java - 以编程方式将 Xtend 类设置为 Java 类的父类(super class)

Java swing GridLayout 调整单元格大小

java - 使用 Gson 将单个 json 条目解析为多个对象

java - 从另一个类访问变量

java - 提高Java的计算能力

java - 将 Eclipse JDT ITypeBinding 转换为类型