出于兼容性原因,我必须将我的 Eclipse 插件从 JDT 3.7 调整到 3.6。不幸的是,旧版本似乎还没有方便的 .getParameters() 方法。
我需要向用户显示一个 ElementTreeSelectionDialog,允许他浏览类的方法并选择方法的参数。为此,我用这个简单的 getChildren 方法编写了一个 ITreeContentProvider:
public Object[] getChildren(Object paramObject) {
if(paramObject instanceof ICompilationUnit){
ICompilationUnit icu = (ICompilationUnit) paramObject;
try {
return icu.getAllTypes()[0].getMethods();
} catch (JavaModelException e) {
e.printStackTrace();
}
}
if(paramObject instanceof IType){
IType type = (IType) paramObject;
try {
return type.getMethods();
} catch (JavaModelException e) {
e.printStackTrace();
}
}
if(paramObject instanceof IMethod){
IMethod method = (IMethod) paramObject;
try {
return method.getParameters();
} catch (JavaModelException e) {
e.printStackTrace();
}
}
return null;
}
我想坚持使用能够使用 JavaUILabelProvider 的接口,它使用适当的图标、签名等显示所有内容。
所以棘手的部分是从参数或其他一些有效的 IJavaElement 实现创建有效的 LocalVariable 对象,这些实现将由 JavaUILabelProvider 正确显示。
我已经尝试创建一个LocalVariable []数组,但这并没有真正奏效,因为我找不到任何方法来获取元素的必要位置标记和注释对象......