Перспектива пуста после первого звонка - PullRequest
0 голосов
/ 04 декабря 2018

Недавно я портировал все перспективы и виды с RCP 3 на RCP 4. Теперь я хотел бы переключаться между перспективами в своем приложении RCP 4.

После первого изменения перспективы на перспективу.

!MESSAGE Perspective with name 'perspective_label' and id 'PerspectiveName' has been made into a local copy

Для переключения перспективы я использую это

@Inject
private static MApplication app;

@Inject 
private static EPartService partService;

@Inject 
private static EModelService modelService;

@Inject
private static MWindow window;

private static void switchPerspective(final String id)
{   
    final Optional<MPerspective> perspective = PerspectiveSwitcherToolbar.findPerspective(id);
    if(perspective.isPresent()) 
    {
        partService.switchPerspective(perspective.get());
    } 
    else 
    {
        System.out.println("Perspective not found");
    }
}

private static Optional<MPerspective> findPerspective(final String perspectiveId) 
{
    final MUIElement element = modelService.find(perspectiveId, app);
    if(element instanceof MPerspective)
    {
        perspectiveIdsToElement.put(perspectiveId, (MPerspective) element);
        return Optional.of((MPerspective)element);
    } 

    System.out.println("Wrong type " + element);
    return Optional.empty();
}

При первом вызове для переключения перспективыменяется правильно.На второй звонок findPerspective возвращает empty().

Я нашел этот вопрос, который, кажется, примерно такой же, но не решает проблему.

Открыть перспективу программно

Что может быть причиной этого?

1 Ответ

0 голосов
/ 04 декабря 2018

Сообщение «сделано в локальную копию» поступает из WorkbenchPage части кода режима совместимости 3.x.Он пытается найти перспективу в списке перспектив 3.x и терпит неудачу (потому что вы создали ее с помощью API e4).

Похоже, что вы действительно не можете легко использовать API перспективы e4, пока у вас есть код режима совместимости 3.x.

...