RCP - правильный регистр слушателя не из поля зрения - PullRequest
2 голосов
/ 04 февраля 2010

Я пытаюсь зарегистрировать свой класс как PostSelectionListener из отдельного плагина (этот класс не является представлением, только простой класс), я использую это:

Workbench.getInstance().getActiveWorkbenchWindow().getSelectionService().
    addPostSelectionListener(VIEWS_VISUALIZATION_TYP_ID, this);

Работает нормально, но у меняпредупреждение:

- Discouraged access: The method getActiveWorkbenchWindow() 
from the type Workbench is not accessible due to restriction on required library F:
  \elipseSource\plugins\org.eclipse.ui.workbench_3.5.1.M20090826-0800a.jar
- Discouraged access: The method getInstance() 
from the type Workbench is not accessible due to restriction on required library F:\elipseSource\plugins
  \org.eclipse.ui.workbench_3.5.1.M20090826-0800a.jar
- Discouraged access: The type Workbench is not accessible 
due to restriction on required library F:\elipseSource\plugins
  \org.eclipse.ui.workbench_3.5.1.M20090826-0800a.jar

Как правильно зарегистрировать слушателя?

Ответы [ 2 ]

4 голосов
/ 04 февраля 2010

Я нашел решение вместо

Workbench.getInstance ()

Я должен использовать:

PlatformUI.getWorkbench()

Я новичок в RCP, поэтому для меня это было неочевидно

2 голосов
/ 04 февраля 2010

Убедитесь, что это проблема генерации MANFEST.MF (см. эту ветку )

Откройте MANIFEST.MF базового проекта и посмотрите на вкладку Runtime.
Пакеты, к которым нужно получить доступ в других плагинах, должны быть перечислены как Экспортируемые пакеты.

Попробуйте пересчитать правильный список экспортируемых пакетов.

Если это не работает, как описано в этой теме , у вас все еще есть возможность отключить предупреждение :

  • Windows -> Настройки -> Java -> Компилятор -> Ошибки / предупреждения
  • (или: Project) Свойства -> Компилятор Java -> Ошибки / Предупреждения

alt text

Параметры «Предупреждение» или «Игнорировать» только скрывают потенциальную проблему в проекте, позволяя проекту использовать любые классы, игнорирующие предопределенные правила доступа.
Чтобы полностью решить эту проблему, проанализируйте проект и найдите использование ограниченных классов и выполните необходимые действия (либо удалите эти ссылки, либо правила доступа).


Для внешней банки (не в вашем случае), Потенциальный обходной путь :

Если я добавлю файл Jar в качестве внешнего файла Jar и переместу его вверх перед системной библиотекой JRE (в порядке экспорта), я не получу эту ошибку.


На самом деле OP slowik удалось избежать зависимости, получив доступ к сервисам Workbench через PlatformUI

PlatformUI.getWorkbench()

вместо Workbench.getInstance()

Этот подход используется в классе rcp.util.RCPUtil:

/**
 * Returns wether the ViewPart with the given id is currently visble in
 * one of the pages of the active Workbench window. Will also return
 * true when the page-book containing this view is minimized.
 *
 * @param viewID The id of the view to be queried
 * @return Wether the view is visible
 */
 public static boolean isViewVisible(String JavaDoc viewID) {
   // IWorkbenchPage[] pages = Workbench.getInstance().getActiveWorkbenchWindow().getPages();
   IWorkbenchPage[] pages = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getPages();
   for (int i = 0; i < pages.length; i++) {
     IWorkbenchPart part = pages[i].findView(viewID);
     if (part != null) {
       return isPartVisible(part);
     }
   }
   return false;
 }
...