Как получить проект, если щелкнуть правой кнопкой мыши проект / файл / другие в eclipse-плагине - PullRequest
4 голосов
/ 11 июля 2011

Я пишу простой плагин 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. Хотя я могу добавить еще if в getSelectedProject, но я не думаю, что это хорошая идея.

Есть ли способ получить в проекте выбранные объекты, какие объекты были выбраны? Я не хочу добавлять их один за другим.

Ответы [ 3 ]

2 голосов
/ 14 июля 2011

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();
    }
}
0 голосов
/ 22 января 2014

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;
        }
    }
0 голосов
/ 11 июля 2011

Нет никакого способа преобразовать ICompilationUnit, IPackage или что-либо еще в IResource, поскольку чаще всего нет соответствующего ресурса! Например. для элементов .class в навигаторе элемент соответствует записи в файле JAR или в подключаемом модуле зависимостей с целевой платформы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...