Eclipse 4 RCP HandlerProcessingAddon порядок запуска
У меня есть чистое приложение e4 с множеством плагинов.
Некоторые из этих плагинов помогают обработчикам использовать модель приложения. Я заметил, что с добавлением обработчиков порядок запуска изменился, и теперь все плагины загружаются еще до того, как даже появилась индикаторная заставка. Как только он появляется, он завершается очень быстро.
Я вызываю PlatformUI.createAndRunWorkbench() в моем активаторе, и там вызывается E4Application.createE4Workbench(). Это проходит через аддоны, на которые есть ссылки в Applicaion.e4xmi, и одним из них является HandlerProcessingAddon, который перебирает и активирует все обработчики в модели приложения. Из-за моих зависимостей между моими плагинами это заканчивается загрузкой всех моих плагинов.
После этого индикатор выполнения инициализируется.
Это, очевидно, нежелательно, поскольку индикатор загрузки должен прогрессировать по мере загрузки плагинов.
Вот код, о котором я говорю в Workbench.java
E4Workbench e4Workbench = e4app.createE4Workbench(getApplicationContext(), display);
MApplication appModel = e4Workbench.getApplication();
IEclipseContext context = e4Workbench.getContext();
WorkbenchMigrationProcessor migrationProcessor = null;
try {
migrationProcessor = ContextInjectionFactory.make(WorkbenchMigrationProcessor.class, context);
} catch (InjectionException e1) {
WorkbenchPlugin.log(e1);
}
if (migrationProcessor != null && isFirstE4WorkbenchRun(appModel)
&& migrationProcessor.isLegacyWorkbenchDetected()) {
try {
WorkbenchPlugin
.log(StatusUtil.newStatus(IStatus.INFO, "Workbench migration started", null)); //$NON-NLS-1$
migrationProcessor.migrate();
} catch (Exception e2) {
WorkbenchPlugin.log("Workbench migration failed", e2); //$NON-NLS-1$
migrationProcessor.restoreDefaultModel();
}
}
// create the workbench instance
Workbench workbench = new Workbench(display, advisor, e4Workbench
.getApplication(), e4Workbench.getContext());
// prime the splash nice and early
if (createSplash)
workbench.createSplashWrapper();
AbstractSplashHandler handler = getSplash();
boolean showProgress = PrefUtil.getAPIPreferenceStore().getBoolean(
IWorkbenchPreferenceConstants.SHOW_PROGRESS_ON_STARTUP);
IProgressMonitor progressMonitor = null;
SynchronousBundleListener bundleListener = null;
if (handler != null && showProgress) {
progressMonitor = handler.getBundleProgressMonitor();
if (progressMonitor != null) {
Что я могу с этим поделать? Или мне нужно разместить в своих обработчиках разные плагины, чтобы их создание не привело к загрузке всех пакетов?