View Javadoc
1   /*
2    * SPDX-FileCopyrightText: Copyright (c) 2011-2026 Yegor Bugayenko
3    * SPDX-License-Identifier: MIT
4    */
5   package com.qulice.checkstyle;
6   
7   import com.puppycrawl.tools.checkstyle.api.FileText;
8   import com.puppycrawl.tools.checkstyle.checks.regexp.RegexpMultilineCheck;
9   import java.io.File;
10  import java.util.regex.Pattern;
11  
12  /**
13   * Performs multiline regexp match only if a regexp condition passes.
14   *
15   * @since 0.5
16   */
17  public final class ConditionalRegexpMultilineCheck extends
18      RegexpMultilineCheck {
19  
20      /**
21       * Condition that passes on any character.
22       */
23      private static final Pattern ANY = Pattern.compile("\\S|\\s");
24  
25      /**
26       * Condition that has to pass.
27       */
28      private Pattern condition;
29  
30      /**
31       * Default constructor.
32       */
33      public ConditionalRegexpMultilineCheck() {
34          this.condition = ConditionalRegexpMultilineCheck.ANY;
35      }
36  
37      @Override
38      public void processFiltered(final File file, final FileText lines) {
39          boolean found = false;
40          for (final String line : lines.toLinesArray()) {
41              if (this.condition.matcher(line).find()) {
42                  found = true;
43                  break;
44              }
45          }
46          if (found) {
47              super.processFiltered(file, lines);
48          }
49      }
50  
51      /**
52       * Condition regexp that has to match before checking the core one.
53       *
54       * @param cond Regexp that has to match in file
55       */
56      public void setCondition(final String cond) {
57          this.condition = Pattern.compile(cond);
58      }
59  }