ConditionalRegexpMultilineCheck.java

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

import com.puppycrawl.tools.checkstyle.api.FileText;
import com.puppycrawl.tools.checkstyle.checks.regexp.RegexpMultilineCheck;
import java.io.File;
import java.util.regex.Pattern;

/**
 * Performs multiline regexp match only if a regexp condition passes.
 * @since 0.5
 */
public final class ConditionalRegexpMultilineCheck extends
    RegexpMultilineCheck {
    /**
     * Condition that has to pass.
     */
    private Pattern condition = Pattern.compile(".");

    @Override
    public void processFiltered(final File file, final FileText lines) {
        boolean found = false;
        for (final String line: lines.toLinesArray()) {
            if (this.condition.matcher(line).find()) {
                found = true;
                break;
            }
        }
        if (found) {
            super.processFiltered(file, lines);
        }
    }

    /**
     * Condition regexp that has to match before checking the core one.
     * @param cond Regexp that has to match in file.
     */
    public void setCondition(final String cond) {
        this.condition = Pattern.compile(cond);
    }
}