Andere Tipps

, um die Auswahl-Dienstes finden Sie die aktuell ausgewählte Objekt geben, können Sie dann den Typ Auswahl prüfen und das Projekt erhalten, basierend auf der Auswahl.

Wenn Sie eine ISelectionListener erstellen und registrieren Sie sich als Zuhörer auf dem ISelectionService, werden Sie immer dann, wenn die aktive Auswahl Änderungen benachrichtigt werden, und einen Verweis auf die Auswahl und den Besitz Teil gegeben werden.

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

Sehen Sie dieses Artikel auf dem Eclipse-Auswahl Service für weitere Details.

Ich habe eine nette Funktion von den Pfosten oben erstellt, und fügte einige Updates. Arbeitet mit aktuellen Eclipse.

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

Rich-Verkäufer und VonC haben beide gute Antworten zur Verfügung gestellt, aber sie scheinen nicht vollständig genug / verwendet interne Klassen. Ich habe mit dem folgenden kommen.

@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;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top