docs: @Override
    public void executeImpl(SensorContext context) {
      try {
        LOG.info("Searching reports by relative path with basedir '{}' and search prop '{}'",
                context.fileSystem().baseDir(), getReportPathKey());
        List<File> reports = getReports(context.config(), context.fileSystem().baseDir(), getReportPathKey());
        violationsPerFileCount.clear();
        violationsPerModuleCount = 0;
  
        for (File report : reports) {
          int prevViolationsCount = violationsPerModuleCount;
          LOG.info("Processing report '{}'", report);
          executeReport(context, report, prevViolationsCount);
        }
  
        Metric<Integer> metric = getLanguage().getMetric(this.getMetricKey());
        LOG.info("{} processed = {}", metric.getKey(), violationsPerModuleCount);
  
        for (Map.Entry<InputFile, Integer> entry : violationsPerFileCount.entrySet()) {
          context.<Integer>newMeasure()
                  .forMetric(metric)
                  .on(entry.getKey())
                  .withValue(entry.getValue())
                  .save();
        }
  
        // this sensor could be executed on module without any files
        // (possible for hierarchical multi-module projects)
        // don't publish 0 as module metric,
        // let AggregateMeasureComputer calculate the correct value
        if (violationsPerModuleCount != 0) {
          context.<Integer>newMeasure()
                  .forMetric(metric)
                  .on(context.module())
                  .withValue(violationsPerModuleCount)
                  .save();
        }
      } catch (Exception e) {
        String msg = new StringBuilder(256)
                .append("Cannot feed the data into sonar, details: '")
                .append(CxxUtils.getStackTrace(e))
                .append("'")
                .toString();
        LOG.error(msg);
        CxxUtils.validateRecovery(e, getLanguage());
      }
    }