Мне нужно выполнить некоторый код только для RCP, а не для RAP, как я могу это сделать?

Я работаю над eclipse RCP/RAP с одним источником. мне нужно выполнить некоторый код в методах resotreState() и saveState() класса ApplicationWorkbenchAdvisor, который нужен только для RCP, но не для RAP. Каков наилучший способ реализовать это?


person Sharif    schedule 25.01.2015    source источник


Ответы (1)


Если код, который должен выполняться только в RCP, компилируется на обеих платформах, вы можете запросить SWT#getPlatform() следующим образом:

if( !SWT.getPlatform().startsWith( "rap" ) ) {
  // execute RCP code
}

Если код RCP использует API, недоступный на обеих платформах, я рекомендую извлечь код во фрагмент и развернуть только этот фрагмент с приложениями RCP. Чтобы узнать больше об этом, поищите «рэп из одного источника».

person Rüdiger Herrmann    schedule 25.01.2015
comment
См. следующий код: @Override public IStatus saveState(IMemento memento) { TerminalCompatibility.saveState(memento); ServerStorageController.getInstance().saveState(memento); return super.saveState(memento); } — этот код зависит от IMemento. Могу ли я переместить этот код в конкретный фрагмент RCP. я не хочу писать пустые классы совместимости. - person Sharif; 28.01.2015
comment
IMemento доступен на обеих платформах, так что вы можете использовать первый подход и защитить код, который сохраняет состояние с условием if. - person Rüdiger Herrmann; 28.01.2015