View Javadoc
1   /*
2    * SPDX-FileCopyrightText: Copyright (c) 2011-2025 Yegor Bugayenko
3    * SPDX-License-Identifier: MIT
4    */
5   package com.qulice.checkstyle;
6   
7   import com.jcabi.log.Logger;
8   import com.puppycrawl.tools.checkstyle.api.AuditEvent;
9   import com.puppycrawl.tools.checkstyle.api.AuditListener;
10  import com.qulice.spi.Environment;
11  import java.util.Collections;
12  import java.util.LinkedList;
13  import java.util.List;
14  
15  /**
16   * Listener of Checkstyle events.
17   *
18   * @since 0.3
19   * @checkstyle ClassDataAbstractionCoupling (260 lines)
20   */
21  final class CheckstyleListener implements AuditListener {
22  
23      /**
24       * Environment.
25       */
26      private final Environment env;
27  
28      /**
29       * Collection of events collected.
30       */
31      private final List<AuditEvent> all;
32  
33      /**
34       * Public ctor.
35       * @param environ The environment
36       */
37      CheckstyleListener(final Environment environ) {
38          this.all = new LinkedList<>();
39          this.env = environ;
40      }
41  
42      /**
43       * Get all events.
44       * @return List of events
45       */
46      public List<AuditEvent> events() {
47          return Collections.unmodifiableList(this.all);
48      }
49  
50      @Override
51      public void auditStarted(final AuditEvent event) {
52          // intentionally empty
53      }
54  
55      @Override
56      public void auditFinished(final AuditEvent event) {
57          // intentionally empty
58      }
59  
60      @Override
61      public void fileStarted(final AuditEvent event) {
62          // intentionally empty
63      }
64  
65      @Override
66      public void fileFinished(final AuditEvent event) {
67          // intentionally empty
68      }
69  
70      @Override
71      public void addError(final AuditEvent event) {
72          final String name = event.getFileName().substring(
73              this.env.basedir().toString().length()
74          );
75          if (!this.env.exclude("checkstyle", name)) {
76              this.all.add(event);
77          }
78      }
79  
80      @Override
81      public void addException(final AuditEvent event,
82          final Throwable throwable) {
83          final String check = event.getSourceName();
84          Logger.error(
85              this,
86              "%s[%d]: %s (%s), %[exception]s",
87              event.getFileName().substring(
88                  this.env.basedir().toString().length()
89              ),
90              event.getLine(),
91              event.getMessage(),
92              check.substring(check.lastIndexOf('.') + 1),
93              throwable
94          );
95      }
96  
97  }