You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@commons.apache.org by gg...@apache.org on 2024/09/25 02:11:30 UTC

svn commit: r1087640 [22/44] - in /websites/production/commons/content/proper/commons-csv: ./ apidocs/ apidocs/org/apache/commons/csv/ apidocs/org/apache/commons/csv/class-use/ apidocs/src-html/org/apache/commons/csv/ jacoco/ jacoco/jacoco-resources/ j...

Modified: websites/production/commons/content/proper/commons-csv/jacoco/org.apache.commons.csv/CSVParser.java.html
==============================================================================
--- websites/production/commons/content/proper/commons-csv/jacoco/org.apache.commons.csv/CSVParser.java.html (original)
+++ websites/production/commons/content/proper/commons-csv/jacoco/org.apache.commons.csv/CSVParser.java.html Wed Sep 25 02:11:29 2024
@@ -72,7 +72,7 @@ import org.apache.commons.io.function.Un
  * For those who like fluent APIs, parsers can be created using {@link CSVFormat#parse(java.io.Reader)} as a shortcut:
  * </p>
  * <pre>
- * for(CSVRecord record : CSVFormat.EXCEL.parse(in)) {
+ * for (CSVRecord record : CSVFormat.EXCEL.parse(in)) {
  *     ...
  * }
  * </pre>
@@ -82,12 +82,12 @@ import org.apache.commons.io.function.Un
  * To parse a CSV input from a file, you write:
  * </p>
  *
- * <pre>
- * File csvData = new File("/path/to/csv");
+ * <pre>{@code
+ * File csvData = new File("/path/to/csv");
  * CSVParser parser = CSVParser.parse(csvData, CSVFormat.RFC4180);
  * for (CSVRecord csvRecord : parser) {
  *     ...
- * }
+ * }}
  * </pre>
  *
  * <p>
@@ -116,11 +116,11 @@ import org.apache.commons.io.function.Un
  * If parsing record-wise is not desired, the contents of the input can be read completely into memory.
  * </p>
  *
- * <pre>
- * Reader in = new StringReader("a;b\nc;d");
+ * <pre>{@code
+ * Reader in = new StringReader("a;b\nc;d");
  * CSVParser parser = new CSVParser(in, CSVFormat.EXCEL);
- * List<CSVRecord> list = parser.getRecords();
- * </pre>
+ * List<CSVRecord> list = parser.getRecords();
+ * }</pre>
  *
  * <p>
  * There are two constraints that have to be kept in mind:
@@ -145,44 +145,49 @@ public final class CSVParser implements
 <span class="fc" id="L145">    final class CSVRecordIterator implements Iterator&lt;CSVRecord&gt; {</span>
         private CSVRecord current;
 
+        /**
+         * Gets the next record.
+         *
+         * @return the next record.
+         */
         private CSVRecord getNextRecord() {
-<span class="fc" id="L149">            return Uncheck.get(CSVParser.this::nextRecord);</span>
+<span class="fc" id="L154">            return Uncheck.get(CSVParser.this::nextRecord);</span>
         }
 
         @Override
         public boolean hasNext() {
-<span class="fc bfc" id="L154" title="All 2 branches covered.">            if (CSVParser.this.isClosed()) {</span>
-<span class="fc" id="L155">                return false;</span>
+<span class="fc bfc" id="L159" title="All 2 branches covered.">            if (isClosed()) {</span>
+<span class="fc" id="L160">                return false;</span>
             }
-<span class="fc bfc" id="L157" title="All 2 branches covered.">            if (current == null) {</span>
-<span class="fc" id="L158">                current = getNextRecord();</span>
+<span class="fc bfc" id="L162" title="All 2 branches covered.">            if (current == null) {</span>
+<span class="fc" id="L163">                current = getNextRecord();</span>
             }
 
-<span class="fc bfc" id="L161" title="All 2 branches covered.">            return current != null;</span>
+<span class="fc bfc" id="L166" title="All 2 branches covered.">            return current != null;</span>
         }
 
         @Override
         public CSVRecord next() {
-<span class="fc bfc" id="L166" title="All 2 branches covered.">            if (CSVParser.this.isClosed()) {</span>
-<span class="fc" id="L167">                throw new NoSuchElementException(&quot;CSVParser has been closed&quot;);</span>
+<span class="fc bfc" id="L171" title="All 2 branches covered.">            if (isClosed()) {</span>
+<span class="fc" id="L172">                throw new NoSuchElementException(&quot;CSVParser has been closed&quot;);</span>
             }
-<span class="fc" id="L169">            CSVRecord next = current;</span>
-<span class="fc" id="L170">            current = null;</span>
+<span class="fc" id="L174">            CSVRecord next = current;</span>
+<span class="fc" id="L175">            current = null;</span>
 
-<span class="fc bfc" id="L172" title="All 2 branches covered.">            if (next == null) {</span>
+<span class="fc bfc" id="L177" title="All 2 branches covered.">            if (next == null) {</span>
                 // hasNext() wasn't called before
-<span class="fc" id="L174">                next = getNextRecord();</span>
-<span class="fc bfc" id="L175" title="All 2 branches covered.">                if (next == null) {</span>
-<span class="fc" id="L176">                    throw new NoSuchElementException(&quot;No more CSV records available&quot;);</span>
+<span class="fc" id="L179">                next = getNextRecord();</span>
+<span class="fc bfc" id="L180" title="All 2 branches covered.">                if (next == null) {</span>
+<span class="fc" id="L181">                    throw new NoSuchElementException(&quot;No more CSV records available&quot;);</span>
                 }
             }
 
-<span class="fc" id="L180">            return next;</span>
+<span class="fc" id="L185">            return next;</span>
         }
 
         @Override
         public void remove() {
-<span class="fc" id="L185">            throw new UnsupportedOperationException();</span>
+<span class="fc" id="L190">            throw new UnsupportedOperationException();</span>
         }
     }
 
@@ -201,10 +206,10 @@ public final class CSVParser implements
          */
         final List&lt;String&gt; headerNames;
 
-<span class="fc" id="L204">        Headers(final Map&lt;String, Integer&gt; headerMap, final List&lt;String&gt; headerNames) {</span>
-<span class="fc" id="L205">            this.headerMap = headerMap;</span>
-<span class="fc" id="L206">            this.headerNames = headerNames;</span>
-<span class="fc" id="L207">        }</span>
+<span class="fc" id="L209">        Headers(final Map&lt;String, Integer&gt; headerMap, final List&lt;String&gt; headerNames) {</span>
+<span class="fc" id="L210">            this.headerMap = headerMap;</span>
+<span class="fc" id="L211">            this.headerNames = headerNames;</span>
+<span class="fc" id="L212">        }</span>
     }
 
     /**
@@ -221,10 +226,11 @@ public final class CSVParser implements
      *             If the parameters of the format are inconsistent or if either file or format are null.
      * @throws IOException
      *             If an I/O error occurs
+     * @throws CSVException Thrown on invalid input.
      */
     public static CSVParser parse(final File file, final Charset charset, final CSVFormat format) throws IOException {
-<span class="fc" id="L226">        Objects.requireNonNull(file, &quot;file&quot;);</span>
-<span class="fc" id="L227">        return parse(file.toPath(), charset, format);</span>
+<span class="fc" id="L232">        Objects.requireNonNull(file, &quot;file&quot;);</span>
+<span class="fc" id="L233">        return parse(file.toPath(), charset, format);</span>
     }
 
     /**
@@ -246,14 +252,15 @@ public final class CSVParser implements
      *             If the parameters of the format are inconsistent or if either reader or format are null.
      * @throws IOException
      *             If there is a problem reading the header or skipping the first record
+     * @throws CSVException Thrown on invalid input.
      * @since 1.5
      */
     @SuppressWarnings(&quot;resource&quot;)
     public static CSVParser parse(final InputStream inputStream, final Charset charset, final CSVFormat format)
             throws IOException {
-<span class="fc" id="L254">        Objects.requireNonNull(inputStream, &quot;inputStream&quot;);</span>
-<span class="fc" id="L255">        Objects.requireNonNull(format, &quot;format&quot;);</span>
-<span class="fc" id="L256">        return parse(new InputStreamReader(inputStream, charset), format);</span>
+<span class="fc" id="L261">        Objects.requireNonNull(inputStream, &quot;inputStream&quot;);</span>
+<span class="fc" id="L262">        Objects.requireNonNull(format, &quot;format&quot;);</span>
+<span class="fc" id="L263">        return parse(new InputStreamReader(inputStream, charset), format);</span>
     }
 
     /**
@@ -270,13 +277,14 @@ public final class CSVParser implements
      *             If the parameters of the format are inconsistent or if either file or format are null.
      * @throws IOException
      *             If an I/O error occurs
+     * @throws CSVException Thrown on invalid input.
      * @since 1.5
      */
     @SuppressWarnings(&quot;resource&quot;)
     public static CSVParser parse(final Path path, final Charset charset, final CSVFormat format) throws IOException {
-<span class="fc" id="L277">        Objects.requireNonNull(path, &quot;path&quot;);</span>
-<span class="fc" id="L278">        Objects.requireNonNull(format, &quot;format&quot;);</span>
-<span class="fc" id="L279">        return parse(Files.newInputStream(path), charset, format);</span>
+<span class="fc" id="L285">        Objects.requireNonNull(path, &quot;path&quot;);</span>
+<span class="fc" id="L286">        Objects.requireNonNull(format, &quot;format&quot;);</span>
+<span class="fc" id="L287">        return parse(Files.newInputStream(path), charset, format);</span>
     }
 
     /**
@@ -296,10 +304,11 @@ public final class CSVParser implements
      *             If the parameters of the format are inconsistent or if either reader or format are null.
      * @throws IOException
      *             If there is a problem reading the header or skipping the first record
+     * @throws CSVException Thrown on invalid input.
      * @since 1.5
      */
     public static CSVParser parse(final Reader reader, final CSVFormat format) throws IOException {
-<span class="fc" id="L302">        return new CSVParser(reader, format);</span>
+<span class="fc" id="L311">        return new CSVParser(reader, format);</span>
     }
 
     /**
@@ -314,12 +323,13 @@ public final class CSVParser implements
      *             If the parameters of the format are inconsistent or if either string or format are null.
      * @throws IOException
      *             If an I/O error occurs
+     * @throws CSVException Thrown on invalid input.
      */
     public static CSVParser parse(final String string, final CSVFormat format) throws IOException {
-<span class="fc" id="L319">        Objects.requireNonNull(string, &quot;string&quot;);</span>
-<span class="fc" id="L320">        Objects.requireNonNull(format, &quot;format&quot;);</span>
+<span class="fc" id="L329">        Objects.requireNonNull(string, &quot;string&quot;);</span>
+<span class="fc" id="L330">        Objects.requireNonNull(format, &quot;format&quot;);</span>
 
-<span class="fc" id="L322">        return new CSVParser(new StringReader(string), format);</span>
+<span class="fc" id="L332">        return new CSVParser(new StringReader(string), format);</span>
     }
 
     /**
@@ -341,14 +351,15 @@ public final class CSVParser implements
      *             If the parameters of the format are inconsistent or if either url, charset or format are null.
      * @throws IOException
      *             If an I/O error occurs
+     * @throws CSVException Thrown on invalid input.
      */
     @SuppressWarnings(&quot;resource&quot;)
     public static CSVParser parse(final URL url, final Charset charset, final CSVFormat format) throws IOException {
-<span class="fc" id="L347">        Objects.requireNonNull(url, &quot;url&quot;);</span>
-<span class="fc" id="L348">        Objects.requireNonNull(charset, &quot;charset&quot;);</span>
-<span class="fc" id="L349">        Objects.requireNonNull(format, &quot;format&quot;);</span>
+<span class="fc" id="L358">        Objects.requireNonNull(url, &quot;url&quot;);</span>
+<span class="fc" id="L359">        Objects.requireNonNull(charset, &quot;charset&quot;);</span>
+<span class="fc" id="L360">        Objects.requireNonNull(format, &quot;format&quot;);</span>
 
-<span class="fc" id="L351">        return new CSVParser(new InputStreamReader(url.openStream(), charset), format);</span>
+<span class="fc" id="L362">        return new CSVParser(new InputStreamReader(url.openStream(), charset), format);</span>
     }
 
     private String headerComment;
@@ -364,7 +375,7 @@ public final class CSVParser implements
     private final CSVRecordIterator csvRecordIterator;
 
     /** A record buffer for getRecord(). Grows as necessary and is reused. */
-<span class="fc" id="L367">    private final List&lt;String&gt; recordList = new ArrayList&lt;&gt;();</span>
+<span class="fc" id="L378">    private final List&lt;String&gt; recordList = new ArrayList&lt;&gt;();</span>
 
     /**
      * The next record number to assign.
@@ -377,7 +388,7 @@ public final class CSVParser implements
      */
     private final long characterOffset;
 
-<span class="fc" id="L380">    private final Token reusableToken = new Token();</span>
+<span class="fc" id="L391">    private final Token reusableToken = new Token();</span>
 
     /**
      * Constructs a new instance using the given {@link CSVFormat}
@@ -395,10 +406,11 @@ public final class CSVParser implements
      *             If the parameters of the format are inconsistent or if either reader or format are null.
      * @throws IOException
      *             If there is a problem reading the header or skipping the first record
+     * @throws CSVException Thrown on invalid input.
      */
     public CSVParser(final Reader reader, final CSVFormat format) throws IOException {
-<span class="fc" id="L400">        this(reader, format, 0, 1);</span>
-<span class="fc" id="L401">    }</span>
+<span class="fc" id="L412">        this(reader, format, 0, 1);</span>
+<span class="fc" id="L413">    }</span>
 
     /**
      * Constructs a new instance using the given {@link CSVFormat}
@@ -420,28 +432,29 @@ public final class CSVParser implements
      *             If the parameters of the format are inconsistent or if either the reader or format is null.
      * @throws IOException
      *             If there is a problem reading the header or skipping the first record
+     * @throws CSVException Thrown on invalid input.
      * @since 1.1
      */
     @SuppressWarnings(&quot;resource&quot;)
     public CSVParser(final Reader reader, final CSVFormat format, final long characterOffset, final long recordNumber)
-<span class="fc" id="L427">        throws IOException {</span>
-<span class="fc" id="L428">        Objects.requireNonNull(reader, &quot;reader&quot;);</span>
-<span class="fc" id="L429">        Objects.requireNonNull(format, &quot;format&quot;);</span>
-<span class="fc" id="L430">        this.format = format.copy();</span>
-<span class="fc" id="L431">        this.lexer = new Lexer(format, new ExtendedBufferedReader(reader));</span>
-<span class="fc" id="L432">        this.csvRecordIterator = new CSVRecordIterator();</span>
-<span class="fc" id="L433">        this.headers = createHeaders();</span>
-<span class="fc" id="L434">        this.characterOffset = characterOffset;</span>
-<span class="fc" id="L435">        this.recordNumber = recordNumber - 1;</span>
-<span class="fc" id="L436">    }</span>
+<span class="fc" id="L440">        throws IOException {</span>
+<span class="fc" id="L441">        Objects.requireNonNull(reader, &quot;reader&quot;);</span>
+<span class="fc" id="L442">        Objects.requireNonNull(format, &quot;format&quot;);</span>
+<span class="fc" id="L443">        this.format = format.copy();</span>
+<span class="fc" id="L444">        this.lexer = new Lexer(format, new ExtendedBufferedReader(reader));</span>
+<span class="fc" id="L445">        this.csvRecordIterator = new CSVRecordIterator();</span>
+<span class="fc" id="L446">        this.headers = createHeaders();</span>
+<span class="fc" id="L447">        this.characterOffset = characterOffset;</span>
+<span class="fc" id="L448">        this.recordNumber = recordNumber - 1;</span>
+<span class="fc" id="L449">    }</span>
 
     private void addRecordValue(final boolean lastRecord) {
-<span class="fc" id="L439">        final String input = format.trim(reusableToken.content.toString());</span>
-<span class="fc bfc" id="L440" title="All 6 branches covered.">        if (lastRecord &amp;&amp; input.isEmpty() &amp;&amp; format.getTrailingDelimiter()) {</span>
-<span class="fc" id="L441">            return;</span>
+<span class="fc" id="L452">        final String input = format.trim(reusableToken.content.toString());</span>
+<span class="fc bfc" id="L453" title="All 6 branches covered.">        if (lastRecord &amp;&amp; input.isEmpty() &amp;&amp; format.getTrailingDelimiter()) {</span>
+<span class="fc" id="L454">            return;</span>
         }
-<span class="fc" id="L443">        recordList.add(handleNull(input));</span>
-<span class="fc" id="L444">    }</span>
+<span class="fc" id="L456">        recordList.add(handleNull(input));</span>
+<span class="fc" id="L457">    }</span>
 
     /**
      * Closes resources.
@@ -451,13 +464,13 @@ public final class CSVParser implements
      */
     @Override
     public void close() throws IOException {
-<span class="fc" id="L454">        lexer.close();</span>
-<span class="fc" id="L455">    }</span>
+<span class="fc" id="L467">        lexer.close();</span>
+<span class="fc" id="L468">    }</span>
 
     private Map&lt;String, Integer&gt; createEmptyHeaderMap() {
-<span class="fc bfc" id="L458" title="All 2 branches covered.">        return format.getIgnoreHeaderCase() ?</span>
-<span class="fc" id="L459">                new TreeMap&lt;&gt;(String.CASE_INSENSITIVE_ORDER) :</span>
-<span class="fc" id="L460">                new LinkedHashMap&lt;&gt;();</span>
+<span class="fc bfc" id="L471" title="All 2 branches covered.">        return format.getIgnoreHeaderCase() ?</span>
+<span class="fc" id="L472">                new TreeMap&lt;&gt;(String.CASE_INSENSITIVE_ORDER) :</span>
+<span class="fc" id="L473">                new LinkedHashMap&lt;&gt;();</span>
     }
 
     /**
@@ -465,67 +478,68 @@ public final class CSVParser implements
      *
      * @return null if the format has no header.
      * @throws IOException if there is a problem reading the header or skipping the first record
+     * @throws CSVException Thrown on invalid input.
      */
     private Headers createHeaders() throws IOException {
-<span class="fc" id="L470">        Map&lt;String, Integer&gt; hdrMap = null;</span>
-<span class="fc" id="L471">        List&lt;String&gt; headerNames = null;</span>
-<span class="fc" id="L472">        final String[] formatHeader = format.getHeader();</span>
-<span class="fc bfc" id="L473" title="All 2 branches covered.">        if (formatHeader != null) {</span>
-<span class="fc" id="L474">            hdrMap = createEmptyHeaderMap();</span>
-<span class="fc" id="L475">            String[] headerRecord = null;</span>
-<span class="fc bfc" id="L476" title="All 2 branches covered.">            if (formatHeader.length == 0) {</span>
+<span class="fc" id="L484">        Map&lt;String, Integer&gt; hdrMap = null;</span>
+<span class="fc" id="L485">        List&lt;String&gt; headerNames = null;</span>
+<span class="fc" id="L486">        final String[] formatHeader = format.getHeader();</span>
+<span class="fc bfc" id="L487" title="All 2 branches covered.">        if (formatHeader != null) {</span>
+<span class="fc" id="L488">            hdrMap = createEmptyHeaderMap();</span>
+<span class="fc" id="L489">            String[] headerRecord = null;</span>
+<span class="fc bfc" id="L490" title="All 2 branches covered.">            if (formatHeader.length == 0) {</span>
                 // read the header from the first line of the file
-<span class="fc" id="L478">                final CSVRecord nextRecord = nextRecord();</span>
-<span class="fc bfc" id="L479" title="All 2 branches covered.">                if (nextRecord != null) {</span>
-<span class="fc" id="L480">                    headerRecord = nextRecord.values();</span>
-<span class="fc" id="L481">                    headerComment = nextRecord.getComment();</span>
+<span class="fc" id="L492">                final CSVRecord nextRecord = nextRecord();</span>
+<span class="fc bfc" id="L493" title="All 2 branches covered.">                if (nextRecord != null) {</span>
+<span class="fc" id="L494">                    headerRecord = nextRecord.values();</span>
+<span class="fc" id="L495">                    headerComment = nextRecord.getComment();</span>
                 }
-<span class="fc" id="L483">            } else {</span>
-<span class="fc bfc" id="L484" title="All 2 branches covered.">                if (format.getSkipHeaderRecord()) {</span>
-<span class="fc" id="L485">                    final CSVRecord nextRecord = nextRecord();</span>
-<span class="pc bpc" id="L486" title="1 of 2 branches missed.">                    if (nextRecord != null) {</span>
-<span class="fc" id="L487">                        headerComment = nextRecord.getComment();</span>
+<span class="fc" id="L497">            } else {</span>
+<span class="fc bfc" id="L498" title="All 2 branches covered.">                if (format.getSkipHeaderRecord()) {</span>
+<span class="fc" id="L499">                    final CSVRecord nextRecord = nextRecord();</span>
+<span class="pc bpc" id="L500" title="1 of 2 branches missed.">                    if (nextRecord != null) {</span>
+<span class="fc" id="L501">                        headerComment = nextRecord.getComment();</span>
                     }
                 }
-<span class="fc" id="L490">                headerRecord = formatHeader;</span>
+<span class="fc" id="L504">                headerRecord = formatHeader;</span>
             }
 
             // build the name to index mappings
-<span class="fc bfc" id="L494" title="All 2 branches covered.">            if (headerRecord != null) {</span>
+<span class="fc bfc" id="L508" title="All 2 branches covered.">            if (headerRecord != null) {</span>
                 // Track an occurrence of a null, empty or blank header.
-<span class="fc" id="L496">                boolean observedMissing = false;</span>
-<span class="fc bfc" id="L497" title="All 2 branches covered.">                for (int i = 0; i &lt; headerRecord.length; i++) {</span>
-<span class="fc" id="L498">                    final String header = headerRecord[i];</span>
-<span class="fc" id="L499">                    final boolean blankHeader = CSVFormat.isBlank(header);</span>
-<span class="fc bfc" id="L500" title="All 4 branches covered.">                    if (blankHeader &amp;&amp; !format.getAllowMissingColumnNames()) {</span>
-<span class="fc" id="L501">                        throw new IllegalArgumentException(</span>
-<span class="fc" id="L502">                            &quot;A header name is missing in &quot; + Arrays.toString(headerRecord));</span>
+<span class="fc" id="L510">                boolean observedMissing = false;</span>
+<span class="fc bfc" id="L511" title="All 2 branches covered.">                for (int i = 0; i &lt; headerRecord.length; i++) {</span>
+<span class="fc" id="L512">                    final String header = headerRecord[i];</span>
+<span class="fc" id="L513">                    final boolean blankHeader = CSVFormat.isBlank(header);</span>
+<span class="fc bfc" id="L514" title="All 4 branches covered.">                    if (blankHeader &amp;&amp; !format.getAllowMissingColumnNames()) {</span>
+<span class="fc" id="L515">                        throw new IllegalArgumentException(</span>
+<span class="fc" id="L516">                            &quot;A header name is missing in &quot; + Arrays.toString(headerRecord));</span>
                     }
 
-<span class="fc bfc" id="L505" title="All 2 branches covered.">                    final boolean containsHeader = blankHeader ? observedMissing : hdrMap.containsKey(header);</span>
-<span class="fc" id="L506">                    final DuplicateHeaderMode headerMode = format.getDuplicateHeaderMode();</span>
-<span class="fc bfc" id="L507" title="All 2 branches covered.">                    final boolean duplicatesAllowed = headerMode == DuplicateHeaderMode.ALLOW_ALL;</span>
-<span class="fc bfc" id="L508" title="All 2 branches covered.">                    final boolean emptyDuplicatesAllowed = headerMode == DuplicateHeaderMode.ALLOW_EMPTY;</span>
-
-<span class="fc bfc" id="L510" title="All 8 branches covered.">                    if (containsHeader &amp;&amp; !duplicatesAllowed &amp;&amp; !(blankHeader &amp;&amp; emptyDuplicatesAllowed)) {</span>
-<span class="fc" id="L511">                        throw new IllegalArgumentException(</span>
-<span class="fc" id="L512">                            String.format(</span>
+<span class="fc bfc" id="L519" title="All 2 branches covered.">                    final boolean containsHeader = blankHeader ? observedMissing : hdrMap.containsKey(header);</span>
+<span class="fc" id="L520">                    final DuplicateHeaderMode headerMode = format.getDuplicateHeaderMode();</span>
+<span class="fc bfc" id="L521" title="All 2 branches covered.">                    final boolean duplicatesAllowed = headerMode == DuplicateHeaderMode.ALLOW_ALL;</span>
+<span class="fc bfc" id="L522" title="All 2 branches covered.">                    final boolean emptyDuplicatesAllowed = headerMode == DuplicateHeaderMode.ALLOW_EMPTY;</span>
+
+<span class="fc bfc" id="L524" title="All 8 branches covered.">                    if (containsHeader &amp;&amp; !duplicatesAllowed &amp;&amp; !(blankHeader &amp;&amp; emptyDuplicatesAllowed)) {</span>
+<span class="fc" id="L525">                        throw new IllegalArgumentException(</span>
+<span class="fc" id="L526">                            String.format(</span>
                                 &quot;The header contains a duplicate name: \&quot;%s\&quot; in %s. If this is valid then use CSVFormat.Builder.setDuplicateHeaderMode().&quot;,
-<span class="fc" id="L514">                                header, Arrays.toString(headerRecord)));</span>
+<span class="fc" id="L528">                                header, Arrays.toString(headerRecord)));</span>
                     }
-<span class="fc" id="L516">                    observedMissing |= blankHeader;</span>
-<span class="fc bfc" id="L517" title="All 2 branches covered.">                    if (header != null) {</span>
-<span class="fc" id="L518">                        hdrMap.put(header, Integer.valueOf(i));</span>
-<span class="fc bfc" id="L519" title="All 2 branches covered.">                        if (headerNames == null) {</span>
-<span class="fc" id="L520">                            headerNames = new ArrayList&lt;&gt;(headerRecord.length);</span>
+<span class="fc" id="L530">                    observedMissing |= blankHeader;</span>
+<span class="fc bfc" id="L531" title="All 2 branches covered.">                    if (header != null) {</span>
+<span class="fc" id="L532">                        hdrMap.put(header, Integer.valueOf(i)); // N.B. Explicit (un)boxing is intentional</span>
+<span class="fc bfc" id="L533" title="All 2 branches covered.">                        if (headerNames == null) {</span>
+<span class="fc" id="L534">                            headerNames = new ArrayList&lt;&gt;(headerRecord.length);</span>
                         }
-<span class="fc" id="L522">                        headerNames.add(header);</span>
+<span class="fc" id="L536">                        headerNames.add(header);</span>
                     }
                 }
             }
         }
         // Make header names Collection immutable
-<span class="fc bfc" id="L528" title="All 2 branches covered.">        return new Headers(hdrMap, headerNames == null ? Collections.emptyList() : Collections.unmodifiableList(headerNames));</span>
+<span class="fc bfc" id="L542" title="All 2 branches covered.">        return new Headers(hdrMap, headerNames == null ? Collections.emptyList() : Collections.unmodifiableList(headerNames));</span>
     }
 
     /**
@@ -539,7 +553,7 @@ public final class CSVParser implements
      * @return current line number
      */
     public long getCurrentLineNumber() {
-<span class="fc" id="L542">        return lexer.getCurrentLineNumber();</span>
+<span class="fc" id="L556">        return lexer.getCurrentLineNumber();</span>
     }
 
     /**
@@ -549,7 +563,7 @@ public final class CSVParser implements
      * @since 1.5
      */
     public String getFirstEndOfLine() {
-<span class="fc" id="L552">        return lexer.getFirstEol();</span>
+<span class="fc" id="L566">        return lexer.getFirstEol();</span>
     }
 
     /**
@@ -560,7 +574,7 @@ public final class CSVParser implements
      * @since 1.10.0
      */
     public String getHeaderComment() {
-<span class="fc" id="L563">        return headerComment;</span>
+<span class="fc" id="L577">        return headerComment;</span>
     }
 
     /**
@@ -576,12 +590,12 @@ public final class CSVParser implements
      * @return a copy of the header map.
      */
     public Map&lt;String, Integer&gt; getHeaderMap() {
-<span class="fc bfc" id="L579" title="All 2 branches covered.">        if (headers.headerMap == null) {</span>
-<span class="fc" id="L580">            return null;</span>
+<span class="fc bfc" id="L593" title="All 2 branches covered.">        if (headers.headerMap == null) {</span>
+<span class="fc" id="L594">            return null;</span>
         }
-<span class="fc" id="L582">        final Map&lt;String, Integer&gt; map = createEmptyHeaderMap();</span>
-<span class="fc" id="L583">        map.putAll(headers.headerMap);</span>
-<span class="fc" id="L584">        return map;</span>
+<span class="fc" id="L596">        final Map&lt;String, Integer&gt; map = createEmptyHeaderMap();</span>
+<span class="fc" id="L597">        map.putAll(headers.headerMap);</span>
+<span class="fc" id="L598">        return map;</span>
     }
 
     /**
@@ -590,7 +604,7 @@ public final class CSVParser implements
      * @return the underlying header map.
      */
     Map&lt;String, Integer&gt; getHeaderMapRaw() {
-<span class="fc" id="L593">        return headers.headerMap;</span>
+<span class="fc" id="L607">        return headers.headerMap;</span>
     }
 
     /**
@@ -606,7 +620,7 @@ public final class CSVParser implements
      * @since 1.7
      */
     public List&lt;String&gt; getHeaderNames() {
-<span class="fc" id="L609">        return Collections.unmodifiableList(headers.headerNames);</span>
+<span class="fc" id="L623">        return Collections.unmodifiableList(headers.headerNames);</span>
     }
 
     /**
@@ -620,7 +634,7 @@ public final class CSVParser implements
      * @return current record number
      */
     public long getRecordNumber() {
-<span class="fc" id="L623">        return recordNumber;</span>
+<span class="fc" id="L637">        return recordNumber;</span>
     }
 
     /**
@@ -636,7 +650,7 @@ public final class CSVParser implements
      *             on parse error or input read-failure
      */
     public List&lt;CSVRecord&gt; getRecords() {
-<span class="fc" id="L639">        return stream().collect(Collectors.toList());</span>
+<span class="fc" id="L653">        return stream().collect(Collectors.toList());</span>
     }
 
     /**
@@ -647,7 +661,7 @@ public final class CSVParser implements
      * @since 1.10.0
      */
     public String getTrailerComment() {
-<span class="fc" id="L650">        return trailerComment;</span>
+<span class="fc" id="L664">        return trailerComment;</span>
     }
 
     /**
@@ -658,15 +672,15 @@ public final class CSVParser implements
      * @return null if input is parsed as null, or input itself if the input isn't parsed as null
      */
     private String handleNull(final String input) {
-<span class="fc" id="L661">        final boolean isQuoted = reusableToken.isQuoted;</span>
-<span class="fc" id="L662">        final String nullString = format.getNullString();</span>
-<span class="fc" id="L663">        final boolean strictQuoteMode = isStrictQuoteMode();</span>
-<span class="fc bfc" id="L664" title="All 2 branches covered.">        if (input.equals(nullString)) {</span>
+<span class="fc" id="L675">        final boolean isQuoted = reusableToken.isQuoted;</span>
+<span class="fc" id="L676">        final String nullString = format.getNullString();</span>
+<span class="fc" id="L677">        final boolean strictQuoteMode = isStrictQuoteMode();</span>
+<span class="fc bfc" id="L678" title="All 2 branches covered.">        if (input.equals(nullString)) {</span>
             // nullString = NULL(String), distinguish between &quot;NULL&quot; and NULL in ALL_NON_NULL or NON_NUMERIC quote mode
-<span class="fc bfc" id="L666" title="All 4 branches covered.">            return strictQuoteMode &amp;&amp; isQuoted ? input : null;</span>
+<span class="fc bfc" id="L680" title="All 4 branches covered.">            return strictQuoteMode &amp;&amp; isQuoted ? input : null;</span>
         }
         // don't set nullString, distinguish between &quot;&quot; and ,, (absent values) in All_NON_NULL or NON_NUMERIC quote mode
-<span class="fc bfc" id="L669" title="All 8 branches covered.">        return strictQuoteMode &amp;&amp; nullString == null &amp;&amp; input.isEmpty() &amp;&amp; !isQuoted ? null : input;</span>
+<span class="fc bfc" id="L683" title="All 8 branches covered.">        return strictQuoteMode &amp;&amp; nullString == null &amp;&amp; input.isEmpty() &amp;&amp; !isQuoted ? null : input;</span>
     }
 
     /**
@@ -682,7 +696,7 @@ public final class CSVParser implements
      * @since 1.10.0
      */
     public boolean hasHeaderComment() {
-<span class="fc bfc" id="L685" title="All 2 branches covered.">        return headerComment != null;</span>
+<span class="fc bfc" id="L699" title="All 2 branches covered.">        return headerComment != null;</span>
     }
 
     /**
@@ -695,7 +709,7 @@ public final class CSVParser implements
      * @since 1.10.0
      */
     public boolean hasTrailerComment() {
-<span class="fc bfc" id="L698" title="All 2 branches covered.">        return trailerComment != null;</span>
+<span class="fc bfc" id="L712" title="All 2 branches covered.">        return trailerComment != null;</span>
     }
 
     /**
@@ -704,7 +718,7 @@ public final class CSVParser implements
      * @return whether this parser is closed.
      */
     public boolean isClosed() {
-<span class="fc" id="L707">        return lexer.isClosed();</span>
+<span class="fc" id="L721">        return lexer.isClosed();</span>
     }
 
     /**
@@ -714,8 +728,8 @@ public final class CSVParser implements
      *         {@link QuoteMode#NON_NUMERIC}.
      */
     private boolean isStrictQuoteMode() {
-<span class="fc bfc" id="L717" title="All 2 branches covered.">        return format.getQuoteMode() == QuoteMode.ALL_NON_NULL ||</span>
-<span class="fc bfc" id="L718" title="All 2 branches covered.">               format.getQuoteMode() == QuoteMode.NON_NUMERIC;</span>
+<span class="fc bfc" id="L731" title="All 2 branches covered.">        return format.getQuoteMode() == QuoteMode.ALL_NON_NULL ||</span>
+<span class="fc bfc" id="L732" title="All 2 branches covered.">               format.getQuoteMode() == QuoteMode.NON_NUMERIC;</span>
     }
 
     /**
@@ -739,61 +753,61 @@ public final class CSVParser implements
      */
     @Override
     public Iterator&lt;CSVRecord&gt; iterator() {
-<span class="fc" id="L742">        return csvRecordIterator;</span>
+<span class="fc" id="L756">        return csvRecordIterator;</span>
     }
 
     /**
      * Parses the next record from the current point in the stream.
      *
      * @return the record as an array of values, or {@code null} if the end of the stream has been reached
-     * @throws IOException
-     *             on parse error or input read-failure
+     * @throws IOException  on parse error or input read-failure
+     * @throws CSVException Thrown on invalid input.
      */
     CSVRecord nextRecord() throws IOException {
-<span class="fc" id="L753">        CSVRecord result = null;</span>
-<span class="fc" id="L754">        recordList.clear();</span>
-<span class="fc" id="L755">        StringBuilder sb = null;</span>
-<span class="fc" id="L756">        final long startCharPosition = lexer.getCharacterPosition() + characterOffset;</span>
+<span class="fc" id="L767">        CSVRecord result = null;</span>
+<span class="fc" id="L768">        recordList.clear();</span>
+<span class="fc" id="L769">        StringBuilder sb = null;</span>
+<span class="fc" id="L770">        final long startCharPosition = lexer.getCharacterPosition() + characterOffset;</span>
         do {
-<span class="fc" id="L758">            reusableToken.reset();</span>
-<span class="fc" id="L759">            lexer.nextToken(reusableToken);</span>
-<span class="pc bpc" id="L760" title="2 of 6 branches missed.">            switch (reusableToken.type) {</span>
+<span class="fc" id="L772">            reusableToken.reset();</span>
+<span class="fc" id="L773">            lexer.nextToken(reusableToken);</span>
+<span class="pc bpc" id="L774" title="2 of 6 branches missed.">            switch (reusableToken.type) {</span>
             case TOKEN:
-<span class="fc" id="L762">                addRecordValue(false);</span>
-<span class="fc" id="L763">                break;</span>
+<span class="fc" id="L776">                addRecordValue(false);</span>
+<span class="fc" id="L777">                break;</span>
             case EORECORD:
-<span class="fc" id="L765">                addRecordValue(true);</span>
-<span class="fc" id="L766">                break;</span>
+<span class="fc" id="L779">                addRecordValue(true);</span>
+<span class="fc" id="L780">                break;</span>
             case EOF:
-<span class="fc bfc" id="L768" title="All 2 branches covered.">                if (reusableToken.isReady) {</span>
-<span class="fc" id="L769">                    addRecordValue(true);</span>
-<span class="fc bfc" id="L770" title="All 2 branches covered.">                } else if (sb != null) {</span>
-<span class="fc" id="L771">                    trailerComment = sb.toString();</span>
+<span class="fc bfc" id="L782" title="All 2 branches covered.">                if (reusableToken.isReady) {</span>
+<span class="fc" id="L783">                    addRecordValue(true);</span>
+<span class="fc bfc" id="L784" title="All 2 branches covered.">                } else if (sb != null) {</span>
+<span class="fc" id="L785">                    trailerComment = sb.toString();</span>
                 }
                 break;
             case INVALID:
-<span class="nc" id="L775">                throw new IOException(&quot;(line &quot; + getCurrentLineNumber() + &quot;) invalid parse sequence&quot;);</span>
+<span class="nc" id="L789">                throw new IOException(&quot;(line &quot; + getCurrentLineNumber() + &quot;) invalid parse sequence&quot;);</span>
             case COMMENT: // Ignored currently
-<span class="fc bfc" id="L777" title="All 2 branches covered.">                if (sb == null) { // first comment for this record</span>
-<span class="fc" id="L778">                    sb = new StringBuilder();</span>
+<span class="fc bfc" id="L791" title="All 2 branches covered.">                if (sb == null) { // first comment for this record</span>
+<span class="fc" id="L792">                    sb = new StringBuilder();</span>
                 } else {
-<span class="fc" id="L780">                    sb.append(Constants.LF);</span>
+<span class="fc" id="L794">                    sb.append(Constants.LF);</span>
                 }
-<span class="fc" id="L782">                sb.append(reusableToken.content);</span>
-<span class="fc" id="L783">                reusableToken.type = TOKEN; // Read another token</span>
-<span class="fc" id="L784">                break;</span>
+<span class="fc" id="L796">                sb.append(reusableToken.content);</span>
+<span class="fc" id="L797">                reusableToken.type = TOKEN; // Read another token</span>
+<span class="fc" id="L798">                break;</span>
             default:
-<span class="nc" id="L786">                throw new IllegalStateException(&quot;Unexpected Token type: &quot; + reusableToken.type);</span>
+<span class="nc" id="L800">                throw new IllegalStateException(&quot;Unexpected Token type: &quot; + reusableToken.type);</span>
             }
-<span class="fc bfc" id="L788" title="All 2 branches covered.">        } while (reusableToken.type == TOKEN);</span>
+<span class="fc bfc" id="L802" title="All 2 branches covered.">        } while (reusableToken.type == TOKEN);</span>
 
-<span class="fc bfc" id="L790" title="All 2 branches covered.">        if (!recordList.isEmpty()) {</span>
-<span class="fc" id="L791">            recordNumber++;</span>
-<span class="fc bfc" id="L792" title="All 2 branches covered.">            final String comment = sb == null ? null : sb.toString();</span>
-<span class="fc" id="L793">            result = new CSVRecord(this, recordList.toArray(Constants.EMPTY_STRING_ARRAY), comment,</span>
+<span class="fc bfc" id="L804" title="All 2 branches covered.">        if (!recordList.isEmpty()) {</span>
+<span class="fc" id="L805">            recordNumber++;</span>
+<span class="fc" id="L806">            final String comment = Objects.toString(sb, null);</span>
+<span class="fc" id="L807">            result = new CSVRecord(this, recordList.toArray(Constants.EMPTY_STRING_ARRAY), comment,</span>
                 recordNumber, startCharPosition);
         }
-<span class="fc" id="L796">        return result;</span>
+<span class="fc" id="L810">        return result;</span>
     }
 
     /**
@@ -806,8 +820,8 @@ public final class CSVParser implements
      * @since 1.9.0
      */
     public Stream&lt;CSVRecord&gt; stream() {
-<span class="fc" id="L809">        return StreamSupport.stream(Spliterators.spliteratorUnknownSize(iterator(), Spliterator.ORDERED), false);</span>
+<span class="fc" id="L823">        return StreamSupport.stream(Spliterators.spliteratorUnknownSize(iterator(), Spliterator.ORDERED), false);</span>
     }
 
 }
-</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.11.202310140853</span></div></body></html>
\ No newline at end of file
+</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
\ No newline at end of file

Modified: websites/production/commons/content/proper/commons-csv/jacoco/org.apache.commons.csv/CSVPrinter.html
==============================================================================
--- websites/production/commons/content/proper/commons-csv/jacoco/org.apache.commons.csv/CSVPrinter.html (original)
+++ websites/production/commons/content/proper/commons-csv/jacoco/org.apache.commons.csv/CSVPrinter.html Wed Sep 25 02:11:29 2024
@@ -1 +1 @@
-<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>CSVPrinter</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Apache Commons CSV</a> &gt; <a href="index.html" class="el_package">org.apache.commons.csv</a> &gt; <span class="el_class">CSVPrinter</span></div><h1>CSVPrinter</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td cla
 ss="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">0 of 317</td><td class="ctr2">100%</td><td class="bar">0 of 45</td><td class="ctr2">100%</td><td class="ctr1">0</td><td class="ctr2">41</td><td class="ctr
 1">0</td><td class="ctr2">87</td><td class="ctr1">0</td><td class="ctr2">18</td></tr></tfoot><tbody><tr><td id="a6"><a href="CSVPrinter.java.html#L200" class="el_method">printComment(String)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="77" alt="77"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d0"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="15" alt="15"/></td><td class="ctr2" id="e0">100%</td><td class="ctr1" id="f0">0</td><td class="ctr2" id="g0">9</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i0">18</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a2"><a href="CSVPrinter.java.html#L84" class="el_method">CSVPrinter(Appendable, CSVFormat)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/greenbar.gif" width="87" height="10" title="56" alt="56"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d1"><img src="../jac
 oco-resources/greenbar.gif" width="64" height="10" title="8" alt="8"/></td><td class="ctr2" id="e1">100%</td><td class="ctr1" id="f1">0</td><td class="ctr2" id="g1">5</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i1">13</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a15"><a href="CSVPrinter.java.html#L416" class="el_method">printRecords(ResultSet)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/greenbar.gif" width="73" height="10" title="47" alt="47"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d2"><img src="../jacoco-resources/greenbar.gif" width="64" height="10" title="8" alt="8"/></td><td class="ctr2" id="e2">100%</td><td class="ctr1" id="f2">0</td><td class="ctr2" id="g2">5</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i2">13</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a12"><a href="CSVPrinter.java.html#L309" class="el_method">printRecordObject(Object)</a><
 /td><td class="bar" id="b3"><img src="../jacoco-resources/greenbar.gif" width="38" height="10" title="25" alt="25"/></td><td class="ctr2" id="c3">100%</td><td class="bar" id="d4"><img src="../jacoco-resources/greenbar.gif" width="32" height="10" title="4" alt="4"/></td><td class="ctr2" id="e3">100%</td><td class="ctr1" id="f3">0</td><td class="ctr2" id="g4">3</td><td class="ctr1" id="h3">0</td><td class="ctr2" id="i3">6</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a1"><a href="CSVPrinter.java.html#L135" class="el_method">close(boolean)</a></td><td class="bar" id="b4"><img src="../jacoco-resources/greenbar.gif" width="26" height="10" title="17" alt="17"/></td><td class="ctr2" id="c4">100%</td><td class="bar" id="d3"><img src="../jacoco-resources/greenbar.gif" width="48" height="10" title="6" alt="6"/></td><td class="ctr2" id="e4">100%</td><td class="ctr1" id="f4">0</td><td class="ctr2" id="g3">4</td><td class="ctr1" id="h4">0</td><td class="ctr2"
  id="i4">5</td><td class="ctr1" id="j4">0</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a5"><a href="CSVPrinter.java.html#L174" class="el_method">print(Object)</a></td><td class="bar" id="b5"><img src="../jacoco-resources/greenbar.gif" width="18" height="10" title="12" alt="12"/></td><td class="ctr2" id="c5">100%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f5">0</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h5">0</td><td class="ctr2" id="i6">3</td><td class="ctr1" id="j5">0</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a7"><a href="CSVPrinter.java.html#L238" class="el_method">printHeaders(ResultSet)</a></td><td class="bar" id="b6"><img src="../jacoco-resources/greenbar.gif" width="17" height="10" title="11" alt="11"/></td><td class="ctr2" id="c6">100%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f6">0</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h6">0</td><td class="ctr2" id
 ="i11">2</td><td class="ctr1" id="j6">0</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a3"><a href="CSVPrinter.java.html#L151" class="el_method">flush()</a></td><td class="bar" id="b7"><img src="../jacoco-resources/greenbar.gif" width="14" height="10" title="9" alt="9"/></td><td class="ctr2" id="c7">100%</td><td class="bar" id="d5"><img src="../jacoco-resources/greenbar.gif" width="16" height="10" title="2" alt="2"/></td><td class="ctr2" id="e5">100%</td><td class="ctr1" id="f7">0</td><td class="ctr2" id="g5">2</td><td class="ctr1" id="h7">0</td><td class="ctr2" id="i7">3</td><td class="ctr1" id="j7">0</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a8"><a href="CSVPrinter.java.html#L248" class="el_method">println()</a></td><td class="bar" id="b8"><img src="../jacoco-resources/greenbar.gif" width="14" height="10" title="9" alt="9"/></td><td class="ctr2" id="c8">100%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f8">0</td><td class="ctr2"
  id="g9">1</td><td class="ctr1" id="h8">0</td><td class="ctr2" id="i8">3</td><td class="ctr1" id="j8">0</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a16"><a href="CSVPrinter.java.html#L446" class="el_method">printRecords(ResultSet, boolean)</a></td><td class="bar" id="b9"><img src="../jacoco-resources/greenbar.gif" width="14" height="10" title="9" alt="9"/></td><td class="ctr2" id="c9">100%</td><td class="bar" id="d6"><img src="../jacoco-resources/greenbar.gif" width="16" height="10" title="2" alt="2"/></td><td class="ctr2" id="e6">100%</td><td class="ctr1" id="f9">0</td><td class="ctr2" id="g6">2</td><td class="ctr1" id="h9">0</td><td class="ctr2" id="i5">4</td><td class="ctr1" id="j9">0</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a9"><a href="CSVPrinter.java.html#L267" class="el_method">printRecord(Iterable)</a></td><td class="bar" id="b10"><img src="../jacoco-resources/greenbar.gif" width="12" height="10" title="8" alt="8"/></td><td class="ctr2" id="c10">100%</td><
 td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">0</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h10">0</td><td class="ctr2" id="i9">3</td><td class="ctr1" id="j10">0</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a11"><a href="CSVPrinter.java.html#L304" class="el_method">printRecord(Stream)</a></td><td class="bar" id="b11"><img src="../jacoco-resources/greenbar.gif" width="12" height="10" title="8" alt="8"/></td><td class="ctr2" id="c11">100%</td><td class="bar" id="d11"/><td class="ctr2" id="e11">n/a</td><td class="ctr1" id="f11">0</td><td class="ctr2" id="g11">1</td><td class="ctr1" id="h11">0</td><td class="ctr2" id="i10">3</td><td class="ctr1" id="j11">0</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a13"><a href="CSVPrinter.java.html#L359" class="el_method">printRecords(Iterable)</a></td><td class="bar" id="b12"><img src="../jacoco-resources/greenbar.gif" width="9" height="10" title="6" alt="6"/></td><td class="ctr2" i
 d="c12">100%</td><td class="bar" id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f12">0</td><td class="ctr2" id="g12">1</td><td class="ctr1" id="h12">0</td><td class="ctr2" id="i12">2</td><td class="ctr1" id="j12">0</td><td class="ctr2" id="k12">1</td></tr><tr><td id="a17"><a href="CSVPrinter.java.html#L495" class="el_method">printRecords(Stream)</a></td><td class="bar" id="b13"><img src="../jacoco-resources/greenbar.gif" width="9" height="10" title="6" alt="6"/></td><td class="ctr2" id="c13">100%</td><td class="bar" id="d13"/><td class="ctr2" id="e13">n/a</td><td class="ctr1" id="f13">0</td><td class="ctr2" id="g13">1</td><td class="ctr1" id="h13">0</td><td class="ctr2" id="i13">2</td><td class="ctr1" id="j13">0</td><td class="ctr2" id="k13">1</td></tr><tr><td id="a10"><a href="CSVPrinter.java.html#L285" class="el_method">printRecord(Object[])</a></td><td class="bar" id="b14"><img src="../jacoco-resources/greenbar.gif" width="7" height="10" title="5" alt="5"/></td>
 <td class="ctr2" id="c14">100%</td><td class="bar" id="d14"/><td class="ctr2" id="e14">n/a</td><td class="ctr1" id="f14">0</td><td class="ctr2" id="g14">1</td><td class="ctr1" id="h14">0</td><td class="ctr2" id="i14">2</td><td class="ctr1" id="j14">0</td><td class="ctr2" id="k14">1</td></tr><tr><td id="a14"><a href="CSVPrinter.java.html#L402" class="el_method">printRecords(Object[])</a></td><td class="bar" id="b15"><img src="../jacoco-resources/greenbar.gif" width="7" height="10" title="5" alt="5"/></td><td class="ctr2" id="c15">100%</td><td class="bar" id="d15"/><td class="ctr2" id="e15">n/a</td><td class="ctr1" id="f15">0</td><td class="ctr2" id="g15">1</td><td class="ctr1" id="h15">0</td><td class="ctr2" id="i15">2</td><td class="ctr1" id="j15">0</td><td class="ctr2" id="k15">1</td></tr><tr><td id="a0"><a href="CSVPrinter.java.html#L123" class="el_method">close()</a></td><td class="bar" id="b16"><img src="../jacoco-resources/greenbar.gif" width="6" height="10" title="4" alt="4"/>
 </td><td class="ctr2" id="c16">100%</td><td class="bar" id="d16"/><td class="ctr2" id="e16">n/a</td><td class="ctr1" id="f16">0</td><td class="ctr2" id="g16">1</td><td class="ctr1" id="h16">0</td><td class="ctr2" id="i16">2</td><td class="ctr1" id="j16">0</td><td class="ctr2" id="k16">1</td></tr><tr><td id="a4"><a href="CSVPrinter.java.html#L162" class="el_method">getOut()</a></td><td class="bar" id="b17"><img src="../jacoco-resources/greenbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c17">100%</td><td class="bar" id="d17"/><td class="ctr2" id="e17">n/a</td><td class="ctr1" id="f17">0</td><td class="ctr2" id="g17">1</td><td class="ctr1" id="h17">0</td><td class="ctr2" id="i17">1</td><td class="ctr1" id="j17">0</td><td class="ctr2" id="k17">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.11.202310140853</span></div></body></html>
\ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>CSVPrinter</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Apache Commons CSV</a> &gt; <a href="index.html" class="el_package">org.apache.commons.csv</a> &gt; <span class="el_class">CSVPrinter</span></div><h1>CSVPrinter</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td cla
 ss="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">0 of 317</td><td class="ctr2">100%</td><td class="bar">0 of 45</td><td class="ctr2">100%</td><td class="ctr1">0</td><td class="ctr2">41</td><td class="ctr
 1">0</td><td class="ctr2">87</td><td class="ctr1">0</td><td class="ctr2">18</td></tr></tfoot><tbody><tr><td id="a6"><a href="CSVPrinter.java.html#L200" class="el_method">printComment(String)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="77" alt="77"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d0"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="15" alt="15"/></td><td class="ctr2" id="e0">100%</td><td class="ctr1" id="f0">0</td><td class="ctr2" id="g0">9</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i0">18</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a2"><a href="CSVPrinter.java.html#L84" class="el_method">CSVPrinter(Appendable, CSVFormat)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/greenbar.gif" width="87" height="10" title="56" alt="56"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d1"><img src="../jac
 oco-resources/greenbar.gif" width="64" height="10" title="8" alt="8"/></td><td class="ctr2" id="e1">100%</td><td class="ctr1" id="f1">0</td><td class="ctr2" id="g1">5</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i1">13</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a15"><a href="CSVPrinter.java.html#L413" class="el_method">printRecords(ResultSet)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/greenbar.gif" width="73" height="10" title="47" alt="47"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d2"><img src="../jacoco-resources/greenbar.gif" width="64" height="10" title="8" alt="8"/></td><td class="ctr2" id="e2">100%</td><td class="ctr1" id="f2">0</td><td class="ctr2" id="g2">5</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i2">13</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a12"><a href="CSVPrinter.java.html#L309" class="el_method">printRecordObject(Object)</a><
 /td><td class="bar" id="b3"><img src="../jacoco-resources/greenbar.gif" width="38" height="10" title="25" alt="25"/></td><td class="ctr2" id="c3">100%</td><td class="bar" id="d4"><img src="../jacoco-resources/greenbar.gif" width="32" height="10" title="4" alt="4"/></td><td class="ctr2" id="e3">100%</td><td class="ctr1" id="f3">0</td><td class="ctr2" id="g4">3</td><td class="ctr1" id="h3">0</td><td class="ctr2" id="i3">6</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a1"><a href="CSVPrinter.java.html#L135" class="el_method">close(boolean)</a></td><td class="bar" id="b4"><img src="../jacoco-resources/greenbar.gif" width="26" height="10" title="17" alt="17"/></td><td class="ctr2" id="c4">100%</td><td class="bar" id="d3"><img src="../jacoco-resources/greenbar.gif" width="48" height="10" title="6" alt="6"/></td><td class="ctr2" id="e4">100%</td><td class="ctr1" id="f4">0</td><td class="ctr2" id="g3">4</td><td class="ctr1" id="h4">0</td><td class="ctr2"
  id="i4">5</td><td class="ctr1" id="j4">0</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a5"><a href="CSVPrinter.java.html#L174" class="el_method">print(Object)</a></td><td class="bar" id="b5"><img src="../jacoco-resources/greenbar.gif" width="18" height="10" title="12" alt="12"/></td><td class="ctr2" id="c5">100%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f5">0</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h5">0</td><td class="ctr2" id="i6">3</td><td class="ctr1" id="j5">0</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a7"><a href="CSVPrinter.java.html#L238" class="el_method">printHeaders(ResultSet)</a></td><td class="bar" id="b6"><img src="../jacoco-resources/greenbar.gif" width="17" height="10" title="11" alt="11"/></td><td class="ctr2" id="c6">100%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f6">0</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h6">0</td><td class="ctr2" id
 ="i11">2</td><td class="ctr1" id="j6">0</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a3"><a href="CSVPrinter.java.html#L151" class="el_method">flush()</a></td><td class="bar" id="b7"><img src="../jacoco-resources/greenbar.gif" width="14" height="10" title="9" alt="9"/></td><td class="ctr2" id="c7">100%</td><td class="bar" id="d5"><img src="../jacoco-resources/greenbar.gif" width="16" height="10" title="2" alt="2"/></td><td class="ctr2" id="e5">100%</td><td class="ctr1" id="f7">0</td><td class="ctr2" id="g5">2</td><td class="ctr1" id="h7">0</td><td class="ctr2" id="i7">3</td><td class="ctr1" id="j7">0</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a8"><a href="CSVPrinter.java.html#L248" class="el_method">println()</a></td><td class="bar" id="b8"><img src="../jacoco-resources/greenbar.gif" width="14" height="10" title="9" alt="9"/></td><td class="ctr2" id="c8">100%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f8">0</td><td class="ctr2"
  id="g9">1</td><td class="ctr1" id="h8">0</td><td class="ctr2" id="i8">3</td><td class="ctr1" id="j8">0</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a16"><a href="CSVPrinter.java.html#L443" class="el_method">printRecords(ResultSet, boolean)</a></td><td class="bar" id="b9"><img src="../jacoco-resources/greenbar.gif" width="14" height="10" title="9" alt="9"/></td><td class="ctr2" id="c9">100%</td><td class="bar" id="d6"><img src="../jacoco-resources/greenbar.gif" width="16" height="10" title="2" alt="2"/></td><td class="ctr2" id="e6">100%</td><td class="ctr1" id="f9">0</td><td class="ctr2" id="g6">2</td><td class="ctr1" id="h9">0</td><td class="ctr2" id="i5">4</td><td class="ctr1" id="j9">0</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a9"><a href="CSVPrinter.java.html#L267" class="el_method">printRecord(Iterable)</a></td><td class="bar" id="b10"><img src="../jacoco-resources/greenbar.gif" width="12" height="10" title="8" alt="8"/></td><td class="ctr2" id="c10">100%</td><
 td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">0</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h10">0</td><td class="ctr2" id="i9">3</td><td class="ctr1" id="j10">0</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a11"><a href="CSVPrinter.java.html#L304" class="el_method">printRecord(Stream)</a></td><td class="bar" id="b11"><img src="../jacoco-resources/greenbar.gif" width="12" height="10" title="8" alt="8"/></td><td class="ctr2" id="c11">100%</td><td class="bar" id="d11"/><td class="ctr2" id="e11">n/a</td><td class="ctr1" id="f11">0</td><td class="ctr2" id="g11">1</td><td class="ctr1" id="h11">0</td><td class="ctr2" id="i10">3</td><td class="ctr1" id="j11">0</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a13"><a href="CSVPrinter.java.html#L358" class="el_method">printRecords(Iterable)</a></td><td class="bar" id="b12"><img src="../jacoco-resources/greenbar.gif" width="9" height="10" title="6" alt="6"/></td><td class="ctr2" i
 d="c12">100%</td><td class="bar" id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f12">0</td><td class="ctr2" id="g12">1</td><td class="ctr1" id="h12">0</td><td class="ctr2" id="i12">2</td><td class="ctr1" id="j12">0</td><td class="ctr2" id="k12">1</td></tr><tr><td id="a17"><a href="CSVPrinter.java.html#L491" class="el_method">printRecords(Stream)</a></td><td class="bar" id="b13"><img src="../jacoco-resources/greenbar.gif" width="9" height="10" title="6" alt="6"/></td><td class="ctr2" id="c13">100%</td><td class="bar" id="d13"/><td class="ctr2" id="e13">n/a</td><td class="ctr1" id="f13">0</td><td class="ctr2" id="g13">1</td><td class="ctr1" id="h13">0</td><td class="ctr2" id="i13">2</td><td class="ctr1" id="j13">0</td><td class="ctr2" id="k13">1</td></tr><tr><td id="a10"><a href="CSVPrinter.java.html#L285" class="el_method">printRecord(Object[])</a></td><td class="bar" id="b14"><img src="../jacoco-resources/greenbar.gif" width="7" height="10" title="5" alt="5"/></td>
 <td class="ctr2" id="c14">100%</td><td class="bar" id="d14"/><td class="ctr2" id="e14">n/a</td><td class="ctr1" id="f14">0</td><td class="ctr2" id="g14">1</td><td class="ctr1" id="h14">0</td><td class="ctr2" id="i14">2</td><td class="ctr1" id="j14">0</td><td class="ctr2" id="k14">1</td></tr><tr><td id="a14"><a href="CSVPrinter.java.html#L399" class="el_method">printRecords(Object[])</a></td><td class="bar" id="b15"><img src="../jacoco-resources/greenbar.gif" width="7" height="10" title="5" alt="5"/></td><td class="ctr2" id="c15">100%</td><td class="bar" id="d15"/><td class="ctr2" id="e15">n/a</td><td class="ctr1" id="f15">0</td><td class="ctr2" id="g15">1</td><td class="ctr1" id="h15">0</td><td class="ctr2" id="i15">2</td><td class="ctr1" id="j15">0</td><td class="ctr2" id="k15">1</td></tr><tr><td id="a0"><a href="CSVPrinter.java.html#L123" class="el_method">close()</a></td><td class="bar" id="b16"><img src="../jacoco-resources/greenbar.gif" width="6" height="10" title="4" alt="4"/>
 </td><td class="ctr2" id="c16">100%</td><td class="bar" id="d16"/><td class="ctr2" id="e16">n/a</td><td class="ctr1" id="f16">0</td><td class="ctr2" id="g16">1</td><td class="ctr1" id="h16">0</td><td class="ctr2" id="i16">2</td><td class="ctr1" id="j16">0</td><td class="ctr2" id="k16">1</td></tr><tr><td id="a4"><a href="CSVPrinter.java.html#L162" class="el_method">getOut()</a></td><td class="bar" id="b17"><img src="../jacoco-resources/greenbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c17">100%</td><td class="bar" id="d17"/><td class="ctr2" id="e17">n/a</td><td class="ctr1" id="f17">0</td><td class="ctr2" id="g17">1</td><td class="ctr1" id="h17">0</td><td class="ctr2" id="i17">1</td><td class="ctr1" id="j17">0</td><td class="ctr2" id="k17">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
\ No newline at end of file

Modified: websites/production/commons/content/proper/commons-csv/jacoco/org.apache.commons.csv/CSVPrinter.java.html
==============================================================================
--- websites/production/commons/content/proper/commons-csv/jacoco/org.apache.commons.csv/CSVPrinter.java.html (original)
+++ websites/production/commons/content/proper/commons-csv/jacoco/org.apache.commons.csv/CSVPrinter.java.html Wed Sep 25 02:11:29 2024
@@ -110,7 +110,7 @@ public final class CSVPrinter implements
 <span class="fc" id="L110">        final String[] headerComments = format.getHeaderComments();</span>
 <span class="fc bfc" id="L111" title="All 2 branches covered.">        if (headerComments != null) {</span>
 <span class="fc bfc" id="L112" title="All 2 branches covered.">            for (final String line : headerComments) {</span>
-<span class="fc" id="L113">                this.printComment(line);</span>
+<span class="fc" id="L113">                printComment(line);</span>
             }
         }
 <span class="fc bfc" id="L116" title="All 4 branches covered.">        if (format.getHeader() != null &amp;&amp; !format.getSkipHeaderRecord()) {</span>
@@ -203,7 +203,7 @@ public final class CSVPrinter implements
 <span class="fc bfc" id="L203" title="All 2 branches covered.">        if (!newRecord) {</span>
 <span class="fc" id="L204">            println();</span>
         }
-<span class="fc" id="L206">        appendable.append(format.getCommentMarker().charValue());</span>
+<span class="fc" id="L206">        appendable.append(format.getCommentMarker().charValue()); // N.B. Explicit (un)boxing is intentional</span>
 <span class="fc" id="L207">        appendable.append(SP);</span>
 <span class="fc bfc" id="L208" title="All 2 branches covered.">        for (int i = 0; i &lt; comment.length(); i++) {</span>
 <span class="fc" id="L209">            final char c = comment.charAt(i);</span>
@@ -215,7 +215,7 @@ public final class CSVPrinter implements
                 //$FALL-THROUGH$ break intentionally excluded.
             case LF:
 <span class="fc" id="L217">                println();</span>
-<span class="fc" id="L218">                appendable.append(format.getCommentMarker().charValue());</span>
+<span class="fc" id="L218">                appendable.append(format.getCommentMarker().charValue()); // N.B. Explicit (un)boxing is intentional</span>
 <span class="fc" id="L219">                appendable.append(SP);</span>
 <span class="fc" id="L220">                break;</span>
             default:
@@ -328,13 +328,12 @@ public final class CSVPrinter implements
      * Given the following data structure:
      * &lt;/p&gt;
      *
-     * &lt;pre&gt;
-     * &lt;code&gt;
-     * List&amp;lt;String[]&amp;gt; data = new ArrayList&amp;lt;&amp;gt;();
+     * &lt;pre&gt;{@code
+     * List&lt;String[]&gt; data = new ArrayList&lt;&gt;();
      * data.add(new String[]{ &quot;A&quot;, &quot;B&quot;, &quot;C&quot; });
      * data.add(new String[]{ &quot;1&quot;, &quot;2&quot;, &quot;3&quot; });
      * data.add(new String[]{ &quot;A1&quot;, &quot;B2&quot;, &quot;C3&quot; });
-     * &lt;/code&gt;
+     * }
      * &lt;/pre&gt;
      *
      * &lt;p&gt;
@@ -342,11 +341,11 @@ public final class CSVPrinter implements
      * &lt;/p&gt;
      *
      * &lt;pre&gt;
-     * &lt;code&gt;
+     * {@code
      * A, B, C
      * 1, 2, 3
      * A1, B2, C3
-     * &lt;/code&gt;
+     * }
      * &lt;/pre&gt;
      *
      * @param values
@@ -356,8 +355,8 @@ public final class CSVPrinter implements
      */
     @SuppressWarnings(&quot;resource&quot;)
     public void printRecords(final Iterable&lt;?&gt; values) throws IOException {
-<span class="fc" id="L359">        IOStream.of(values).forEachOrdered(this::printRecordObject);</span>
-<span class="fc" id="L360">    }</span>
+<span class="fc" id="L358">        IOStream.of(values).forEachOrdered(this::printRecordObject);</span>
+<span class="fc" id="L359">    }</span>
 
     /**
      * Prints all the objects in the given array handling nested collections/arrays as records.
@@ -372,25 +371,23 @@ public final class CSVPrinter implements
      * Given the following data structure:
      * &lt;/p&gt;
      *
-     * &lt;pre&gt;
-     * &lt;code&gt;
+     * &lt;pre&gt;{@code
      * String[][] data = new String[3][]
      * data[0] = String[]{ &quot;A&quot;, &quot;B&quot;, &quot;C&quot; };
      * data[1] = new String[]{ &quot;1&quot;, &quot;2&quot;, &quot;3&quot; };
      * data[2] = new String[]{ &quot;A1&quot;, &quot;B2&quot;, &quot;C3&quot; };
-     * &lt;/code&gt;
+     * }
      * &lt;/pre&gt;
      *
      * &lt;p&gt;
      * Calling this method will print:
      * &lt;/p&gt;
      *
-     * &lt;pre&gt;
-     * &lt;code&gt;
+     * &lt;pre&gt;{@code
      * A, B, C
      * 1, 2, 3
      * A1, B2, C3
-     * &lt;/code&gt;
+     * }
      * &lt;/pre&gt;
      *
      * @param values
@@ -399,8 +396,8 @@ public final class CSVPrinter implements
      *             If an I/O error occurs
      */
     public void printRecords(final Object... values) throws IOException {
-<span class="fc" id="L402">        printRecords(Arrays.asList(values));</span>
-<span class="fc" id="L403">    }</span>
+<span class="fc" id="L399">        printRecords(Arrays.asList(values));</span>
+<span class="fc" id="L400">    }</span>
 
     /**
      * Prints all the objects in the given JDBC result set.
@@ -413,25 +410,25 @@ public final class CSVPrinter implements
      *             Thrown when a database access error occurs.
      */
     public void printRecords(final ResultSet resultSet) throws SQLException, IOException {
-<span class="fc" id="L416">        final int columnCount = resultSet.getMetaData().getColumnCount();</span>
-<span class="fc bfc" id="L417" title="All 2 branches covered.">        while (resultSet.next()) {</span>
-<span class="fc bfc" id="L418" title="All 2 branches covered.">            for (int i = 1; i &lt;= columnCount; i++) {</span>
-<span class="fc" id="L419">                final Object object = resultSet.getObject(i);</span>
-<span class="fc bfc" id="L420" title="All 2 branches covered.">                if (object instanceof Clob) {</span>
-<span class="fc" id="L421">                    try (Reader reader = ((Clob) object).getCharacterStream()) {</span>
-<span class="fc" id="L422">                        print(reader);</span>
+<span class="fc" id="L413">        final int columnCount = resultSet.getMetaData().getColumnCount();</span>
+<span class="fc bfc" id="L414" title="All 2 branches covered.">        while (resultSet.next()) {</span>
+<span class="fc bfc" id="L415" title="All 2 branches covered.">            for (int i = 1; i &lt;= columnCount; i++) {</span>
+<span class="fc" id="L416">                final Object object = resultSet.getObject(i);</span>
+<span class="fc bfc" id="L417" title="All 2 branches covered.">                if (object instanceof Clob) {</span>
+<span class="fc" id="L418">                    try (Reader reader = ((Clob) object).getCharacterStream()) {</span>
+<span class="fc" id="L419">                        print(reader);</span>
                     }
-<span class="fc bfc" id="L424" title="All 2 branches covered.">                } else if (object instanceof Blob) {</span>
-<span class="fc" id="L425">                    try (InputStream inputStream = ((Blob) object).getBinaryStream()) {</span>
-<span class="fc" id="L426">                        print(inputStream);</span>
+<span class="fc bfc" id="L421" title="All 2 branches covered.">                } else if (object instanceof Blob) {</span>
+<span class="fc" id="L422">                    try (InputStream inputStream = ((Blob) object).getBinaryStream()) {</span>
+<span class="fc" id="L423">                        print(inputStream);</span>
                     }
                 } else {
-<span class="fc" id="L429">                    print(object);</span>
+<span class="fc" id="L426">                    print(object);</span>
                 }
             }
-<span class="fc" id="L432">            println();</span>
+<span class="fc" id="L429">            println();</span>
         }
-<span class="fc" id="L434">    }</span>
+<span class="fc" id="L431">    }</span>
 
     /**
      * Prints all the objects with metadata in the given JDBC result set based on the header boolean.
@@ -443,11 +440,11 @@ public final class CSVPrinter implements
      * @since 1.9.0
      */
     public void printRecords(final ResultSet resultSet, final boolean printHeader) throws SQLException, IOException {
-<span class="fc bfc" id="L446" title="All 2 branches covered.">        if (printHeader) {</span>
-<span class="fc" id="L447">            printHeaders(resultSet);</span>
+<span class="fc bfc" id="L443" title="All 2 branches covered.">        if (printHeader) {</span>
+<span class="fc" id="L444">            printHeaders(resultSet);</span>
         }
-<span class="fc" id="L449">        printRecords(resultSet);</span>
-<span class="fc" id="L450">    }</span>
+<span class="fc" id="L446">        printRecords(resultSet);</span>
+<span class="fc" id="L447">    }</span>
 
     /**
      * Prints all the objects in the given {@link Stream} handling nested collections/arrays as records.
@@ -462,14 +459,13 @@ public final class CSVPrinter implements
      * Given the following data structure:
      * &lt;/p&gt;
      *
-     * &lt;pre&gt;
-     * &lt;code&gt;
-     * List&amp;lt;String[]&amp;gt; data = new ArrayList&amp;lt;&amp;gt;();
+     * &lt;pre&gt;{@code
+     * List&lt;String[]&gt; data = new ArrayList&lt;&gt;();
      * data.add(new String[]{ &quot;A&quot;, &quot;B&quot;, &quot;C&quot; });
      * data.add(new String[]{ &quot;1&quot;, &quot;2&quot;, &quot;3&quot; });
      * data.add(new String[]{ &quot;A1&quot;, &quot;B2&quot;, &quot;C3&quot; });
-     * Stream&amp;lt;String[]&amp;gt; stream = data.stream();
-     * &lt;/code&gt;
+     * Stream&lt;String[]&gt; stream = data.stream();
+     * }
      * &lt;/pre&gt;
      *
      * &lt;p&gt;
@@ -477,11 +473,11 @@ public final class CSVPrinter implements
      * &lt;/p&gt;
      *
      * &lt;pre&gt;
-     * &lt;code&gt;
+     * {@code
      * A, B, C
      * 1, 2, 3
      * A1, B2, C3
-     * &lt;/code&gt;
+     * }
      * &lt;/pre&gt;
      *
      * @param values
@@ -492,7 +488,7 @@ public final class CSVPrinter implements
      */
     @SuppressWarnings({ &quot;resource&quot; }) // Caller closes.
     public void printRecords(final Stream&lt;?&gt; values) throws IOException {
-<span class="fc" id="L495">        IOStream.adapt(values).forEachOrdered(this::printRecordObject);</span>
-<span class="fc" id="L496">    }</span>
+<span class="fc" id="L491">        IOStream.adapt(values).forEachOrdered(this::printRecordObject);</span>
+<span class="fc" id="L492">    }</span>
 }
-</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.11.202310140853</span></div></body></html>
\ No newline at end of file
+</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
\ No newline at end of file