Eclipse插件开发之取得当前项目

Eclipse插件开发之获得当前项目

在进行eclipse插件开发的时候,我们经常需要知道当前选中的项目是什么,以便针对项目做一些处理。通过当前项目,我们更可以得到项目中的任何目录和文件。所以获得当前项目的是很有用的。
    google了一下这方面的资料。基本都说是通过ISelection来获得。可是ISelection却没说从哪里来,一般都是当做抽象方法的参数,在我们实现方法时传给我们。可是这样很不爽,我们可能经常会需要在没有ISelection参数的方法中获得当前project对象。
    没关系,使用下面这段代码就可以让我们在我们插件里的任何地方得到当前项目:

 

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;  
    }  

 

上述是抄袭网上的做法,获取选中的节点然后获取工程当然是合理的。只是有时候未必好用,因为你不清楚你选中的到底是什么。

 

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();  
                } else if(element instanceof EditPart){
                    IFile file = (IFile) ((DefaultEditDomain)((EditPart)element).getViewer().getEditDomain()).getEditorPart().getEditorInput().getAdapter(IFile.class);
                    project = file.getProject();
                } 
            }   
        }
        
        return project;
    }