我对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的返回类型
答案 0 :(得分:1)
您应该首先找到org.eclipse.jdt.core.dom.ITypeBinding
接口“消息”。
从那里,您可以导航到getSuperclass()
或您的getInterfaces()
。这应该授予对参数化类型“BaseInterface&lt; String&gt;”的访问权限(请注意,由IType
,IMethod
等组成的轻量级JavaModel不支持此处所需的参数化类型的概念。。
从后一个绑定中,要求getDeclaredMethods()
应该回答所需的方法“String test()”,返回类型为“String”。
为了获得更多灵感,您可能希望查看内部方法org.eclipse.jdt.internal.corext.dom.Bindings .findMethodInHierarchy(ITypeBinding, String, ITypeBinding[])
。