首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在eclipse-plugin中右键单击项目/文件/其他项目时如何获取项目

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

Stack Overflow用户
提问于 2011-07-11 18:57:04
回答 3查看 1K关注 0票数 4

我正在编写一个简单eclipse插件,但有一个问题:当用户右键单击一个节点(可能是项目、文件、java编译单元或其他)时,我希望获得它所属的项目。

示例代码如下:

代码语言:javascript
运行
复制
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,但我不认为这是一个好主意。

有没有一种方法可以获得所选对象的项目,不管选择了什么?我不想逐个添加它们。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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接口:

代码语言:javascript
运行
复制
if (obj instanceof IAdaptable) {
    IResource res = (IResource)(((IAdaptable)obj).getAdapter(IResource.class));
    if (res != null) {
        return res.getProject();
    }
}
票数 2
EN

Stack Overflow用户

发布于 2011-07-12 01:43:14

没有办法将ICompilationUnitIPackage或其他任何东西转换为IResource,因为通常没有相应的资源!例如,对于导航器中的.class元素,该元素对应于JAR文件或来自目标平台的依赖插件中的条目。

票数 0
EN

Stack Overflow用户

发布于 2014-01-22 14:21:07

it up回答不起作用,也许应该是:

代码语言:javascript
运行
复制
    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;
        }
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6649044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档