我正在创建一个eclipse插件,它应该处理Project explorer中所有已打开的项目。它将在所选项目中创建一个文件。
我正在使用波纹管逻辑来获取当前项目。
public IProject getCurrentProject() {
IProject project = null;
IWorkbenchWindow window = PlatformUI.getWorkbench()
.getActiveWorkbenchWindow();
if (window != null) {
ISelection iselection = window.getSelectionService().getSelection();
IStructuredSelection selection = (IStructuredSelection) iselection;
if (selection == null) {
return null;
}
Object firstElement = selection.getFirstElement();
if (firstElement instanceof IResource) {
project = ((IResource) firstElement).getProject();
} else if (firstElement instanceof PackageFragmentRoot) {
IJavaProject jProject = ((PackageFragmentRoot) firstElement)
.getJavaProject();
project = jProject.getProject();
} else if (firstElement instanceof IJavaElement) {
IJavaProject jProject = ((IJavaElement) firstElement)
.getJavaProject();
project = jProject.getProject();
}
}
return project;
}
这是在开发者模式下工作。但是在我作为插件导出并安装后,发生了以下错误。
org.eclipse.e4.core.di.InjectionException: java.lang.ClassCastException: org.eclipse.jface.text.TextSelection cannot be cast to org.eclipse.jface.viewers.IStructuredSelection
看起来选择已经切换到编辑器,因为它已经集中。 有没有通用的方法来获得当前的项目?
答案 0 :(得分:5)
Eclipse并没有“当前项目”的概念。选择服务为您提供当前活动部件的选择,可以是编辑器或视图。
如果从ISelectionService.getSelection
返回的选择不是IStructuredSelection
,则活动部分可能是编辑器。因此,在这种情况下,您可以尝试使用以下内容从活动编辑器获取当前项目:
IWorkbenchPage activePage = window.getActivePage();
IEditorPart activeEditor = activePage.getActiveEditor();
if (activeEditor != null) {
IEditorInput input = activeEditor.getEditorInput();
IProject project = input.getAdapter(IProject.class);
if (project == null) {
IResource resource = input.getAdapter(IResource.class);
if (resource != null) {
project = resource.getProject();
}
}
}