Program: 190617
Project: 190617
Buggy source:
private void collectGetterSetters(C c,Map<String,M> getters,Map<String,M> setters){
  C sc=nav().getSuperClass(c);
  if (shouldRecurseSuperClass(sc))   collectGetterSetters(sc,getters,setters);
  Collection<? extends M> methods=nav().getDeclaredMethods(c);
  Map<String,List<M>> allSetters=new LinkedHashMap<String,List<M>>();
  for (  M method : methods) {
    boolean used=false;
    if (nav().isBridgeMethod(method))     continue;
    String name=nav().getMethodName(method);
    int arity=nav().getMethodParameters(method).length;
    if (nav().isStaticMethod(method)) {
      ensureNoAnnotation(method);
      continue;
    }
    String propName=getPropertyNameFromGetMethod(name);
    if (propName != null && arity == 0) {
      getters.put(propName,method);
      used=true;
    }
    propName=getPropertyNameFromSetMethod(name);
    if (propName != null && arity == 1) {
      List<M> propSetters=allSetters.get(propName);
      if (null == propSetters) {
        propSetters=new ArrayList<M>();
        allSetters.put(propName,propSetters);
      }
      propSetters.add(method);
      used=true;
    }
    if (!used)     ensureNoAnnotation(method);
  }
  for (  Map.Entry<String,M> entry : getters.entrySet()) {
    String propName=entry.getKey();
    M getter=entry.getValue();
    List<M> propSetters=allSetters.remove(propName);
    if (null == propSetters) {
      continue;
    }
    T getterType=nav().getReturnType(getter);
    for (    M setter : propSetters) {
      T setterType=nav().getMethodParameters(setter)[0];
      if (setterType.equals(getterType)) {
        setters.put(propName,setter);
        break;
      }
    }
  }
  for (  Map.Entry<String,List<M>> e : allSetters.entrySet()) {
    setters.put(e.getKey(),e.getValue().get(0));
  }
}

Fixed version (ground truth):
private void collectGetterSetters(C c,Map<String,M> getters,Map<String,M> setters){
  C sc=nav().getSuperClass(c);
  if (shouldRecurseSuperClass(sc))   collectGetterSetters(sc,getters,setters);
  Collection<? extends M> methods=nav().getDeclaredMethods(c);
  Map<String,List<M>> allSetters=new LinkedHashMap<String,List<M>>();
  for (  M method : methods) {
    boolean used=false;
    if (nav().isBridgeMethod(method))     continue;
    String name=nav().getMethodName(method);
    int arity=nav().getMethodParameters(method).length;
    if (nav().isStaticMethod(method)) {
      ensureNoAnnotation(method);
      continue;
    }
    String propName=getPropertyNameFromGetMethod(name);
    if (propName != null && arity == 0) {
      getters.put(propName,method);
      used=true;
    }
    propName=getPropertyNameFromSetMethod(name);
    if (propName != null && arity == 1) {
      List<M> propSetters=allSetters.get(propName);
      if (null == propSetters) {
        propSetters=new ArrayList<M>();
        allSetters.put(propName,propSetters);
      }
      propSetters.add(method);
      used=true;
    }
    if (!used)     ensureNoAnnotation(method);
  }
  for (  Map.Entry<String,M> entry : getters.entrySet()) {
    String propName=entry.getKey();
    M getter=entry.getValue();
    List<M> propSetters=allSetters.remove(propName);
    if (null == propSetters) {
      continue;
    }
    T getterType=nav().getReturnType(getter);
    for (    M setter : propSetters) {
      T setterType=nav().getMethodParameters(setter)[0];
      if (nav().isSameType(setterType,getterType)) {
        setters.put(propName,setter);
        break;
      }
    }
  }
  for (  Map.Entry<String,List<M>> e : allSetters.entrySet()) {
    setters.put(e.getKey(),e.getValue().get(0));
  }
}