在進行eclipse外掛程式開發的時候,我們經常需要知道當前選中的項目是什麼,以便針對項目做一些處理。通過當前項目,我們更可以得到項目中的任何目錄和檔案。所以獲得當前項目的是很有用的。
google了一下這方面的資料。基本都說是通過ISelection來獲得。可是ISelection卻沒說從哪裡來,一般都是當做抽象方法的參數,在我們實現方法時傳給我們。可是這樣很不爽,我們可能經常會需要在沒有ISelection參數的方法中獲得當前project對象。
沒關係,使用下面這段代碼就可以讓我們在我們外掛程式裡的任何地方得到當前項目:
Java代碼 public static IProject getCurrentProject(){ ISelectionService selectionService = Workbench.getInstance().getActiveWorkbenchWindow().getSelectionService(); ISelection selection = selectionService.getSelection(); IProject project = null; if(selection instanceof IStructuredSelection) { Object element = ((IStructuredSelection)selection).getFirstElement(); if (element instanceof IResource) { project= ((IResource)element).getProject(); } else if (element instanceof PackageFragmentRootContainer) { IJavaProject jProject = ((PackageFragmentRootContainer)element).getJavaProject(); project = jProject.getProject(); } else if (element instanceof IJavaElement) { IJavaProject jProject= ((IJavaElement)element).getJavaProject(); project = jProject.getProject(); } } return project; }
上述是抄襲網上的做法,擷取選中的節點然後擷取工程當然是合理的。只是有時候未必好用,因為你不清楚你選中的到底是什麼。
Java代碼 public static IProject getProject(){ IProject project = null; //1.根據當前編輯器擷取工程 IEditorPart part = getActiveEditor(); if(part != null){ Object object = part.getEditorInput().getAdapter(IFile.class); if(object != null){ project = ((IFile)object).getProject(); } } if(project == null){ ISelectionService selectionService = Workbench.getInstance().getActiveWorkbenchWindow().getSelectionService(); ISelection selection = selectionService.getSelection(); if(selection instanceof IStructuredSelection) { Object element = ((IStructuredSelection)selection).getFirstElement(); if (element instanceof IResource) { project= ((IResource)element).getProject(); } else if (element instanceof PackageFragmentRootContainer) { IJavaProject jProject = ((PackageFragmentRootContainer)element).getJavaProject(); project = jProject.getProject(); } else if (element instanceof IJavaElement) { IJavaProject jProject= ((IJavaElement)element).getJavaProject(); project = jProject.getProject();