FinalSemicolonInTryWithResourcesCheck.java

/*
 * SPDX-FileCopyrightText: Copyright (c) 2011-2025 Yegor Bugayenko
 * SPDX-License-Identifier: MIT
 */
package com.qulice.checkstyle;

import com.puppycrawl.tools.checkstyle.api.AbstractCheck;
import com.puppycrawl.tools.checkstyle.api.DetailAST;
import com.puppycrawl.tools.checkstyle.api.TokenTypes;

/**
 * Checks that try-with-resources does not end with a semicolon. Implementation
 * relies on existence of semicolon inside of RESOURCE_SPECIFICATION token
 * as interpreted by Checkstyle.
 *
 * @since 0.15
 */
public final class FinalSemicolonInTryWithResourcesCheck extends AbstractCheck {

    @Override
    public int[] getDefaultTokens() {
        return new int[]{
            TokenTypes.RESOURCE_SPECIFICATION,
        };
    }

    @Override
    public int[] getAcceptableTokens() {
        return this.getDefaultTokens();
    }

    @Override
    public int[] getRequiredTokens() {
        return this.getDefaultTokens();
    }

    @Override
    public void visitToken(final DetailAST ast) {
        final int semicolons = ast.getChildCount(TokenTypes.SEMI);
        if (semicolons > 0) {
            this.log(
                ast.getLineNo(),
                "Extra semicolon in the end of try-with-resources head."
            );
        }
    }
}