[Demonstration 1]

[Buggy Method]
private void setRouteRuleBindings(List<SimpleShardRouteRuleBinding> bindings) {
    Map<String, InnerSimpleShardRouteRuleBindingWrapper> cache = new HashMap<>();
    Map<String, List> routeInfoMap = new HashMap<>();
    Map<String, Set<String>> routedTables = new HashMap<>();
    if (bindings != null && !bindings.isEmpty()) {
        for (SimpleShardRouteRuleBinding binding : bindings) {
            // can't be null
            final String scName = DDRStringUtils.toLowerCase(binding.getScName());
            final String tbName = DDRStringUtils.toLowerCase(binding.getTbName());
            // can be null
            final String sdKey = DDRStringUtils.toLowerCase(binding.getSdKey());
            final String sdValues = DDRStringUtils.trimToNull(binding.getSdValues());
            if (tbName == null) {
                throw new IllegalArgumentException("'tbName' can't be empty");
            }
            final SimpleShardRouteRuleBinding b0 = new SimpleShardRouteRuleBinding();
            b0.setScName(scName);
            b0.setTbName(tbName);
            b0.setSdKey(sdKey);
            b0.setRule(binding.getRule());
            if (scName != null) {
                StringBuilder sb = new StringBuilder();
                sb.append(scName).append('.').append(tbName);
                putToCache(cache, sb.toString(), b0, true);
                putToCache(cache, tbName, b0, false);
            } else {
                putToCache(cache, tbName, b0, true);
            }
            final Set<RouteInfo> routeInfos = new LinkedHashSet<RouteInfo>();
            if (sdValues != null) {
                new RangeExpressionParser(sdValues).visit(new RangeExpressionItemVisitor() {

                    @Override
                    public void visit(Object val) {
                        RouteInfo routeInfo = getRouteInfo(b0, scName, tbName, val);
                        routeInfos.add(routeInfo);
                    }
                });
            }
            String key = buildQueryKey(scName, tbName);
            if (routeInfoMap.containsKey(key)) {
                throw new IllegalArgumentException("Duplicate route config for table '" + key + "'");
            } else {
                Set<String> tables = routedTables.get(scName);
                if (tables == null) {
                    tables = new LinkedHashSet<>();
                    routedTables.put(scName, tables);
                }
                tables.add(tbName);
                routeInfoMap.put(key, new ArrayList(routeInfos));
            }
        }
    }
    this.routeRuleBindings = bindings;
    this.cache = cache;
    this.routeInfoMap = routeInfoMap;
    this.routedTables = routedTables;
}

[Buggy Hunk]
Map<String, List> routeInfoMap = new HashMap<>();

[Patch]
Map<String, List<RouteInfo>> routeInfoMap = new HashMap<>();

[Demonstration 2]

[Buggy Method]
@Override
protected void doOnBindViewHolder(SimpleViewHolder holder, final AdapterImagesBinding binding, int position, final ImageData imageData) {
    if (mOnImageTouchListener != null) {
        binding.getRoot().setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                /* DEFINE PARAMETERS TO MAKE TRANSITION (IMAGE VIEW AND DETAILS LAYOUT) */
                Pair<View, String> image = new Pair<View, String>(binding.ivViewImageCard, CallManager.IMAGE);
                Pair<View, String> details = new Pair<View, String>(binding.viewImageInfo.rlViewImageDetails, CallManager.DETAILS);
                /* CALLS THE TOUCH LISTENER (MAIN PRESENTER) */
                mOnImageTouchListener.onImageTouched(imageData.getImageId(), image, details);
            }
        });
    }
    /*
         LOAD DATA INSIDE THE ADAPTER (IMAGE / TYPE / ID)
         */
    /* IMAGE */
    Glide.with(mContext).load(imageData.getImageURL()).thumbnail(Glide.with(mContext).load(imageData.getImageURL()).centerCrop()).dontAnimate().centerCrop().into(binding.ivViewImageCard);
    /* ID */
    binding.viewImageInfo.tvImageId.setText(String.valueOf(imageData.getImageId()));
    binding.setImageData(imageData);
}

[Buggy Hunk]
binding.setImageData(imageData);

[Patch]
binding.viewImageInfo.setImageData(imageData);

[Demonstration 3]

[Buggy Method]
public static Result service(String ownerName, String projectName, String service, boolean isAdvertise) throws IOException, UnsupportedOperationException, ServletException {
    if (!isSupportedService(service)) {
        return forbidden(String.format("Unsupported service: '%s'", service));
    }
    Project project = Project.findByOwnerAndProjectName(ownerName, projectName);
    if (project == null) {
        return notFound();
    }
    models.User user = UserApp.currentUser();
    if (!isAllowed(project, service)) {
        if (user.isAnonymous()) {
            return BasicAuthAction.unauthorized(response());
        } else {
            // If you want the Git client showing your custom message to
            // the user, the Content-Type should be exact "text/plain"
            // without any parameter. For more details, see the code at
            // https://github.com/git/git/commit/426e70d4a11ce3b4f70636d57c6a0ab16ae08a00#diff-eea0ad565ec5903a11b6023755d491cfR154
            response().setHeader("Content-Type", "text/plain");
            return forbidden(String.format("'%s' has no permission to '%s/%s'.", user.name, ownerName, projectName));
        }
    }
    if (isAdvertise) {
        return ok(RepositoryService.gitAdvertise(project, service, response()));
    } else {
        if (request().body().isMaxSizeExceeded()) {
            return status(REQUEST_ENTITY_TOO_LARGE);
        } else {
            user.visits(project);
            return ok(RepositoryService.gitRpc(project, service, request(), response()));
        }
    }
}

[Buggy Hunk]
user.name, ownerName, projectName));

[Patch]
user.loginId, ownerName, projectName));