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) {

Что я могу с этим поделать? Или мне нужно разместить в своих обработчиках разные плагины, чтобы их создание не привело к загрузке всех пакетов?

0 ответов

Другие вопросы по тегам