[Demonstration 1]

[Buggy Method]
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ButterKnife.bind(this);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    //        recyclerView.setItemAnimator(new FadeInLeftAnimator());
    RendererAdapter<CreateCompanyJobItemRenderer, TestModel> adapter = new RendererAdapter<>(getTestList(), this, CreateCompanyJobItemRenderer.class);
    recyclerView.setAdapter(adapter);
    setButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            adapter.setOnItemClickListener(new OnItemClickListener() {

                @Override
                public void onItemClick(View view, int position) {
                    Toast.makeText(MainActivity.this, adapter.getItem(position).getCompanyName(), Toast.LENGTH_SHORT).show();
                }
            });
        }
    });
    recyclerView.setNestedScrollingEnabled(false);
}

[Buggy Hunk]
RendererAdapter<CreateCompanyJobItemRenderer, TestModel> adapter = new RendererAdapter<>(getTestList(), this, CreateCompanyJobItemRenderer.class);

[Patch]
RendererAdapter<TestModel> adapter = new RendererAdapter<>(getTestList(), this, CreateCompanyJobItemRenderer.class);

[Demonstration 2]

[Buggy Method]
@Override
public boolean onTouch(View view, MotionEvent me) {
    if (!allowUserResize)
        return true;
    if (me.getAction() == MotionEvent.ACTION_DOWN) {
        origY = me.getY();
        accumulatedHeight = 0f;
        for (int i = 0; i < adapter.getItemCount(); i++) {
            if (i != getAdapterPosition()) {
                View item = adapter.container.findViewHolderForAdapterPosition(i).itemView;
                accumulatedHeight += item.getHeight();
            }
        }
        adapter.callback.allowDrag = false;
        adapter.callback.allowSwipe = false;
    } else if (me.getAction() == MotionEvent.ACTION_UP) {
        //dynamicItemResize.setX(originalButtonX);
        adapter.callback.allowDrag = true;
        adapter.callback.allowSwipe = true;
    } else if (me.getAction() == MotionEvent.ACTION_MOVE) {
        float heightDiff = origY - me.getY();
        if ((itemView.getLayoutParams().height + heightDiff) > adapter.minHeightPX) {
            if ((accumulatedHeight + itemView.getHeight() + heightDiff) <= (adapter.container.getHeight() - adapter.marginPixels)) {
                itemView.getLayoutParams().height += heightDiff;
                if (adapter.reverseStack) {
                    //itemView.setY(itemView.getY() - heightDiff);
                }
                itemView.requestLayout();
            } else {
                itemView.getLayoutParams().height = (int) (adapter.container.getHeight() - accumulatedHeight - adapter.marginPixels);
                itemView.requestLayout();
            }
            isExpanded = true;
        } else {
            itemView.getLayoutParams().height = adapter.minHeightPX;
            isExpanded = false;
        }
        updateOnResizeInternal(DynamicStackViewHolder.this.getAdapterPosition(), adapter.getItem(DynamicStackViewHolder.this.getAdapterPosition()));
    }
    return true;
}

[Buggy Hunk]
adapter.getItem(DynamicStackViewHolder.this.getAdapterPosition()));

[Patch]
(T) adapter.getItem(DynamicStackViewHolder.this.getAdapterPosition()));

[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));