Как HandlerManager работает с источником? - PullRequest
2 голосов
/ 07 февраля 2012

Я проанализировал HandlerManager и Я не не вижу, как он обрабатывает источник событий.Строка 117:

public void fireEvent(GwtEvent<?> event) {
    ...
    Object oldSource = event.getSource();
    event.overrideSource(source);
    try {

      // May throw an UmbrellaException.
      eventBus.fireEvent(event); // <--- LOOK HERE
    } catch (com.google.web.bindery.event.shared.UmbrellaException e) {
      throw new UmbrellaException(e.getCauses());
    } finally {
      ....
    }
}

Но простая шина событий Реализация имеет следующий код, строка 86:

@Override
public void fireEvent(Event<?> event) {
    doFire(event, null); // <---- SOURCE IS NULL???
}

@Override
public void fireEventFromSource(Event<?> event, Object source) {
    if (source == null) {
      throw new NullPointerException("Cannot fire from a null source");
    }
    doFire(event, source);
}

Итак, HandlerManager не генерировать события с источником, потому что он всегда вызывает doFire (event, null);

Не могли бы вы пояснить, как HandlerManager генерирует событие для источника?Как HandlerManager используется в Widget, как он запускает события только для экземпляра Widget?

1 Ответ

2 голосов
/ 07 февраля 2012

doFire в SimpleEventBus изменяет источник события только в том случае, если аргумент source не null.

HandlerManager сначала устанавливает источник события с помощью overrideSource, а затем вызывает doFire с неявным null источником, чтобы он не перезаписывал его.

QED.

...