Program: 48662
Project: 48662
Buggy source:
private static Getter createGetter(QueryableEntry entry,String attribute){
  Object obj;
  if (attribute.startsWith(KEY_ATTRIBUTE_NAME)) {
    obj=entry.getKey();
    if (attribute.length() > KEY_ATTRIBUTE_NAME.length()) {
      attribute=attribute.substring(KEY_ATTRIBUTE_NAME.length() + 1);
    }
  }
 else {
    obj=entry.getValue();
  }
  Class clazz=obj.getClass();
  final String cacheKey=clazz.getName() + "String_Node_Str" + attribute;
  Getter getter=getterCache.get(cacheKey);
  if (getter != null)   return getter;
  try {
    Getter parent=null;
    List<String> possibleMethodNames=new ArrayList<String>(3);
    for (    final String name : attribute.split("String_Node_Str")) {
      Getter localGetter=null;
      possibleMethodNames.clear();
      possibleMethodNames.add(name);
      final String camelName=Character.toUpperCase(name.charAt(0)) + name.substring(1);
      possibleMethodNames.add("String_Node_Str" + camelName);
      possibleMethodNames.add("String_Node_Str" + camelName);
      if (name.equals(THIS_ATTRIBUTE_NAME)) {
        localGetter=new ThisGetter(parent,obj);
      }
 else {
        for (        String methodName : possibleMethodNames) {
          try {
            final Method method=clazz.getMethod(methodName);
            method.setAccessible(true);
            localGetter=new MethodGetter(parent,method);
            clazz=method.getReturnType();
            break;
          }
 catch (          NoSuchMethodException ignored) {
          }
        }
        if (localGetter == null) {
          try {
            final Field field=clazz.getField(name);
            localGetter=new FieldGetter(parent,field);
            clazz=field.getType();
          }
 catch (          NoSuchFieldException ignored) {
          }
        }
        if (localGetter == null) {
          Class c=clazz;
          while (!Object.class.equals(c)) {
            try {
              final Field field=c.getDeclaredField(name);
              field.setAccessible(true);
              localGetter=new FieldGetter(parent,field);
              clazz=field.getType();
              break;
            }
 catch (            NoSuchFieldException ignored) {
              c=c.getSuperclass();
            }
          }
        }
      }
      if (localGetter == null) {
        throw new IllegalArgumentException("String_Node_Str" + name + "String_Node_Str"+ clazz+ "String_Node_Str");
      }
      parent=localGetter;
    }
    getter=parent;
    if (!(getter instanceof ThisGetter)) {
      getterCache.putIfAbsent(cacheKey,getter);
    }
    return getter;
  }
 catch (  Throwable e) {
    throw new QueryException(e);
  }
}

Fixed version (ground truth):
private static Getter createGetter(QueryableEntry entry,String attribute){
  Object obj;
  if (attribute.startsWith(KEY_ATTRIBUTE_NAME)) {
    obj=entry.getKey();
    if (attribute.length() > KEY_ATTRIBUTE_NAME.length()) {
      attribute=attribute.substring(KEY_ATTRIBUTE_NAME.length() + 1);
    }
  }
 else {
    obj=entry.getValue();
  }
  Class clazz=obj.getClass();
  final String cacheKey=clazz.getName() + "String_Node_Str" + attribute;
  Getter getter=getterCache.get(cacheKey);
  if (getter != null)   return getter;
  try {
    Getter parent=null;
    List<String> possibleMethodNames=new ArrayList<String>(3);
    for (    final String name : attribute.split("String_Node_Str")) {
      Getter localGetter=null;
      possibleMethodNames.clear();
      possibleMethodNames.add(name);
      final String camelName=Character.toUpperCase(name.charAt(0)) + name.substring(1);
      possibleMethodNames.add("String_Node_Str" + camelName);
      possibleMethodNames.add("String_Node_Str" + camelName);
      if (name.equals(THIS_ATTRIBUTE_NAME)) {
        localGetter=new ThisGetter(parent,obj);
      }
 else {
        for (        String methodName : possibleMethodNames) {
          try {
            final Method method=clazz.getMethod(methodName);
            method.setAccessible(true);
            localGetter=new MethodGetter(parent,method);
            clazz=method.getReturnType();
            break;
          }
 catch (          NoSuchMethodException ignored) {
          }
        }
        if (localGetter == null) {
          try {
            final Field field=clazz.getField(name);
            localGetter=new FieldGetter(parent,field);
            clazz=field.getType();
          }
 catch (          NoSuchFieldException ignored) {
          }
        }
        if (localGetter == null) {
          Class c=clazz;
          while (!Object.class.equals(c)) {
            try {
              final Field field=c.getDeclaredField(name);
              field.setAccessible(true);
              localGetter=new FieldGetter(parent,field);
              clazz=field.getType();
              break;
            }
 catch (            NoSuchFieldException ignored) {
              c=c.getSuperclass();
            }
          }
        }
      }
      if (localGetter == null) {
        throw new IllegalArgumentException("String_Node_Str" + name + "String_Node_Str"+ clazz+ "String_Node_Str");
      }
      parent=localGetter;
    }
    getter=parent;
    if (getter.isCacheable()) {
      getterCache.putIfAbsent(cacheKey,getter);
    }
    return getter;
  }
 catch (  Throwable e) {
    throw new QueryException(e);
  }
}