我正在编写一个简单eclipse插件,但有一个问题:当用户右键单击一个节点(可能是项目、文件、java编译单元或其他)时,我希望获得它所属的项目。
示例代码如下:
public class MyAction implements IObjectActionDelegate {
private IProject project;
public void selectionChanged(IAction action, ISelection selection) {
this.project = getSelectedProject(selection);
}
public static IProject getSelectedProject(Object obj) throws Exception {
if (obj == null) {
return null;
}
if (obj instanceof IResource) {
return ((IResource) obj).getProject();
} else if (obj instanceof IStructuredSelection) {
return getSelectedProject(((IStructuredSelection) obj).getFirstElement());
}
return null;
}
}它在大多数情况下都是有效的,但有时,例如,我右键单击一个java文件,所选内容将是一个ICompilationUnit。虽然我可以在getSelectedProject中再添加一个if,但我不认为这是一个好主意。
有没有一种方法可以获得所选对象的项目,不管选择了什么?我不想逐个添加它们。
发布于 2011-07-14 04:58:22
ICompilationUnit扩展了IAdaptable (参见http://publib.boulder.ibm.com/infocenter/rsmhelp/v7r0m0/index.jsp?topic=/org.eclipse.jdt.doc.isv/reference/api/org/eclipse/jdt/core/ICompilationUnit.html)
您可以尝试像这样使用IAdaptable接口:
if (obj instanceof IAdaptable) {
IResource res = (IResource)(((IAdaptable)obj).getAdapter(IResource.class));
if (res != null) {
return res.getProject();
}
}发布于 2011-07-12 01:43:14
没有办法将ICompilationUnit、IPackage或其他任何东西转换为IResource,因为通常没有相应的资源!例如,对于导航器中的.class元素,该元素对应于JAR文件或来自目标平台的依赖插件中的条目。
发布于 2014-01-22 14:21:07
it up回答不起作用,也许应该是:
if (obj instanceof IStructuredSelection) {
IStructuredSelection selection1 = (IStructuredSelection)obj;
Object element = selection1.getFirstElement();
IProject project = null;
if (element instanceof IProject) {
project = (IProject) element;
} else if (element instanceof IAdaptable) {
project = (IProject) ((IAdaptable) element).getAdapter(IProject.class);
}
if (project != null) {
return project;
}
}https://stackoverflow.com/questions/6649044
复制相似问题