如何在eclipse-plugin中右键单击项目/文件/其他项目时获取项目

我写了一个简单的
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中添加一个,但我认为这不是一个好主意.

有没有办法让选定对象的项目无法选择什么?我不想一个一个地添加它们.

最佳答案 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();
    }
}
点赞