private <T extends Enum> void regsiterListener( EventListener<T, ?> el, Class<T> enumClass, Collection<T> events) { boolean found = false; final Set<EventListenerDescriptor> descriptorSet = getOrCreateListenerSet(enumClass); for (EventListenerDescriptor<T> descriptor : descriptorSet) { if (descriptor.getListener() == el) { descriptor.listenFor(events); found = true; break; } } if (!found) { descriptorSet.add(new EventListenerDescriptor<T>(el, events)); } }