Program: 57069
Project: 57069
Buggy source:
protected boolean scan(Object root,Object listener,String eventSpace,Predicate<? super Class<?>> scanWhile){
  final Class<?> clazz=listener.getClass();
  boolean hasOne=false;
  for (  Method m : Iterables.filter(ClassUtils.findAllDeclaredMethods(clazz,scanWhile),listenToMethod)) {
    Class<? extends AEvent> event=m.getParameterTypes()[0].asSubclass(AEvent.class);
    final ListenTo a=m.getAnnotation(ListenTo.class);
    boolean toMe=a.sendToMe() && ADirectedEvent.class.isAssignableFrom(event);
    final AnnotationBasedEventListener l=new AnnotationBasedEventListener(owner,root,listener,m,toMe);
    if (eventSpace != null && (a.restrictExclusiveToEventSpace() || a.restrictToEventSpace())) {
      if (a.restrictExclusiveToEventSpace())       l.setExclusiveEventSpace(eventSpace);
 else       l.setEventSpace(eventSpace);
    }
    register(event,l);
    hasOne=true;
  }
  for (  Field f : Iterables.filter(ClassUtils.findAllDeclaredFields(clazz,scanWhile),deepScanField)) {
    f.setAccessible(true);
    Object field;
    try {
      field=f.get(listener);
    }
 catch (    IllegalArgumentException|IllegalAccessException e) {
      e.printStackTrace();
      System.err.println(e);
      continue;
    }
    if (field == null)     continue;
    if (field instanceof Collection<?>) {
      @SuppressWarnings("String_Node_Str") Collection<Object> r=(Collection<Object>)field;
      boolean hasFieldOne=scanAll(root,r,eventSpace,scanWhile);
      hasOne=hasOne || hasFieldOne;
    }
 else     if (field instanceof Map<?,?>) {
      @SuppressWarnings("String_Node_Str") Map<?,Object> r=(Map<?,Object>)field;
      boolean hasFieldOne=scanAll(root,r.values(),eventSpace,scanWhile);
      hasOne=hasOne || hasFieldOne;
    }
 else     if (field instanceof Multimap<?,?>) {
      @SuppressWarnings("String_Node_Str") Multimap<?,Object> r=(Multimap<?,Object>)field;
      boolean hasFieldOne=scanAll(root,r.values(),eventSpace,scanWhile);
      hasOne=hasOne || hasFieldOne;
    }
 else {
      boolean hasFieldOne=scan(root,field,eventSpace,scanWhile);
      hasOne=hasOne || hasFieldOne;
    }
  }
  return hasOne;
}

Fixed version (ground truth):
protected boolean scan(Object root,Object listener,String eventSpace,Predicate<? super Class<?>> scanWhile){
  final Class<?> clazz=listener.getClass();
  if (nothingFounds.contains(clazz.getCanonicalName()))   return false;
  boolean scanAgain=false;
  for (  Method m : Iterables.filter(ClassUtils.findAllDeclaredMethods(clazz,scanWhile),listenToMethod)) {
    Class<? extends AEvent> event=m.getParameterTypes()[0].asSubclass(AEvent.class);
    final ListenTo a=m.getAnnotation(ListenTo.class);
    boolean toMe=a.sendToMe() && ADirectedEvent.class.isAssignableFrom(event);
    final AnnotationBasedEventListener l=new AnnotationBasedEventListener(owner,root,listener,m,toMe);
    if (eventSpace != null && (a.restrictExclusiveToEventSpace() || a.restrictToEventSpace())) {
      if (a.restrictExclusiveToEventSpace())       l.setExclusiveEventSpace(eventSpace);
 else       l.setEventSpace(eventSpace);
    }
    register(event,l);
    scanAgain=true;
  }
  for (  Field f : Iterables.filter(ClassUtils.findAllDeclaredFields(clazz,scanWhile),deepScanField)) {
    f.setAccessible(true);
    Object field;
    try {
      field=f.get(listener);
    }
 catch (    IllegalArgumentException|IllegalAccessException e) {
      e.printStackTrace();
      System.err.println(e);
      continue;
    }
    if (field == null) {
      scanAgain=true;
      continue;
    }
    if (field instanceof Collection<?>) {
      @SuppressWarnings("String_Node_Str") Collection<Object> r=(Collection<Object>)field;
      scanAll(root,r,eventSpace,scanWhile);
      scanAgain=true;
    }
 else     if (field instanceof Map<?,?>) {
      @SuppressWarnings("String_Node_Str") Map<?,Object> r=(Map<?,Object>)field;
      scanAll(root,r.values(),eventSpace,scanWhile);
      scanAgain=true;
    }
 else     if (field instanceof Multimap<?,?>) {
      @SuppressWarnings("String_Node_Str") Multimap<?,Object> r=(Multimap<?,Object>)field;
      scanAll(root,r.values(),eventSpace,scanWhile);
      scanAgain=true;
    }
 else {
      boolean hasFieldOne=scan(root,field,eventSpace,scanWhile);
      scanAgain=scanAgain || hasFieldOne;
    }
  }
  if (!scanAgain)   nothingFounds.add(clazz.getCanonicalName());
  return scanAgain;
}