Eclipse JDT Core - 为参数化超级方法

时间:2018-03-05 18:58:52

标签: java eclipse eclipse-jdt

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

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

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

public interface Messages extends BaseInterface<String> {}

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

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

它首先调用JavaModelSearch.findMethodInHierarchy来获取IMethod,并将其传递下来,但是后来无法找出T的返回类型

1 个答案:

答案 0 :(得分:1)

您应该首先找到org.eclipse.jdt.core.dom.ITypeBinding接口“消息”。

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

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

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