Jak uzyskać nazwę bieżącego projektu zaćmienia? Jestem w widoku GMF i potrzebuję nazwy projektu, gdy używane jest pewne podmenu menu podręcznego.Jak uzyskać nazwę projektu w czasie zaćmienia?
Odpowiedz
Ten GMF class ma prostą odpowiedź, jeśli masz dostęp do nazwy ResourcesPlugin:
IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(myBundleName);
odpowiedź rodzajowe (z potentially outdated code) może być jak (jeśli masz edytor otwarty):
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
}
Jeśli żaden edytor jest otwarty:
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();
Korzystając z usługi wyboru, otrzymasz aktualnie wybrany obiekt, możesz następnie sprawdzić typ selekcji i pobrać projekt w oparciu o wybór.
Jeśli utworzysz moduł ISelectionListener i zarejestrujesz się jako program nasłuchujący w serwisie ISelectionService, otrzymasz powiadomienie o każdej zmianie aktywnego wyboru i otrzymasz odniesienie do zaznaczenia i części będącej właścicielem.
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();
}
}
Zobacz ten article on the Eclipse selection service więcej szczegółów.
Prawdopodobnie bardziej precyzyjna odpowiedź niż moja. +1 – VonC
+1, ale lepiej korzystaj z platformy PlatformUI.getWorkbench() zamiast Workbench.getInstance(). –
Rich sprzedawca i VonC dostarczyli dobre odpowiedzi, ale nie wydawali się wystarczająco kompletni/wykorzystali klasy wewnętrzne. Wymyśliłem następujące.
@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;
}
Stworzyłem fajną funkcję z powyższych wpisów, a także dodano kilka aktualizacji. Działa z obecnym zaćmieniem.
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;
}
- 1. Czy istnieje skrót klawiaturowy do odświeżania projektu w czasie zaćmienia?
- 2. Jak wprowadzić znaki Unicode w czasie zaćmienia?
- 3. Jak otworzyć projekt z obszaru roboczego w czasie zaćmienia?
- 4. Jak zdobyć użytkownika systemu w mrówce (w czasie zaćmienia)?
- 5. konwersja projektu Netbeans do projektu zaćmienia
- 6. Jak uniknąć zdalnego działania Eksploratora systemu w czasie zaćmienia?
- 7. Dodawanie obrazu do projektu internetowego zaćmienia
- 8. Wyświetlanie dużych plików XML w czasie zaćmienia?
- 9. Usuwanie spacji w czasie zaćmienia - Z komentarzy:
- 10. Jak wyeksportować zasięg emmy do HTML w czasie zaćmienia?
- 11. Jak skonfigurować hibernację w samodzielnej (Swing) aplikacji w czasie zaćmienia?
- 12. Jak zmienić kolor tła makra warunkowego w czasie zaćmienia?
- 13. Jak możemy uruchomić niestandardowe polecenie w czasie zaćmienia?
- 14. Jak zmienić kolor tła widoku nawigatora w czasie zaćmienia?
- 15. Jak zmienić kolor czcionki widoku javadoc w czasie zaćmienia?
- 16. Jak połączyć hibernację z PostgreSQL w czasie zaćmienia?
- 17. Uzyskaj nazwę projektu WPF
- 18. Nie można utworzyć projektu w czasie zaćmienia za pomocą wtyczki gwt-maven
- 19. Użycie Zaćmienia CDT bez tworzenia projektu
- 20. Netbeans: jak zmienić nazwę projektu?
- 21. Jak uzyskać identyfikator debugowania obiektu zaćmienia?
- 22. Jak zmienić nazwę projektu w SonarQube 5.1?
- 23. Jak zmienić nazwę projektu w Android Studio
- 24. Jak zmienić nazwę projektu w Android Studio
- 25. Jak zmienić nazwę projektu Django w PyCharm?
- 26. Jak importować dll do projektu Android Java (pracuje z zaćmienia)
- 27. Jak usunąć natywne wsparcie z projektu Android w czasie zaćmienia, ponieważ w programie Eclipse występują błędy w jni?
- 28. Dodawanie/ponowne dodawanie przycisków do paska narzędzi w czasie zaćmienia?
- 29. Przekierowanie stdin z pliku w czasie zaćmienia z konfiguracją uruchamiania
- 30. Android - Jak dynamicznie ustawić nazwę pakietu w czasie kompilacji dla projektu Open-source?
Na GMF innej części MyPlugin do:.... 'IViewPart [] = {yourPluginName części} DiagramEditorPlugin.getInstance() getWorkbench() getActiveWorkbenchWindow() getActivePage() getViews();' Twoja nazwa wtyczki GMF znajduje się w .genmodel. – Ring