// and the loop will be complete.
while (processedListenerIndex < listenersCopy.size())
{
for (; processedListenerIndex < listenersCopy.size(); processedListenerIndex++ )
{
SystemEventListener listener = listenersCopy.get(processedListenerIndex);
// Call SystemEventListener.isListenerForSource(java.lang.Object), passing the source argument.
// If this returns false, take no action on the listener.
if (listener.isListenerForSource(source))
{
// Otherwise, if the event to be passed to the listener instances has not yet been constructed,
// construct the event, passing source as the argument
// to the one-argument constructor that takes
// an Object. This same event instance must be passed to all listener instances.
event = _createEvent(systemEventClass, source, event);
// Call SystemEvent.isAppropriateListener(javax.faces.event.FacesListener), passing the listener
// instance as the argument. If this returns false, take no action on the listener.
if (event.isAppropriateListener(listener))
{
// Call SystemEvent.processListener(javax.faces.event.FacesListener), passing the listener
// instance.
event.processListener(listener);
}
}
}
boolean listChanged = false;
if (listeners.size() == listenersCopy.size())
{
for (int i = 0; i < listenersCopy.size(); i++)
{
if (listenersCopy.get(i) != listeners.get(i))
{
listChanged = true;
break;
}
}
}
else
{
listChanged = true;
}
if (listChanged)
{
for (int i = 0; i < listeners.size(); i++)
{
SystemEventListener listener = listeners.get(i);
// check if listenersCopy.get(i) is valid
if (i < listenersCopy.size())
{
// The normal case is a listener was added,
// so as heuristic, check first
// if we can find it at the same location
if (!listener.equals(listenersCopy.get(i)))
{
if (!listenersCopy.contains(listener))
{
listenersCopy.add(listener);
}