我对 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()
。这应该授予对参数化类型“BaseInterfaceIType
、IMethod
等不支持此处所需的参数化类型的概念)。
从后一个绑定(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/