Program: 156086
Project: 156086
Buggy source:
public <T extends Factory>Collection<T> executeQuery(T prototype) throws SQLException {
  List<T> result=new LinkedList<>();
  if (query != null) {
    try {
      try (ResultSet resultSet=statement.executeQuery()){
        ResultSetMetaData resultMetaData=resultSet.getMetaData();
        List<ResultSetProcessor<T>> processors=new LinkedList<>();
        Method[] methods=prototype.getClass().getMethods();
        for (        final Method method : methods) {
          if (method.getName().startsWith("String_Node_Str") && method.getParameterTypes().length == 1) {
            final String name=method.getName().substring(3);
            boolean column=false;
            for (int i=1; i <= resultMetaData.getColumnCount(); i++) {
              if (name.equalsIgnoreCase(resultMetaData.getColumnLabel(i))) {
                column=true;
                break;
              }
            }
            if (!column) {
              continue;
            }
            Class<?> parameterType=method.getParameterTypes()[0];
            if (parameterType.equals(boolean.class)) {
              processors.add(new ResultSetProcessor<T>(){
                @Override public void process(                T object,                ResultSet resultSet) throws SQLException {
                  try {
                    method.invoke(object,resultSet.getBoolean(name));
                  }
 catch (                  IllegalAccessException|InvocationTargetException error) {
                    Log.warning(error);
                  }
                }
              }
);
            }
 else             if (parameterType.equals(int.class)) {
              processors.add(new ResultSetProcessor<T>(){
                @Override public void process(                T object,                ResultSet resultSet) throws SQLException {
                  try {
                    method.invoke(object,resultSet.getInt(name));
                  }
 catch (                  IllegalAccessException|InvocationTargetException error) {
                    Log.warning(error);
                  }
                }
              }
);
            }
 else             if (parameterType.equals(long.class)) {
              processors.add(new ResultSetProcessor<T>(){
                @Override public void process(                T object,                ResultSet resultSet) throws SQLException {
                  try {
                    method.invoke(object,resultSet.getLong(name));
                  }
 catch (                  IllegalAccessException|InvocationTargetException error) {
                    Log.warning(error);
                  }
                }
              }
);
            }
 else             if (parameterType.equals(double.class)) {
              processors.add(new ResultSetProcessor<T>(){
                @Override public void process(                T object,                ResultSet resultSet) throws SQLException {
                  try {
                    method.invoke(object,resultSet.getDouble(name));
                  }
 catch (                  IllegalAccessException|InvocationTargetException error) {
                    Log.warning(error);
                  }
                }
              }
);
            }
 else             if (parameterType.equals(String.class)) {
              processors.add(new ResultSetProcessor<T>(){
                @Override public void process(                T object,                ResultSet resultSet) throws SQLException {
                  try {
                    method.invoke(object,resultSet.getString(name));
                  }
 catch (                  IllegalAccessException|InvocationTargetException error) {
                    Log.warning(error);
                  }
                }
              }
);
            }
 else             if (parameterType.equals(Date.class)) {
              processors.add(new ResultSetProcessor<T>(){
                @Override public void process(                T object,                ResultSet resultSet) throws SQLException {
                  try {
                    Timestamp timestamp=resultSet.getTimestamp(name);
                    if (timestamp != null) {
                      method.invoke(object,new Date(timestamp.getTime()));
                    }
                  }
 catch (                  IllegalAccessException|InvocationTargetException error) {
                    Log.warning(error);
                  }
                }
              }
);
            }
 else             if (parameterType.equals(Map.class)) {
              processors.add(new ResultSetProcessor<T>(){
                @Override public void process(                T object,                ResultSet resultSet) throws SQLException {
                  try (JsonReader reader=Json.createReader(new StringReader(resultSet.getString(name)))){
                    method.invoke(object,MiscFormatter.fromJson(reader.readObject()));
                  }
 catch (                  IllegalAccessException|InvocationTargetException|JsonParsingException error) {
                    Log.warning(error);
                  }
                }
              }
);
            }
          }
        }
        while (resultSet.next()) {
          T object=(T)prototype.create();
          for (          ResultSetProcessor<T> processor : processors) {
            processor.process(object,resultSet);
          }
          result.add(object);
        }
      }
     }
  finally {
      statement.close();
      connection.close();
    }
  }
  return result;
}

Fixed version (ground truth):
public <T extends Factory>Collection<T> executeQuery(T prototype) throws SQLException {
  List<T> result=new LinkedList<>();
  if (query != null) {
    try {
      try (ResultSet resultSet=statement.executeQuery()){
        ResultSetMetaData resultMetaData=resultSet.getMetaData();
        List<ResultSetProcessor<T>> processors=new LinkedList<>();
        Method[] methods=prototype.getClass().getMethods();
        for (        final Method method : methods) {
          if (method.getName().startsWith("String_Node_Str") && method.getParameterTypes().length == 1) {
            final String name=method.getName().substring(3);
            boolean column=false;
            for (int i=1; i <= resultMetaData.getColumnCount(); i++) {
              if (name.equalsIgnoreCase(resultMetaData.getColumnLabel(i))) {
                column=true;
                break;
              }
            }
            if (!column) {
              continue;
            }
            addProcessors(processors,method.getParameterTypes()[0],method,name);
          }
        }
        while (resultSet.next()) {
          T object=(T)prototype.create();
          for (          ResultSetProcessor<T> processor : processors) {
            processor.process(object,resultSet);
          }
          result.add(object);
        }
      }
     }
  finally {
      statement.close();
      connection.close();
    }
  }
  return result;
}