代码之家  ›  专栏  ›  技术社区  ›  Alexander Stolz

如何在eclipse中获取项目名称?

  •  14
  • Alexander Stolz  · 技术社区  · 17 年前

    如何获取当前eclipse项目的名称?我在GMF视图中,当使用弹出菜单的某个子菜单时,需要项目名称。

    4 回复  |  直到 15 年前
        1
  •  24
  •   VonC    17 年前

    这 GMF class

    IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(myBundleName);
    

    一般答案(来自 potentially outdated code )可能类似于(如果打开了编辑器):

    IEditorPart  editorPart =
    getSite().getWorkbenchWindow().getActivePage().getActiveEditor();
    
    if(editorPart  != null)
    {
        IFileEditorInput input = (IFileEditorInput)editorPart.getEditorInput() ;
        IFile file = input.getFile();
        IProject activeProject = file.getProject();
        String activeProjectName = activeProject.getName();
        //... use activeProjectName 
    }
    

    如果未打开任何编辑器:

       IViewPart [] parts =
          MyPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getActivePage().getViews();
        IProject activeProject = null;
    
        for(int i=0;i<parts.length;i++)
        {
            if(parts[i] instanceof ResourceNavigator)
            {
                ResourceNavigator navigator = (ResourceNavigator)parts[i];
                StructuredSelection sel   =
                  (StructuredSelection)navigator.getTreeViewer().getSelection();
                IResource resource = (IResource)sel.getFirstElement();
                activeProject = resource.getProject();
                break;
            }
        }
        String activeProjectName = activeProject .getName();
    
        2
  •  8
  •   Rich Seller    17 年前

    如果您创建一个ISelectionListener并注册为ISelectionService上的侦听器,则当活动选择发生更改时,您将收到通知,并获得对该选择和所属部件的引用。

    ISelectionListener listener = new ISelectionListener() {
        public void selectionChanged(IWorkbenchPart sourcePart, ISelection selection) {
            setSourcePart(sourcePart);
            setSelection(selection);
        }
    };
    
    ...
    //register the listener
    selectionService.addSelectionListener(listener);
    
    ...
    //either get the selection service and get the selection, or use the stored version from the listener
    ISelectionService selectionService = 
        Workbench.getInstance().getActiveWorkbenchWindow().getSelectionService();
    
    ISelection selection = selectionService.getSelection();
    
    if(selection instanceof IStructuredSelection) {
        Object element = ((IStructuredSelection)selection).getFirstElement();
    
        IProject project;
        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 (selection instanceof ITextSelection) {
        if(sourcePart instanceof JavaEditor) {
            IJavaElement element = SelectionConverter.resolveEnclosingElement(sourcePart, selection);
            project = element.getJavaProject().getProject();
        }
    }
    

    article on the Eclipse selection service 更多细节。

        3
  •  5
  •   Mindaugas Jaraminas    14 年前

    public static IProject getCurrentSelectedProject() {
        IProject project = null;
        ISelectionService selectionService = 
            PlatformUI.getWorkbench().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 PackageFragmentRoot) {
                IJavaProject jProject = 
                    ((PackageFragmentRoot)element).getJavaProject();
                project = jProject.getProject();
            } else if (element instanceof IJavaElement) {
                IJavaProject jProject= ((IJavaElement)element).getJavaProject();
                project = jProject.getProject();
            }
        }
        return project;
    }
    
        4
  •  2
  •   mchr    14 年前

    Rich Seller和VonC都提供了很好的答案,但它们似乎不够完整/使用了内部类。我得出了以下结论。

    @Override
    public void createPartControl(Composite parent)
    {
      ....
    
      // Register to be notified about selections
      getSite().getWorkbenchWindow().getSelectionService()
          .addPostSelectionListener(this);
    
      // Detect the current selection
      detectCurrentSelection();
    }
    
    @Override
    public void selectionChanged(IWorkbenchPart part, ISelection selection)
    {
      IProject project = convertSelection(part, selection);
      setProject(project);
    }
    
    private void detectCurrentSelection()
    {
      IProject project = null;
    
      IWorkbenchWindow window = getSite().getWorkbenchWindow();
      IWorkbenchPage activePage = window.getActivePage();
    
      if (activePage != null)
      {
        IEditorPart part = activePage.getActiveEditor();
    
        if (part != null)
        {
          project = convertSelection(part);
        }
        else
        {
          IViewReference[] viewReferences = activePage.getViewReferences();
    
          for (IViewReference viewRef : viewReferences)
          {
            IViewPart view = viewRef.getView(false);
            ISelection selection = null;
    
            if (view instanceof IPackagesViewPart)
            {
              IPackagesViewPart viewPart = (IPackagesViewPart) view;
              TreeViewer treeViewer = viewPart.getTreeViewer();
              selection = treeViewer.getSelection();
            }
            else if (view instanceof CommonNavigator)
            {
              CommonNavigator navigator = (CommonNavigator) view;
              CommonViewer commonViewer = navigator.getCommonViewer();
              selection = commonViewer.getSelection();
            }
    
            if (selection instanceof IStructuredSelection)
            {
              IStructuredSelection structuredSelection = (IStructuredSelection) selection;
    
              project = convertSelection(structuredSelection);
    
              if (project != null)
                break;
            }
          }
        }
      }
    
      setProject(project);
    }
    
    private IProject convertSelection(IWorkbenchPart part, ISelection selection)
    {
      IProject project = null;
      if (selection instanceof IStructuredSelection)
      {
        IStructuredSelection structuredSelection = (IStructuredSelection) selection;
        project = convertSelection(structuredSelection);
      }
      else if (selection instanceof ITextSelection)
      {
        if (part instanceof IEditorPart)
        {
          IEditorPart editorPart = (IEditorPart) part;
          IResource resource = (IResource)editorPart.getEditorInput().getAdapter(IResource.class);
          if (resource != null)
          {
            project = resource.getProject();
          }
        }
      }
    
      return project;
    }
    
    private IProject convertSelection(IEditorPart part)
    {
      IProject project = null;
      IResource resource = (IResource)part.getEditorInput().getAdapter(IResource.class);
      if (resource != null)
      {
        project = resource.getProject();
      }
      return project;
    }
    
    private IProject convertSelection(IStructuredSelection structuredSelection)
    {
      IProject project = null;
      Object element = structuredSelection.getFirstElement();
    
      if (element instanceof IResource)
      {
        project = ((IResource) element).getProject();
      }
      else if (element instanceof IJavaElement)
      {
        IJavaElement javaElement = (IJavaElement) element;
        project = javaElement.getJavaProject().getProject();
      }
      else if (element instanceof IAdaptable)
      {
        IAdaptable adaptable = (IAdaptable) element;
        IWorkbenchAdapter adapter = (IWorkbenchAdapter) adaptable.getAdapter(IWorkbenchAdapter.class);
        if (adapter != null)
        {
          Object parent = adapter.getParent(adaptable);
          if (parent instanceof IJavaProject)
          {
            IJavaProject javaProject = (IJavaProject) parent;
            project = javaProject.getProject();
          }
        }
      }
    
      return project;
    }