[Demonstration 1]

[Buggy Method]
@Override
public <L extends List<JavaSimpleToken> & RandomAccess> Lexer.LexingResult<JavaAdvancedToken> apply(Lexer<JavaSimpleTokenType, JavaSimpleToken, JavaAdvancedToken> lexer, L javaSimpleTokens, int fromPos) throws LexerException {
    JavaAdvancedToken classToken = new JavaAdvancedToken(JavaAdvancedTokenType.CLASS_OR_INTERFACE), classHeader = new JavaAdvancedToken(JavaAdvancedTokenType.GENERIC_GROUP), curAdvanced = classHeader;
    JavaSimpleToken current = null;
    while (fromPos < javaSimpleTokens.size() && (current = javaSimpleTokens.get(fromPos)) != null && !JavaSimpleTokenType.SCOPESTART.equals(current.getTokenType())) {
        if (JavaSimpleTokenType.EXTENDS.equals(current.getTokenType()) || JavaSimpleTokenType.IMPLEMENTS.equals(current.getTokenType())) {
            curAdvanced = new JavaAdvancedToken(JavaAdvancedTokenType.GENERIC_GROUP);
            classHeader.addChildren(curAdvanced);
        }
        fromPos = addSimpleToken(curAdvanced, lexer, javaSimpleTokens, fromPos);
    }
    if (current == null || !(fromPos < javaSimpleTokens.size()) || !JavaSimpleTokenType.SCOPESTART.equals(current.getTokenType()))
        throw GENERIC_LEXER_EXCEPTION.get();
    Lexer.LexingResult<JavaAdvancedToken> classBodyLexingResult = lexer.lexNext(Collections.singletonList(ClassBodyRule.getInstance()), javaSimpleTokens, fromPos);
    fromPos = classBodyLexingResult.getNextArrayfromPos();
    classToken.addChildren(classHeader, classBodyLexingResult.getReturnToken());
    return new Lexer.LexingResult<>(classToken, fromPos);
}

[Buggy Hunk]
if (JavaSimpleTokenType.EXTENDS.equals(current.getTokenType()) || JavaSimpleTokenType.IMPLEMENTS.equals(current.getTokenType())) {

[Patch]
if (isNextGroupTokenType(current.getTokenType())) {

[Demonstration 2]

[Buggy Method]
protected void _doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {
    try {
        ExoContainer container = getContainer();
        OAuthServiceProvider provider = (OAuthServiceProvider) container.getComponentInstanceOfType(OAuthServiceProvider.class);
        OAuthMessage requestMessage = OAuthServlet.getMessage(request, null);
        OAuthToken token = provider.getAccessToken(requestMessage.getToken());
        if (token == null || token.getToken() == null) {
            throw new OAuthProblemException(OAuthKeys.OAUTH_TOKEN_EXPIRED);
        } else {
            OAuthValidator validator = (OAuthValidator) container.getComponentInstanceOfType(OAuthValidator.class);
            validator.validateMessage(requestMessage, AccessorBuilder.buildAccessor(token, provider));
            request.setAttribute(OAuthKeys.OAUTH_USER_ID, token.getUserId());
            request = createSecurityContext(request, token);
            super.doFilter(request, response, chain);
        }
    } catch (Exception e) {
        SimpleOAuthServiceProvider.handleException(e, request, response, false);
    }
}

[Buggy Hunk]
throw new OAuthProblemException(OAuthKeys.OAUTH_TOKEN_EXPIRED);

[Patch]
throw new OAuthProblemException(Problems.TOKEN_EXPIRED);

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