@Override
		public Object invoke(Object proxyObject, Method method, Object[] args) throws Throwable {

			listeners.forEach(listener -> {
				try {
					method.invoke(listener, args);
				}
				catch (InvocationTargetException e) {
					Throwable cause = e.getCause();
					errorHandler.handleError(listener, cause);
				}
				catch (Throwable e) {
					errorHandler.handleError(listener, e);
				}
			});

			return null; // assumes void return type
		}
Constructs a listener set that is backed by weak references.
@param iface the listener class type.
@param isWeak true signals to use weak storage for the listeners.  If using weak storage,
       clients must keep a reference to the listener or it will eventually be removed from
       this data structure when garbage collected.
Ghidra/Framework/Generic/src/main/java/ghidra/util/datastruct/ListenerSet.java