代码之家  ›  专栏  ›  技术社区  ›  CONSTPLANK

如何使用menuContribution在Eclipse的project Explorer中访问所选项目的路径?

  •  0
  • CONSTPLANK  · 技术社区  · 2 年前

    我想在eclipse项目资源管理器中获得所选项目的路径,我已经在右键菜单上创建了一个menuContribution,想访问处理程序中的路径。

    我尝试了此代码,但无法导入ProjectExplorer类。

    @Override public Object execute(ExecutionEvent event) throws ExecutionException { // Get the active part IPartService partService = (IPartService) PlatformUI.getWorkbench().getService(IPartService.class); IPart activePart = partService.getActivePart();
    // Check if the active part is a Project Explorer
    if (activePart instanceof ProjectExplorer) {
        // Get the selected projects
        List<IProject> selectedProjects = ((ProjectExplorer) activePart).getSelectedProjects();
    
        // Get the path of the selected project
        if (selectedProjects.size() > 0) {
            IProject selectedProject = selectedProjects.get(0);
            String path = selectedProject.getFullPath().toString();
    
            // Do something with the path
            System.out.println(path);
        }
    }
    
    return null;
    }
    
    0 回复  |  直到 2 年前
        1
  •  0
  •   Henning Luther    2 年前

    因此,无论视图或编辑器中当前的选择是什么,我都有一些代码来获取项目-我知道它不完整,但对大多数人来说应该这样做-希望它能有所帮助:

    @Override
    public final Object execute(ExecutionEvent event) throws ExecutionException {
        ISelection selection = HandlerUtil.getActiveMenuSelection(event);
        IResource resource = Activator.getSelectedResource(selection);
        IProject project = resource.getProject();
        //do something
    
        return null;
    }
    
    public static IResource getSelectedResource(ISelection selection) {
    if (selection instanceof TreeSelection) {
      Object selectedElement = ((TreeSelection) selection).getFirstElement();
      if (selectedElement instanceof IResource) {
        return (IResource) selectedElement;
      } else if (selectedElement instanceof IPackageFragmentRoot) {
        return ((IPackageFragmentRoot) selectedElement).getResource();
      } else if (selectedElement instanceof IJavaProject) {
        return ((IJavaProject) selectedElement).getProject();
      }
    } else if (selection instanceof TextSelection) {
      IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
      IEditorPart editor = page.getActiveEditor();
      if (editor.getEditorInput() instanceof IFileEditorInput fei) {
        return fei.getFile();
      }
    }
    return null;
    

    }