private static void _assertClassDataCoverage(
      List<AssertionError> assertionErrors, Class<?> clazz, ClassData classData) {

    if (clazz.isInterface() || clazz.isSynthetic()) {
      return;
    }

    if (classData == null) {
      assertionErrors.add(new AssertionError("Class " + clazz.getName() + " has no coverage data"));

      return;
    }

    if ((classData.getBranchCoverageRate() != 1.0) || (classData.getLineCoverageRate() != 1.0)) {

      System.out.printf(
          "%n[Cobertura] %s is not fully covered.%n[Cobertura]Branch "
              + "coverage rate : %.2f, line coverage rate : %.2f.%n"
              + "[Cobertura]Please rerun test with -Djunit.code."
              + "coverage=true to see coverage report.%n",
          classData.getName(), classData.getBranchCoverageRate(), classData.getLineCoverageRate());

      Set<CoverageData> coverageDatas = classData.getLines();

      for (CoverageData coverageData : coverageDatas) {
        if (!(coverageData instanceof LineData)) {
          continue;
        }

        LineData lineData = (LineData) coverageData;

        if (lineData.isCovered()) {
          continue;
        }

        System.out.printf(
            "[Cobertura] %s line %d is not covered %n",
            classData.getName(), lineData.getLineNumber());
      }

      assertionErrors.add(new AssertionError(classData.getName() + " is not fully covered"));

      return;
    }

    System.out.printf("[Cobertura] %s is fully covered.%n", classData.getName());
  }
  private void dumpMethod(ClassData classData, String nameAndSig) {
    String name = nameAndSig.substring(0, nameAndSig.indexOf('('));
    String signature = nameAndSig.substring(nameAndSig.indexOf('('));
    double lineRate = classData.getLineCoverageRate(nameAndSig);
    double branchRate = classData.getBranchCoverageRate(nameAndSig);

    println(
        "<method name=\""
            + xmlEscape(name)
            + "\" signature=\""
            + xmlEscape(signature)
            + "\" line-rate=\""
            + lineRate
            + "\" branch-rate=\""
            + branchRate
            + "\">");
    increaseIndentation();
    dumpLines(classData, nameAndSig);
    decreaseIndentation();
    println("</method>");
  }
  private void dumpClass(ClassData classData) {
    logger.debug("Dumping class " + classData.getName());

    println(
        "<class name=\""
            + classData.getName()
            + "\" filename=\""
            + classData.getSourceFileName()
            + "\" line-rate=\""
            + classData.getLineCoverageRate()
            + "\" branch-rate=\""
            + classData.getBranchCoverageRate()
            + "\" complexity=\""
            + complexity.getCCNForClass(classData)
            + "\""
            + ">");
    increaseIndentation();

    dumpMethods(classData);
    dumpLines(classData);

    decreaseIndentation();
    println("</class>");
  }