[Demonstration 2]

[Buggy Method]
protected List<Reference> findGlobalParameters(Set<Long> ids, Map<Long, Set<String>> idToFormulas) {
    Map<Long, Set<String>> idToNames = new HashMap<>();
    List<String> queries = Search.createQueries("SELECT f_owner, lower(name), is_input_param, lower(formula) FROM tbl_parameters", "WHERE f_owner IN", ids);
    for (String paramQuery : queries) {
        Search.on(database, type).query(paramQuery, (result) -> {
            long ownerId = result.getLong(1);
            Set<String> names = idToNames.get(ownerId);
            if (names == null)
                idToNames.put(ownerId, names = new HashSet<>());
            names.add(result.getString(2));
            if (!result.getBoolean(3)) {
                Set<String> formulas = idToFormulas.get(ownerId);
                if (formulas == null)
                    idToFormulas.put(ownerId, formulas = new HashSet<>());
                formulas.add(result.getString(4));
            }
        });
    }
    Map<Long, Set<String>> undeclared = findUndeclaredParameters(idToNames, idToFormulas);
    Set<String> names = new HashSet<>();
    for (Set<String> n : undeclared.values()) names.addAll(n);
    List<ParameterDescriptor> descriptors = new ParameterDao(database).getDescriptors(names.toArray(new String[names.size()]), ParameterScope.GLOBAL);
    List<Reference> results = toReferences(descriptors, false, undeclared, null);
    Set<String> found = new HashSet<>();
    for (ParameterDescriptor d : descriptors) found.add(d.getName());
    for (String name : names) if (!found.contains(name))
        results.addAll(createMissingReferences(name, undeclared));
    return results;
}

[Buggy Hunk]
found.add(d.getName());

[Patch]
found.add(d.getName().toLowerCase());

[Demonstration 3]

[Buggy Method]
public static void changeData(long id, String token, JsonNode data) throws UnknownHostException {
    User user = getUserByToken(token);
    if (user.id != id) {
        throw new IllegalAccessError();
    }
    User newUser = new JSONDeserializer<User>().deserialize(data.asText());
    if (UserManager.isExistEmail(user, newUser.email)) {
        throw new IllegalArgumentException("This email already exist");
    }
    if (UserManager.isExistPhone(user, newUser.phone)) {
        throw new IllegalArgumentException("This phone already exist");
    }
    if (!DataInspector.checkUserData(newUser)) {
        throw new NullPointerException();
    }
    UserManager.update(user, newUser);
}

[Buggy Hunk]
User newUser = new JSONDeserializer<User>().deserialize(data.asText());

[Patch]
User newUser = jsonToUser(data);