Подписка IEventBroker обрабатывает одно и то же событие более одного раза и неправильно обрабатывает - PullRequest
0 голосов
/ 22 мая 2018

Я загружаю IEventBroker в приложении Eclipse RCP уровня компаса.

У меня есть два представления: Triggerer и Receiver.

Triggerer (выдержки):

private IEventBroker eventBroker = PlatformUI.getWorkbench().getService(IEventBroker.class);

btn.addSelectionListener(new SelectionAdapter() {
    public void widgetSelected(SelectionEvent e) {
        IStructuredSelection selection = viewer.getStructuredSelection();
        List selectionList = selection.toList();
        for (Object s : selectionList) {
            if (s instanceof MyObject) {
                matches.add(s);
            }
        }
        eventBroker.send(MyEventConstants.TOPIC_OBJECT_CHANGED, matches);
    }
}

Receiver (выдержки):

@Override
public void handleEvent(Event event) {
    Object data = event.getProperty(EVENT_DATA);
    switch (event.getTopic()) {
    case MyEventConstants.TOPIC_OBJECT_CHANGED:
        try {
            if (data instanceof ArrayList) {
                List<MyObject> matches = null;
                try {
                    matches = (List<MyObject>) data;
                }
                catch (ClassCastException e) {
                }
                Subthing sub = buildSubthing(matches);
                getContentViewer().getContents()
                        .setAll(Collections.singletonList(sub));
            }
        }
        break;
    }
}

buildSubthing выполняет наполнение соответствующими полученными данными и устанавливает их в содержимое редактора GEF4.

В некоторых случаях это работает просто отлично, в некоторых - нет.

handleEvent() запускается более одного раза, хотя хэш-код event всегда одинаков, и я непонимаю почему.Тема такая же, а данные тоже одинаковые.Тем не менее, buildSubthing просто без всякой причины останавливается с некоторыми данными, в то время как для других - нет.Данные структурно одинаковы в обоих случаях.

Как я могу контролировать, как часто вызывается handleEvent, так как я думаю, что количество раз, которое он вызывается, является причиной, в то время как Subthing иногда неправильно строится

...