Program: 104815
Project: 104815
Buggy source:
/** 
 * Discovers interesting (that we care about) things about the field. 
 */
protected void discover(){
  for (  Class<? extends Annotation> clazz : interestingAnnotations)   addAnnotation(clazz);
  Class ctorType=null;
  for (  Annotation an : foundAnnotations.values()) {
    try {
      Method m=an.getClass().getMethod("String_Node_Str");
      m.setAccessible(true);
      Object o=m.invoke(an);
      if (o != null && !(o.equals(Object.class))) {
        ctorType=(Class)o;
        break;
      }
    }
 catch (    NoSuchMethodException e) {
    }
catch (    IllegalArgumentException e) {
      log.warning("String_Node_Str",e);
    }
catch (    Exception e) {
      log.warning("String_Node_Str",e);
    }
  }
  if (ctorType != null)   try {
    ctor=ctorType.getDeclaredConstructor();
    ctor.setAccessible(true);
  }
 catch (  NoSuchMethodException e) {
    throw new MappingException("String_Node_Str" + field.getType().getName(),e);
  }
 else {
    try {
      ctor=field.getType().getDeclaredConstructor();
      ctor.setAccessible(true);
    }
 catch (    NoSuchMethodException e) {
    }
catch (    SecurityException e) {
    }
  }
  this.name=getMappedFieldName();
  Class type=field.getType();
  Type gType=field.getGenericType();
  TypeVariable<GenericDeclaration> tv=null;
  ParameterizedType pt=null;
  if (gType instanceof TypeVariable)   tv=(TypeVariable<GenericDeclaration>)gType;
 else   if (gType instanceof ParameterizedType)   pt=(ParameterizedType)gType;
  if (tv != null) {
    type=ReflectionUtils.getTypeArgument(persistedClass,tv);
  }
 else   if (pt != null) {
    log.debug("String_Node_Str" + pt);
  }
  if (Object.class.equals(type) && (tv != null || pt != null))   throw new MappingException("String_Node_Str" + field.getName() + "String_Node_Str"+ field.getDeclaringClass());
  if (type.isArray() || Collection.class.isAssignableFrom(type) || Map.class.isAssignableFrom(type)) {
    isSingleValue=false;
    isMap=Map.class.isAssignableFrom(type);
    isSet=Set.class.isAssignableFrom(type);
    isCollection=Collection.class.isAssignableFrom(type);
    isArray=type.isArray();
    if (!isMap && !isSet && !isCollection&& !isArray)     throw new MappingException("String_Node_Str" + type);
    subType=(type.isArray()) ? type.getComponentType() : ReflectionUtils.getParameterizedType(field,(isMap) ? 1 : 0);
    if (isMap)     mapKeyType=ReflectionUtils.getParameterizedType(field,0);
  }
  isMongoType=ReflectionUtils.isPropertyType(type);
  if (!isMongoType && subType != null)   isMongoType=ReflectionUtils.isPropertyType(subType);
  if (!isMongoType && !isSingleValue && (subType == null || subType.equals(Object.class))) {
    log.warning("String_Node_Str" + getFullName() + "String_Node_Str"+ subType);
    isMongoType=true;
  }
}

Fixed version (ground truth):
/** 
 * Discovers interesting (that we care about) things about the field. 
 */
protected void discover(){
  for (  Class<? extends Annotation> clazz : interestingAnnotations)   addAnnotation(clazz);
  Class ctorType=null;
  for (  Annotation an : foundAnnotations.values()) {
    try {
      Method m=an.getClass().getMethod("String_Node_Str");
      m.setAccessible(true);
      Object o=m.invoke(an);
      if (o != null && !(o.equals(Object.class))) {
        ctorType=(Class)o;
        break;
      }
    }
 catch (    NoSuchMethodException e) {
    }
catch (    IllegalArgumentException e) {
      log.warning("String_Node_Str",e);
    }
catch (    Exception e) {
      log.warning("String_Node_Str",e);
    }
  }
  if (ctorType != null)   try {
    ctor=ctorType.getDeclaredConstructor();
    ctor.setAccessible(true);
  }
 catch (  NoSuchMethodException e) {
    if (!hasAnnotation(ConstructorArgs.class))     throw new MappingException("String_Node_Str" + field.getType().getName(),e);
  }
 else {
    try {
      ctor=field.getType().getDeclaredConstructor();
      ctor.setAccessible(true);
    }
 catch (    NoSuchMethodException e) {
    }
catch (    SecurityException e) {
    }
  }
  this.name=getMappedFieldName();
  Class type=field.getType();
  Type gType=field.getGenericType();
  TypeVariable<GenericDeclaration> tv=null;
  ParameterizedType pt=null;
  if (gType instanceof TypeVariable)   tv=(TypeVariable<GenericDeclaration>)gType;
 else   if (gType instanceof ParameterizedType)   pt=(ParameterizedType)gType;
  if (tv != null) {
    type=ReflectionUtils.getTypeArgument(persistedClass,tv);
  }
 else   if (pt != null) {
    log.debug("String_Node_Str" + pt);
  }
  if (Object.class.equals(type) && (tv != null || pt != null))   throw new MappingException("String_Node_Str" + field.getName() + "String_Node_Str"+ field.getDeclaringClass());
  if (type.isArray() || Collection.class.isAssignableFrom(type) || Map.class.isAssignableFrom(type)) {
    isSingleValue=false;
    isMap=Map.class.isAssignableFrom(type);
    isSet=Set.class.isAssignableFrom(type);
    isCollection=Collection.class.isAssignableFrom(type);
    isArray=type.isArray();
    if (!isMap && !isSet && !isCollection&& !isArray)     throw new MappingException("String_Node_Str" + type);
    subType=(type.isArray()) ? type.getComponentType() : ReflectionUtils.getParameterizedType(field,(isMap) ? 1 : 0);
    if (isMap)     mapKeyType=ReflectionUtils.getParameterizedType(field,0);
  }
  isMongoType=ReflectionUtils.isPropertyType(type);
  if (!isMongoType && subType != null)   isMongoType=ReflectionUtils.isPropertyType(subType);
  if (!isMongoType && !isSingleValue && (subType == null || subType.equals(Object.class))) {
    log.warning("String_Node_Str" + getFullName() + "String_Node_Str"+ subType);
    isMongoType=true;
  }
}