docs: public List<Violation> applyTo(SourceCode sourceCode) throws Throwable {
          try {
              validateAstCompilerPhase(sourceCode);
              validate();
              List<Violation> violations = new ArrayList<Violation>();
              if (shouldApplyThisRuleTo(sourceCode)) {
                  applyTo(sourceCode, violations);
              }
              overrideViolationMessageIfNecessary(violations);
              return violations;
          } catch(Throwable t) {
              LOG.error("Error from [" + getClass().getName() + "] processing source file [" + sourceCode.getPath() + "]", t);
              throw t;
          }
      }