You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@juneau.apache.org by gi...@apache.org on 2025/10/27 17:23:18 UTC
(juneau) branch asf-staging updated: Deploy documentation staging from 81c2c53f78d3ea086e90544b7c7392a3ed6e5b8c 81c2c53f78d3ea086e90544b7c7392a3ed6e5b8c
This is an automated email from the ASF dual-hosted git repository.
github-bot pushed a commit to branch asf-staging
in repository https://gitbox.apache.org/repos/asf/juneau.git
The following commit(s) were added to refs/heads/asf-staging by this push:
new 18b926e2cb Deploy documentation staging from 81c2c53f78d3ea086e90544b7c7392a3ed6e5b8c 81c2c53f78d3ea086e90544b7c7392a3ed6e5b8c
18b926e2cb is described below
commit 18b926e2cb6bbad3a33a12d7b451631c1cae3bda
Author: github-actions[bot] <gi...@users.noreply.github.com>
AuthorDate: Mon Oct 27 17:23:14 2025 +0000
Deploy documentation staging from 81c2c53f78d3ea086e90544b7c7392a3ed6e5b8c 81c2c53f78d3ea086e90544b7c7392a3ed6e5b8c
---
site/xref/org/apache/juneau/BeanPropertyMeta.html | 24 +-
.../apache/juneau/annotation/AnnotationImpl.html | 4 +-
.../juneau/common/collections/SimpleMap.html | 342 ++--
.../apache/juneau/common/io/FileReaderBuilder.html | 6 +-
.../apache/juneau/common/io/FileWriterBuilder.html | 6 +-
.../juneau/common/utils/AnnotationUtils.html | 8 +-
.../org/apache/juneau/common/utils/AsciiSet.html | 66 +-
.../org/apache/juneau/common/utils/ClassUtils.html | 198 +-
.../org/apache/juneau/common/utils/Console.html | 117 +-
.../juneau/common/utils/ResourceBundleUtils.html | 49 +-
.../xref/org/apache/juneau/common/utils/Utils.html | 1941 ++++++++++----------
site/xref/org/apache/juneau/cp/FileFinder.html | 14 +-
site/xref/org/apache/juneau/cp/Messages.html | 24 +-
.../juneau/junit/bct/BasicBeanConverter.html | 1707 ++++++++---------
site/xref/org/apache/juneau/rest/RestContext.html | 6 +-
.../apache/juneau/rest/staticfile/StaticFiles.html | 12 +-
16 files changed, 2264 insertions(+), 2260 deletions(-)
diff --git a/site/xref/org/apache/juneau/BeanPropertyMeta.html b/site/xref/org/apache/juneau/BeanPropertyMeta.html
index 35a09879ac..b24e620e6a 100644
--- a/site/xref/org/apache/juneau/BeanPropertyMeta.html
+++ b/site/xref/org/apache/juneau/BeanPropertyMeta.html
@@ -89,11 +89,11 @@
<a class="jxr_linenumber" name="L81" href="#L81">81</a> <em class="jxr_javadoccomment">/**</em>
<a class="jxr_linenumber" name="L82" href="#L82">82</a> <em class="jxr_javadoccomment"> * Sets the bean registry to use with this bean property.</em>
<a class="jxr_linenumber" name="L83" href="#L83">83</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L84" href="#L84">84</a> <em class="jxr_javadoccomment"> * @param beanRegistry The bean registry to use with this bean property.</em>
+<a class="jxr_linenumber" name="L84" href="#L84">84</a> <em class="jxr_javadoccomment"> * @param value The bean registry to use with this bean property.</em>
<a class="jxr_linenumber" name="L85" href="#L85">85</a> <em class="jxr_javadoccomment"> * @return This object.</em>
<a class="jxr_linenumber" name="L86" href="#L86">86</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L87" href="#L87">87</a> <strong class="jxr_keyword">public</strong> <a name="Builder" href="../../../org/apache/juneau/swap/Builder.html#Builder">Builder</a> beanRegistry(<a name="BeanRegistry" href="../../../org/apache/juneau/BeanRegistry.html#BeanRegistry">BeanRegistry</a> beanRegistry) {
-<a class="jxr_linenumber" name="L88" href="#L88">88</a> <strong class="jxr_keyword">this</strong>.beanRegistry = beanRegistry;
+<a class="jxr_linenumber" name="L87" href="#L87">87</a> <strong class="jxr_keyword">public</strong> <a name="Builder" href="../../../org/apache/juneau/swap/Builder.html#Builder">Builder</a> beanRegistry(<a name="BeanRegistry" href="../../../org/apache/juneau/BeanRegistry.html#BeanRegistry">BeanRegistry</a> value) {
+<a class="jxr_linenumber" name="L88" href="#L88">88</a> <strong class="jxr_keyword">this</strong>.beanRegistry = value;
<a class="jxr_linenumber" name="L89" href="#L89">89</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>;
<a class="jxr_linenumber" name="L90" href="#L90">90</a> }
<a class="jxr_linenumber" name="L91" href="#L91">91</a>
@@ -107,33 +107,33 @@
<a class="jxr_linenumber" name="L99" href="#L99">99</a> <em class="jxr_javadoccomment">/**</em>
<a class="jxr_linenumber" name="L100" href="#L100">100</a> <em class="jxr_javadoccomment"> * Sets the original bean property that this one is overriding.</em>
<a class="jxr_linenumber" name="L101" href="#L101">101</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L102" href="#L102">102</a> <em class="jxr_javadoccomment"> * @param delegateFor The original bean property that this one is overriding.</em>
+<a class="jxr_linenumber" name="L102" href="#L102">102</a> <em class="jxr_javadoccomment"> * @param value The original bean property that this one is overriding.</em>
<a class="jxr_linenumber" name="L103" href="#L103">103</a> <em class="jxr_javadoccomment"> * @return This object.</em>
<a class="jxr_linenumber" name="L104" href="#L104">104</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L105" href="#L105">105</a> <strong class="jxr_keyword">public</strong> <a name="Builder" href="../../../org/apache/juneau/swap/Builder.html#Builder">Builder</a> delegateFor(BeanPropertyMeta delegateFor) {
-<a class="jxr_linenumber" name="L106" href="#L106">106</a> <strong class="jxr_keyword">this</strong>.delegateFor = delegateFor;
+<a class="jxr_linenumber" name="L105" href="#L105">105</a> <strong class="jxr_keyword">public</strong> <a name="Builder" href="../../../org/apache/juneau/swap/Builder.html#Builder">Builder</a> delegateFor(BeanPropertyMeta value) {
+<a class="jxr_linenumber" name="L106" href="#L106">106</a> <strong class="jxr_keyword">this</strong>.delegateFor = value;
<a class="jxr_linenumber" name="L107" href="#L107">107</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>;
<a class="jxr_linenumber" name="L108" href="#L108">108</a> }
<a class="jxr_linenumber" name="L109" href="#L109">109</a>
<a class="jxr_linenumber" name="L110" href="#L110">110</a> <em class="jxr_javadoccomment">/**</em>
<a class="jxr_linenumber" name="L111" href="#L111">111</a> <em class="jxr_javadoccomment"> * Sets the overridden value of this bean property.</em>
<a class="jxr_linenumber" name="L112" href="#L112">112</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L113" href="#L113">113</a> <em class="jxr_javadoccomment"> * @param overrideValue The overridden value of this bean property.</em>
+<a class="jxr_linenumber" name="L113" href="#L113">113</a> <em class="jxr_javadoccomment"> * @param value The overridden value of this bean property.</em>
<a class="jxr_linenumber" name="L114" href="#L114">114</a> <em class="jxr_javadoccomment"> * @return This object.</em>
<a class="jxr_linenumber" name="L115" href="#L115">115</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L116" href="#L116">116</a> <strong class="jxr_keyword">public</strong> <a name="Builder" href="../../../org/apache/juneau/swap/Builder.html#Builder">Builder</a> overrideValue(Object overrideValue) {
-<a class="jxr_linenumber" name="L117" href="#L117">117</a> <strong class="jxr_keyword">this</strong>.overrideValue = overrideValue;
+<a class="jxr_linenumber" name="L116" href="#L116">116</a> <strong class="jxr_keyword">public</strong> <a name="Builder" href="../../../org/apache/juneau/swap/Builder.html#Builder">Builder</a> overrideValue(Object value) {
+<a class="jxr_linenumber" name="L117" href="#L117">117</a> <strong class="jxr_keyword">this</strong>.overrideValue = value;
<a class="jxr_linenumber" name="L118" href="#L118">118</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>;
<a class="jxr_linenumber" name="L119" href="#L119">119</a> }
<a class="jxr_linenumber" name="L120" href="#L120">120</a>
<a class="jxr_linenumber" name="L121" href="#L121">121</a> <em class="jxr_javadoccomment">/**</em>
<a class="jxr_linenumber" name="L122" href="#L122">122</a> <em class="jxr_javadoccomment"> * Sets the raw metadata type for this bean property.</em>
<a class="jxr_linenumber" name="L123" href="#L123">123</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L124" href="#L124">124</a> <em class="jxr_javadoccomment"> * @param rawMetaType The raw metadata type for this bean property.</em>
+<a class="jxr_linenumber" name="L124" href="#L124">124</a> <em class="jxr_javadoccomment"> * @param value The raw metadata type for this bean property.</em>
<a class="jxr_linenumber" name="L125" href="#L125">125</a> <em class="jxr_javadoccomment"> * @return This object.</em>
<a class="jxr_linenumber" name="L126" href="#L126">126</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L127" href="#L127">127</a> <strong class="jxr_keyword">public</strong> <a name="Builder" href="../../../org/apache/juneau/swap/Builder.html#Builder">Builder</a> rawMetaType(ClassMeta<?> rawMetaType) {
-<a class="jxr_linenumber" name="L128" href="#L128">128</a> <strong class="jxr_keyword">this</strong>.rawTypeMeta = rawMetaType;
+<a class="jxr_linenumber" name="L127" href="#L127">127</a> <strong class="jxr_keyword">public</strong> <a name="Builder" href="../../../org/apache/juneau/swap/Builder.html#Builder">Builder</a> rawMetaType(ClassMeta<?> value) {
+<a class="jxr_linenumber" name="L128" href="#L128">128</a> <strong class="jxr_keyword">this</strong>.rawTypeMeta = value;
<a class="jxr_linenumber" name="L129" href="#L129">129</a> <strong class="jxr_keyword">this</strong>.typeMeta = rawTypeMeta;
<a class="jxr_linenumber" name="L130" href="#L130">130</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>;
<a class="jxr_linenumber" name="L131" href="#L131">131</a> }
diff --git a/site/xref/org/apache/juneau/annotation/AnnotationImpl.html b/site/xref/org/apache/juneau/annotation/AnnotationImpl.html
index 18819e1846..bf2cbcc3d3 100644
--- a/site/xref/org/apache/juneau/annotation/AnnotationImpl.html
+++ b/site/xref/org/apache/juneau/annotation/AnnotationImpl.html
@@ -89,7 +89,7 @@
<a class="jxr_linenumber" name="L81" href="#L81">81</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> equals(Object o) {
<a class="jxr_linenumber" name="L82" href="#L82">82</a> <strong class="jxr_keyword">if</strong> (! annotationType.isInstance(o))
<a class="jxr_linenumber" name="L83" href="#L83">83</a> <strong class="jxr_keyword">return</strong> false;
-<a class="jxr_linenumber" name="L84" href="#L84">84</a> <strong class="jxr_keyword">return</strong> AnnotationUtils.equals(<strong class="jxr_keyword">this</strong>, (Annotation)o);
+<a class="jxr_linenumber" name="L84" href="#L84">84</a> <strong class="jxr_keyword">return</strong> eq(<strong class="jxr_keyword">this</strong>, (Annotation)o);
<a class="jxr_linenumber" name="L85" href="#L85">85</a> }
<a class="jxr_linenumber" name="L86" href="#L86">86</a>
<a class="jxr_linenumber" name="L87" href="#L87">87</a> @Override <em class="jxr_comment">/* Overridden from Object */</em>
@@ -127,7 +127,7 @@
<a class="jxr_linenumber" name="L119" href="#L119">119</a> <em class="jxr_javadoccomment"> * This method must be called at the end of initialization to calculate the hashCode one time.</em>
<a class="jxr_linenumber" name="L120" href="#L120">120</a> <em class="jxr_javadoccomment"> */</em>
<a class="jxr_linenumber" name="L121" href="#L121">121</a> <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">void</strong> postConstruct() {
-<a class="jxr_linenumber" name="L122" href="#L122">122</a> <strong class="jxr_keyword">this</strong>.hashCode = AnnotationUtils.hashCode(<strong class="jxr_keyword">this</strong>);
+<a class="jxr_linenumber" name="L122" href="#L122">122</a> <strong class="jxr_keyword">this</strong>.hashCode = AnnotationUtils.hash(<strong class="jxr_keyword">this</strong>);
<a class="jxr_linenumber" name="L123" href="#L123">123</a> }
<a class="jxr_linenumber" name="L124" href="#L124">124</a> }
</pre>
diff --git a/site/xref/org/apache/juneau/common/collections/SimpleMap.html b/site/xref/org/apache/juneau/common/collections/SimpleMap.html
index a1fe067780..5458ef9d9a 100644
--- a/site/xref/org/apache/juneau/common/collections/SimpleMap.html
+++ b/site/xref/org/apache/juneau/common/collections/SimpleMap.html
@@ -24,177 +24,177 @@
<a class="jxr_linenumber" name="L16" href="#L16">16</a> <em class="jxr_comment"> */</em>
<a class="jxr_linenumber" name="L17" href="#L17">17</a> <strong class="jxr_keyword">package</strong> org.apache.juneau.common.collections;
<a class="jxr_linenumber" name="L18" href="#L18">18</a>
-<a class="jxr_linenumber" name="L19" href="#L19">19</a> <strong class="jxr_keyword">import</strong> <strong class="jxr_keyword">static</strong> org.apache.juneau.common.utils.Utils.*;
-<a class="jxr_linenumber" name="L20" href="#L20">20</a>
-<a class="jxr_linenumber" name="L21" href="#L21">21</a> <strong class="jxr_keyword">import</strong> java.lang.reflect.*;
-<a class="jxr_linenumber" name="L22" href="#L22">22</a> <strong class="jxr_keyword">import</strong> java.util.*;
-<a class="jxr_linenumber" name="L23" href="#L23">23</a>
-<a class="jxr_linenumber" name="L24" href="#L24">24</a> <strong class="jxr_keyword">import</strong> org.apache.juneau.common.utils.*;
-<a class="jxr_linenumber" name="L25" href="#L25">25</a>
-<a class="jxr_linenumber" name="L26" href="#L26">26</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L27" href="#L27">27</a> <em class="jxr_javadoccomment"> * A lightweight, fixed-size map implementation backed by parallel key and value arrays.</em>
-<a class="jxr_linenumber" name="L28" href="#L28">28</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L29" href="#L29">29</a> <em class="jxr_javadoccomment"> * <p></em>
-<a class="jxr_linenumber" name="L30" href="#L30">30</a> <em class="jxr_javadoccomment"> * This class provides a simple, efficient map implementation for scenarios where the set of keys</em>
-<a class="jxr_linenumber" name="L31" href="#L31">31</a> <em class="jxr_javadoccomment"> * is known in advance and doesn't need to change. It's particularly useful for small maps (typically</em>
-<a class="jxr_linenumber" name="L32" href="#L32">32</a> <em class="jxr_javadoccomment"> * less than 10 entries) where the overhead of a {@link HashMap} is not justified.</em>
-<a class="jxr_linenumber" name="L33" href="#L33">33</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L34" href="#L34">34</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Features:</h5></em>
-<a class="jxr_linenumber" name="L35" href="#L35">35</a> <em class="jxr_javadoccomment"> * <ul class='spaced-list'></em>
-<a class="jxr_linenumber" name="L36" href="#L36">36</a> <em class="jxr_javadoccomment"> * <li><b>Fixed Keys:</b> Keys are set at construction time and cannot be added or removed</em>
-<a class="jxr_linenumber" name="L37" href="#L37">37</a> <em class="jxr_javadoccomment"> * <li><b>Mutable Values:</b> Values can be updated via {@link #put(Object, Object)} or {@link java.util.Map.Entry#setValue(Object)}</em>
-<a class="jxr_linenumber" name="L38" href="#L38">38</a> <em class="jxr_javadoccomment"> * <li><b>Array-Backed:</b> Uses simple arrays for storage, avoiding hash computation overhead</em>
-<a class="jxr_linenumber" name="L39" href="#L39">39</a> <em class="jxr_javadoccomment"> * <li><b>Memory Efficient:</b> Minimal memory footprint compared to {@link HashMap}</em>
-<a class="jxr_linenumber" name="L40" href="#L40">40</a> <em class="jxr_javadoccomment"> * <li><b>Predictable Performance:</b> O(n) lookup time, but faster than {@link HashMap} for small n</em>
-<a class="jxr_linenumber" name="L41" href="#L41">41</a> <em class="jxr_javadoccomment"> * </ul></em>
-<a class="jxr_linenumber" name="L42" href="#L42">42</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L43" href="#L43">43</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Use Cases:</h5></em>
-<a class="jxr_linenumber" name="L44" href="#L44">44</a> <em class="jxr_javadoccomment"> * <ul class='spaced-list'></em>
-<a class="jxr_linenumber" name="L45" href="#L45">45</a> <em class="jxr_javadoccomment"> * <li>Configuration maps with a fixed set of known keys</em>
-<a class="jxr_linenumber" name="L46" href="#L46">46</a> <em class="jxr_javadoccomment"> * <li>Small lookup tables (e.g., enum-to-value mappings)</em>
-<a class="jxr_linenumber" name="L47" href="#L47">47</a> <em class="jxr_javadoccomment"> * <li>Temporary maps for method parameter passing</em>
-<a class="jxr_linenumber" name="L48" href="#L48">48</a> <em class="jxr_javadoccomment"> * <li>Situations where map size is small and keys are known at compile time</em>
-<a class="jxr_linenumber" name="L49" href="#L49">49</a> <em class="jxr_javadoccomment"> * </ul></em>
-<a class="jxr_linenumber" name="L50" href="#L50">50</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L51" href="#L51">51</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Usage:</h5></em>
-<a class="jxr_linenumber" name="L52" href="#L52">52</a> <em class="jxr_javadoccomment"> * <p class='bjava'></em>
-<a class="jxr_linenumber" name="L53" href="#L53">53</a> <em class="jxr_javadoccomment"> * <jc>// Create a SimpleMap with fixed keys</jc></em>
-<a class="jxr_linenumber" name="L54" href="#L54">54</a> <em class="jxr_javadoccomment"> * String[] <jv>keys</jv> = {<js>"host"</js>, <js>"port"</js>, <js>"timeout"</js>};</em>
-<a class="jxr_linenumber" name="L55" href="#L55">55</a> <em class="jxr_javadoccomment"> * Object[] <jv>values</jv> = {<js>"localhost"</js>, 8080, 30000};</em>
-<a class="jxr_linenumber" name="L56" href="#L56">56</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L57" href="#L57">57</a> <em class="jxr_javadoccomment"> * SimpleMap&lt;String,Object&gt; <jv>config</jv> = <jk>new</jk> SimpleMap&lt;&gt;(<jv>keys</jv>, <jv>values</jv>);</em>
-<a class="jxr_linenumber" name="L58" href="#L58">58</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L59" href="#L59">59</a> <em class="jxr_javadoccomment"> * <jc>// Get values</jc></em>
-<a class="jxr_linenumber" name="L60" href="#L60">60</a> <em class="jxr_javadoccomment"> * String <jv>host</jv> = (String)<jv>config</jv>.get(<js>"host"</js>); <jc>// Returns: "localhost"</jc></em>
-<a class="jxr_linenumber" name="L61" href="#L61">61</a> <em class="jxr_javadoccomment"> * Integer <jv>port</jv> = (Integer)<jv>config</jv>.get(<js>"port"</js>); <jc>// Returns: 8080</jc></em>
-<a class="jxr_linenumber" name="L62" href="#L62">62</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L63" href="#L63">63</a> <em class="jxr_javadoccomment"> * <jc>// Update values</jc></em>
-<a class="jxr_linenumber" name="L64" href="#L64">64</a> <em class="jxr_javadoccomment"> * <jv>config</jv>.put(<js>"port"</js>, 9090); <jc>// Updates value in underlying array</jc></em>
-<a class="jxr_linenumber" name="L65" href="#L65">65</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L66" href="#L66">66</a> <em class="jxr_javadoccomment"> * <jc>// Cannot add new keys</jc></em>
-<a class="jxr_linenumber" name="L67" href="#L67">67</a> <em class="jxr_javadoccomment"> * <jv>config</jv>.put(<js>"user"</js>, <js>"admin"</js>); <jc>// Throws IllegalArgumentException</jc></em>
-<a class="jxr_linenumber" name="L68" href="#L68">68</a> <em class="jxr_javadoccomment"> * </p></em>
-<a class="jxr_linenumber" name="L69" href="#L69">69</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L70" href="#L70">70</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Restrictions:</h5></em>
-<a class="jxr_linenumber" name="L71" href="#L71">71</a> <em class="jxr_javadoccomment"> * <ul class='spaced-list'></em>
-<a class="jxr_linenumber" name="L72" href="#L72">72</a> <em class="jxr_javadoccomment"> * <li><b>Fixed Size:</b> Cannot add or remove entries after construction</em>
-<a class="jxr_linenumber" name="L73" href="#L73">73</a> <em class="jxr_javadoccomment"> * <li><b>Non-Null Keys:</b> All keys must be non-null</em>
-<a class="jxr_linenumber" name="L74" href="#L74">74</a> <em class="jxr_javadoccomment"> * <li><b>Array Length:</b> Keys and values arrays must have the same length</em>
-<a class="jxr_linenumber" name="L75" href="#L75">75</a> <em class="jxr_javadoccomment"> * <li><b>Existing Keys Only:</b> {@link #put(Object, Object)} only works for existing keys</em>
-<a class="jxr_linenumber" name="L76" href="#L76">76</a> <em class="jxr_javadoccomment"> * </ul></em>
-<a class="jxr_linenumber" name="L77" href="#L77">77</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L78" href="#L78">78</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Performance Characteristics:</h5></em>
-<a class="jxr_linenumber" name="L79" href="#L79">79</a> <em class="jxr_javadoccomment"> * <ul class='spaced-list'></em>
-<a class="jxr_linenumber" name="L80" href="#L80">80</a> <em class="jxr_javadoccomment"> * <li><b>get(key):</b> O(n) - Linear search through keys array</em>
-<a class="jxr_linenumber" name="L81" href="#L81">81</a> <em class="jxr_javadoccomment"> * <li><b>put(key, value):</b> O(n) - Linear search to find key, then update</em>
-<a class="jxr_linenumber" name="L82" href="#L82">82</a> <em class="jxr_javadoccomment"> * <li><b>size():</b> O(1) - Direct array length access</em>
-<a class="jxr_linenumber" name="L83" href="#L83">83</a> <em class="jxr_javadoccomment"> * <li><b>Memory:</b> Lower overhead than {@link HashMap} for small maps</em>
-<a class="jxr_linenumber" name="L84" href="#L84">84</a> <em class="jxr_javadoccomment"> * </ul></em>
-<a class="jxr_linenumber" name="L85" href="#L85">85</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L86" href="#L86">86</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Thread Safety:</h5></em>
-<a class="jxr_linenumber" name="L87" href="#L87">87</a> <em class="jxr_javadoccomment"> * <p></em>
-<a class="jxr_linenumber" name="L88" href="#L88">88</a> <em class="jxr_javadoccomment"> * This class is not thread-safe. If multiple threads access a SimpleMap concurrently, and at least</em>
-<a class="jxr_linenumber" name="L89" href="#L89">89</a> <em class="jxr_javadoccomment"> * one thread modifies the map structurally (via {@link #put(Object, Object)}), it must be</em>
-<a class="jxr_linenumber" name="L90" href="#L90">90</a> <em class="jxr_javadoccomment"> * synchronized externally.</em>
-<a class="jxr_linenumber" name="L91" href="#L91">91</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L92" href="#L92">92</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Example - Enum Configuration:</h5></em>
-<a class="jxr_linenumber" name="L93" href="#L93">93</a> <em class="jxr_javadoccomment"> * <p class='bjava'></em>
-<a class="jxr_linenumber" name="L94" href="#L94">94</a> <em class="jxr_javadoccomment"> * <jc>// Map configuration keys to default values</jc></em>
-<a class="jxr_linenumber" name="L95" href="#L95">95</a> <em class="jxr_javadoccomment"> * <jk>enum</jk> ConfigKey { HOST, PORT, TIMEOUT }</em>
-<a class="jxr_linenumber" name="L96" href="#L96">96</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L97" href="#L97">97</a> <em class="jxr_javadoccomment"> * ConfigKey[] <jv>keys</jv> = ConfigKey.values();</em>
-<a class="jxr_linenumber" name="L98" href="#L98">98</a> <em class="jxr_javadoccomment"> * Object[] <jv>defaults</jv> = {<js>"localhost"</js>, 8080, 5000};</em>
-<a class="jxr_linenumber" name="L99" href="#L99">99</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L100" href="#L100">100</a> <em class="jxr_javadoccomment"> * SimpleMap&lt;ConfigKey,Object&gt; <jv>configMap</jv> = <jk>new</jk> SimpleMap&lt;&gt;(<jv>keys</jv>, <jv>defaults</jv>);</em>
-<a class="jxr_linenumber" name="L101" href="#L101">101</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L102" href="#L102">102</a> <em class="jxr_javadoccomment"> * <jc>// Update from user settings</jc></em>
-<a class="jxr_linenumber" name="L103" href="#L103">103</a> <em class="jxr_javadoccomment"> * <jv>configMap</jv>.put(ConfigKey.PORT, userSettings.getPort());</em>
-<a class="jxr_linenumber" name="L104" href="#L104">104</a> <em class="jxr_javadoccomment"> * </p></em>
-<a class="jxr_linenumber" name="L105" href="#L105">105</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L106" href="#L106">106</a> <em class="jxr_javadoccomment"> * <h5 class='section'>See Also:</h5></em>
-<a class="jxr_linenumber" name="L107" href="#L107">107</a> <em class="jxr_javadoccomment"> * <ul></em>
-<a class="jxr_linenumber" name="L108" href="#L108">108</a> <em class="jxr_javadoccomment"> * <li class='link'><a class="doclink" href="../../../../../index.html#juneau-common">Overview &gt; juneau-common</a></em>
-<a class="jxr_linenumber" name="L109" href="#L109">109</a> <em class="jxr_javadoccomment"> * </ul></em>
-<a class="jxr_linenumber" name="L110" href="#L110">110</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L111" href="#L111">111</a> <em class="jxr_javadoccomment"> * @param <K> The key type.</em>
-<a class="jxr_linenumber" name="L112" href="#L112">112</a> <em class="jxr_javadoccomment"> * @param <V> The value type.</em>
-<a class="jxr_linenumber" name="L113" href="#L113">113</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L114" href="#L114">114</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> SimpleMap<K,V> <strong class="jxr_keyword">extends</strong> AbstractMap<K,V> {
-<a class="jxr_linenumber" name="L115" href="#L115">115</a>
-<a class="jxr_linenumber" name="L116" href="#L116">116</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L117" href="#L117">117</a> <em class="jxr_javadoccomment"> * Inner class representing a single key-value entry in this map.</em>
-<a class="jxr_linenumber" name="L118" href="#L118">118</a> <em class="jxr_javadoccomment"> * <p></em>
-<a class="jxr_linenumber" name="L119" href="#L119">119</a> <em class="jxr_javadoccomment"> * This entry is backed by the underlying key and value arrays, so changes</em>
-<a class="jxr_linenumber" name="L120" href="#L120">120</a> <em class="jxr_javadoccomment"> * made via {@link #setValue(Object)} directly modify the underlying value array.</em>
-<a class="jxr_linenumber" name="L121" href="#L121">121</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L122" href="#L122">122</a> <strong class="jxr_keyword">class</strong> SimpleMapEntry <strong class="jxr_keyword">implements</strong> Map.Entry<K,V> {
-<a class="jxr_linenumber" name="L123" href="#L123">123</a>
-<a class="jxr_linenumber" name="L124" href="#L124">124</a> <em class="jxr_javadoccomment">/** The index into the keys/values arrays for this entry. */</em>
-<a class="jxr_linenumber" name="L125" href="#L125">125</a> <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong> index;
-<a class="jxr_linenumber" name="L126" href="#L126">126</a>
-<a class="jxr_linenumber" name="L127" href="#L127">127</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L128" href="#L128">128</a> <em class="jxr_javadoccomment"> * Constructor.</em>
-<a class="jxr_linenumber" name="L129" href="#L129">129</a> <em class="jxr_javadoccomment"> * @param index The array index for this entry.</em>
-<a class="jxr_linenumber" name="L130" href="#L130">130</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L131" href="#L131">131</a> SimpleMapEntry(<strong class="jxr_keyword">int</strong> index) {
-<a class="jxr_linenumber" name="L132" href="#L132">132</a> <strong class="jxr_keyword">this</strong>.index = index;
-<a class="jxr_linenumber" name="L133" href="#L133">133</a> }
-<a class="jxr_linenumber" name="L134" href="#L134">134</a>
-<a class="jxr_linenumber" name="L135" href="#L135">135</a> @Override <em class="jxr_comment">/* Map.Entry */</em>
-<a class="jxr_linenumber" name="L136" href="#L136">136</a> <strong class="jxr_keyword">public</strong> K getKey() { <strong class="jxr_keyword">return</strong> keys[index]; }
-<a class="jxr_linenumber" name="L137" href="#L137">137</a>
-<a class="jxr_linenumber" name="L138" href="#L138">138</a> @Override <em class="jxr_comment">/* Map.Entry */</em>
-<a class="jxr_linenumber" name="L139" href="#L139">139</a> <strong class="jxr_keyword">public</strong> V getValue() { <strong class="jxr_keyword">return</strong> values[index]; }
-<a class="jxr_linenumber" name="L140" href="#L140">140</a>
-<a class="jxr_linenumber" name="L141" href="#L141">141</a> @Override <em class="jxr_comment">/* Map.Entry */</em>
-<a class="jxr_linenumber" name="L142" href="#L142">142</a> <strong class="jxr_keyword">public</strong> V setValue(V val) {
-<a class="jxr_linenumber" name="L143" href="#L143">143</a> <strong class="jxr_keyword">var</strong> v = values[index];
-<a class="jxr_linenumber" name="L144" href="#L144">144</a> values[index] = val;
-<a class="jxr_linenumber" name="L145" href="#L145">145</a> <strong class="jxr_keyword">return</strong> v;
-<a class="jxr_linenumber" name="L146" href="#L146">146</a> }
-<a class="jxr_linenumber" name="L147" href="#L147">147</a> }
-<a class="jxr_linenumber" name="L148" href="#L148">148</a>
-<a class="jxr_linenumber" name="L149" href="#L149">149</a> <em class="jxr_javadoccomment">/** The array of keys. Keys are immutable after construction. */</em>
-<a class="jxr_linenumber" name="L150" href="#L150">150</a> <strong class="jxr_keyword">final</strong> K[] keys;
-<a class="jxr_linenumber" name="L151" href="#L151">151</a>
-<a class="jxr_linenumber" name="L152" href="#L152">152</a> <em class="jxr_javadoccomment">/** The array of values. Values can be modified via {@link #put(Object, Object)}. */</em>
-<a class="jxr_linenumber" name="L153" href="#L153">153</a> <strong class="jxr_keyword">final</strong> V[] values;
-<a class="jxr_linenumber" name="L154" href="#L154">154</a>
-<a class="jxr_linenumber" name="L155" href="#L155">155</a> <em class="jxr_javadoccomment">/** Pre-constructed entries array for {@link #entrySet()}. */</em>
-<a class="jxr_linenumber" name="L156" href="#L156">156</a> <strong class="jxr_keyword">final</strong> SimpleMapEntry[] entries;
-<a class="jxr_linenumber" name="L157" href="#L157">157</a>
-<a class="jxr_linenumber" name="L158" href="#L158">158</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L159" href="#L159">159</a> <em class="jxr_javadoccomment"> * Constructs a new SimpleMap with the specified keys and values.</em>
-<a class="jxr_linenumber" name="L160" href="#L160">160</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L161" href="#L161">161</a> <em class="jxr_javadoccomment"> * <p></em>
-<a class="jxr_linenumber" name="L162" href="#L162">162</a> <em class="jxr_javadoccomment"> * The keys and values arrays are stored by reference (not copied), so external</em>
-<a class="jxr_linenumber" name="L163" href="#L163">163</a> <em class="jxr_javadoccomment"> * modifications to the arrays after construction will be reflected in the map's behavior.</em>
-<a class="jxr_linenumber" name="L164" href="#L164">164</a> <em class="jxr_javadoccomment"> * However, the keys array should be treated as immutable after construction.</em>
-<a class="jxr_linenumber" name="L165" href="#L165">165</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L166" href="#L166">166</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Example:</h5></em>
-<a class="jxr_linenumber" name="L167" href="#L167">167</a> <em class="jxr_javadoccomment"> * <p class='bjava'></em>
-<a class="jxr_linenumber" name="L168" href="#L168">168</a> <em class="jxr_javadoccomment"> * String[] <jv>keys</jv> = {<js>"name"</js>, <js>"age"</js>, <js>"city"</js>};</em>
-<a class="jxr_linenumber" name="L169" href="#L169">169</a> <em class="jxr_javadoccomment"> * Object[] <jv>values</jv> = {<js>"John"</js>, 30, <js>"NYC"</js>};</em>
-<a class="jxr_linenumber" name="L170" href="#L170">170</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L171" href="#L171">171</a> <em class="jxr_javadoccomment"> * SimpleMap&lt;String,Object&gt; <jv>person</jv> = <jk>new</jk> SimpleMap&lt;&gt;(<jv>keys</jv>, <jv>values</jv>);</em>
-<a class="jxr_linenumber" name="L172" href="#L172">172</a> <em class="jxr_javadoccomment"> * </p></em>
-<a class="jxr_linenumber" name="L173" href="#L173">173</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L174" href="#L174">174</a> <em class="jxr_javadoccomment"> * @param keys The map keys. Must not be <jk>null</jk>, and no key can be <jk>null</jk>.</em>
-<a class="jxr_linenumber" name="L175" href="#L175">175</a> <em class="jxr_javadoccomment"> * @param values The map values. Must not be <jk>null</jk> and must have the same length as keys.</em>
-<a class="jxr_linenumber" name="L176" href="#L176">176</a> <em class="jxr_javadoccomment"> * Individual values can be <jk>null</jk>.</em>
-<a class="jxr_linenumber" name="L177" href="#L177">177</a> <em class="jxr_javadoccomment"> * @throws IllegalArgumentException if:</em>
-<a class="jxr_linenumber" name="L178" href="#L178">178</a> <em class="jxr_javadoccomment"> * <ul></em>
-<a class="jxr_linenumber" name="L179" href="#L179">179</a> <em class="jxr_javadoccomment"> * <li>The keys array is <jk>null</jk></em>
-<a class="jxr_linenumber" name="L180" href="#L180">180</a> <em class="jxr_javadoccomment"> * <li>The values array is <jk>null</jk></em>
-<a class="jxr_linenumber" name="L181" href="#L181">181</a> <em class="jxr_javadoccomment"> * <li>The keys and values arrays have different lengths</em>
-<a class="jxr_linenumber" name="L182" href="#L182">182</a> <em class="jxr_javadoccomment"> * <li>Any key is <jk>null</jk></em>
-<a class="jxr_linenumber" name="L183" href="#L183">183</a> <em class="jxr_javadoccomment"> * </ul></em>
-<a class="jxr_linenumber" name="L184" href="#L184">184</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L185" href="#L185">185</a> @SuppressWarnings(<span class="jxr_string">"unchecked"</span>)
-<a class="jxr_linenumber" name="L186" href="#L186">186</a> <strong class="jxr_keyword">public</strong> <a name="SimpleMap" href="../../../../../org/apache/juneau/common/collections/SimpleMap.html#SimpleMap">SimpleMap</a>(K[] keys, V[] values) {
-<a class="jxr_linenumber" name="L187" href="#L187">187</a> AssertionUtils.assertArgNotNull(<span class="jxr_string">"keys"</span>, keys);
-<a class="jxr_linenumber" name="L188" href="#L188">188</a> AssertionUtils.assertArgNotNull(<span class="jxr_string">"values"</span>, values);
-<a class="jxr_linenumber" name="L189" href="#L189">189</a> AssertionUtils.assertArg(keys.length == values.length, <span class="jxr_string">"keys ''{0}'' and values ''{1}'' array lengths differ"</span>, keys.length, values.length);
+<a class="jxr_linenumber" name="L19" href="#L19">19</a> <strong class="jxr_keyword">import</strong> <strong class="jxr_keyword">static</strong> org.apache.juneau.common.utils.AssertionUtils.*;
+<a class="jxr_linenumber" name="L20" href="#L20">20</a> <strong class="jxr_keyword">import</strong> <strong class="jxr_keyword">static</strong> org.apache.juneau.common.utils.Utils.*;
+<a class="jxr_linenumber" name="L21" href="#L21">21</a>
+<a class="jxr_linenumber" name="L22" href="#L22">22</a> <strong class="jxr_keyword">import</strong> java.lang.reflect.*;
+<a class="jxr_linenumber" name="L23" href="#L23">23</a> <strong class="jxr_keyword">import</strong> java.util.*;
+<a class="jxr_linenumber" name="L24" href="#L24">24</a>
+<a class="jxr_linenumber" name="L25" href="#L25">25</a> <strong class="jxr_keyword">import</strong> org.apache.juneau.common.utils.*;
+<a class="jxr_linenumber" name="L26" href="#L26">26</a>
+<a class="jxr_linenumber" name="L27" href="#L27">27</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L28" href="#L28">28</a> <em class="jxr_javadoccomment"> * A lightweight, fixed-size map implementation backed by parallel key and value arrays.</em>
+<a class="jxr_linenumber" name="L29" href="#L29">29</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L30" href="#L30">30</a> <em class="jxr_javadoccomment"> * <p></em>
+<a class="jxr_linenumber" name="L31" href="#L31">31</a> <em class="jxr_javadoccomment"> * This class provides a simple, efficient map implementation for scenarios where the set of keys</em>
+<a class="jxr_linenumber" name="L32" href="#L32">32</a> <em class="jxr_javadoccomment"> * is known in advance and doesn't need to change. It's particularly useful for small maps (typically</em>
+<a class="jxr_linenumber" name="L33" href="#L33">33</a> <em class="jxr_javadoccomment"> * less than 10 entries) where the overhead of a {@link HashMap} is not justified.</em>
+<a class="jxr_linenumber" name="L34" href="#L34">34</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L35" href="#L35">35</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Features:</h5></em>
+<a class="jxr_linenumber" name="L36" href="#L36">36</a> <em class="jxr_javadoccomment"> * <ul class='spaced-list'></em>
+<a class="jxr_linenumber" name="L37" href="#L37">37</a> <em class="jxr_javadoccomment"> * <li><b>Fixed Keys:</b> Keys are set at construction time and cannot be added or removed</em>
+<a class="jxr_linenumber" name="L38" href="#L38">38</a> <em class="jxr_javadoccomment"> * <li><b>Mutable Values:</b> Values can be updated via {@link #put(Object, Object)} or {@link java.util.Map.Entry#setValue(Object)}</em>
+<a class="jxr_linenumber" name="L39" href="#L39">39</a> <em class="jxr_javadoccomment"> * <li><b>Array-Backed:</b> Uses simple arrays for storage, avoiding hash computation overhead</em>
+<a class="jxr_linenumber" name="L40" href="#L40">40</a> <em class="jxr_javadoccomment"> * <li><b>Memory Efficient:</b> Minimal memory footprint compared to {@link HashMap}</em>
+<a class="jxr_linenumber" name="L41" href="#L41">41</a> <em class="jxr_javadoccomment"> * <li><b>Predictable Performance:</b> O(n) lookup time, but faster than {@link HashMap} for small n</em>
+<a class="jxr_linenumber" name="L42" href="#L42">42</a> <em class="jxr_javadoccomment"> * </ul></em>
+<a class="jxr_linenumber" name="L43" href="#L43">43</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L44" href="#L44">44</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Use Cases:</h5></em>
+<a class="jxr_linenumber" name="L45" href="#L45">45</a> <em class="jxr_javadoccomment"> * <ul class='spaced-list'></em>
+<a class="jxr_linenumber" name="L46" href="#L46">46</a> <em class="jxr_javadoccomment"> * <li>Configuration maps with a fixed set of known keys</em>
+<a class="jxr_linenumber" name="L47" href="#L47">47</a> <em class="jxr_javadoccomment"> * <li>Small lookup tables (e.g., enum-to-value mappings)</em>
+<a class="jxr_linenumber" name="L48" href="#L48">48</a> <em class="jxr_javadoccomment"> * <li>Temporary maps for method parameter passing</em>
+<a class="jxr_linenumber" name="L49" href="#L49">49</a> <em class="jxr_javadoccomment"> * <li>Situations where map size is small and keys are known at compile time</em>
+<a class="jxr_linenumber" name="L50" href="#L50">50</a> <em class="jxr_javadoccomment"> * </ul></em>
+<a class="jxr_linenumber" name="L51" href="#L51">51</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L52" href="#L52">52</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Usage:</h5></em>
+<a class="jxr_linenumber" name="L53" href="#L53">53</a> <em class="jxr_javadoccomment"> * <p class='bjava'></em>
+<a class="jxr_linenumber" name="L54" href="#L54">54</a> <em class="jxr_javadoccomment"> * <jc>// Create a SimpleMap with fixed keys</jc></em>
+<a class="jxr_linenumber" name="L55" href="#L55">55</a> <em class="jxr_javadoccomment"> * String[] <jv>keys</jv> = {<js>"host"</js>, <js>"port"</js>, <js>"timeout"</js>};</em>
+<a class="jxr_linenumber" name="L56" href="#L56">56</a> <em class="jxr_javadoccomment"> * Object[] <jv>values</jv> = {<js>"localhost"</js>, 8080, 30000};</em>
+<a class="jxr_linenumber" name="L57" href="#L57">57</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L58" href="#L58">58</a> <em class="jxr_javadoccomment"> * SimpleMap&lt;String,Object&gt; <jv>config</jv> = <jk>new</jk> SimpleMap&lt;&gt;(<jv>keys</jv>, <jv>values</jv>);</em>
+<a class="jxr_linenumber" name="L59" href="#L59">59</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L60" href="#L60">60</a> <em class="jxr_javadoccomment"> * <jc>// Get values</jc></em>
+<a class="jxr_linenumber" name="L61" href="#L61">61</a> <em class="jxr_javadoccomment"> * String <jv>host</jv> = (String)<jv>config</jv>.get(<js>"host"</js>); <jc>// Returns: "localhost"</jc></em>
+<a class="jxr_linenumber" name="L62" href="#L62">62</a> <em class="jxr_javadoccomment"> * Integer <jv>port</jv> = (Integer)<jv>config</jv>.get(<js>"port"</js>); <jc>// Returns: 8080</jc></em>
+<a class="jxr_linenumber" name="L63" href="#L63">63</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L64" href="#L64">64</a> <em class="jxr_javadoccomment"> * <jc>// Update values</jc></em>
+<a class="jxr_linenumber" name="L65" href="#L65">65</a> <em class="jxr_javadoccomment"> * <jv>config</jv>.put(<js>"port"</js>, 9090); <jc>// Updates value in underlying array</jc></em>
+<a class="jxr_linenumber" name="L66" href="#L66">66</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L67" href="#L67">67</a> <em class="jxr_javadoccomment"> * <jc>// Cannot add new keys</jc></em>
+<a class="jxr_linenumber" name="L68" href="#L68">68</a> <em class="jxr_javadoccomment"> * <jv>config</jv>.put(<js>"user"</js>, <js>"admin"</js>); <jc>// Throws IllegalArgumentException</jc></em>
+<a class="jxr_linenumber" name="L69" href="#L69">69</a> <em class="jxr_javadoccomment"> * </p></em>
+<a class="jxr_linenumber" name="L70" href="#L70">70</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L71" href="#L71">71</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Restrictions:</h5></em>
+<a class="jxr_linenumber" name="L72" href="#L72">72</a> <em class="jxr_javadoccomment"> * <ul class='spaced-list'></em>
+<a class="jxr_linenumber" name="L73" href="#L73">73</a> <em class="jxr_javadoccomment"> * <li><b>Fixed Size:</b> Cannot add or remove entries after construction</em>
+<a class="jxr_linenumber" name="L74" href="#L74">74</a> <em class="jxr_javadoccomment"> * <li><b>Non-Null Keys:</b> All keys must be non-null</em>
+<a class="jxr_linenumber" name="L75" href="#L75">75</a> <em class="jxr_javadoccomment"> * <li><b>Array Length:</b> Keys and values arrays must have the same length</em>
+<a class="jxr_linenumber" name="L76" href="#L76">76</a> <em class="jxr_javadoccomment"> * <li><b>Existing Keys Only:</b> {@link #put(Object, Object)} only works for existing keys</em>
+<a class="jxr_linenumber" name="L77" href="#L77">77</a> <em class="jxr_javadoccomment"> * </ul></em>
+<a class="jxr_linenumber" name="L78" href="#L78">78</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L79" href="#L79">79</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Performance Characteristics:</h5></em>
+<a class="jxr_linenumber" name="L80" href="#L80">80</a> <em class="jxr_javadoccomment"> * <ul class='spaced-list'></em>
+<a class="jxr_linenumber" name="L81" href="#L81">81</a> <em class="jxr_javadoccomment"> * <li><b>get(key):</b> O(n) - Linear search through keys array</em>
+<a class="jxr_linenumber" name="L82" href="#L82">82</a> <em class="jxr_javadoccomment"> * <li><b>put(key, value):</b> O(n) - Linear search to find key, then update</em>
+<a class="jxr_linenumber" name="L83" href="#L83">83</a> <em class="jxr_javadoccomment"> * <li><b>size():</b> O(1) - Direct array length access</em>
+<a class="jxr_linenumber" name="L84" href="#L84">84</a> <em class="jxr_javadoccomment"> * <li><b>Memory:</b> Lower overhead than {@link HashMap} for small maps</em>
+<a class="jxr_linenumber" name="L85" href="#L85">85</a> <em class="jxr_javadoccomment"> * </ul></em>
+<a class="jxr_linenumber" name="L86" href="#L86">86</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L87" href="#L87">87</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Thread Safety:</h5></em>
+<a class="jxr_linenumber" name="L88" href="#L88">88</a> <em class="jxr_javadoccomment"> * <p></em>
+<a class="jxr_linenumber" name="L89" href="#L89">89</a> <em class="jxr_javadoccomment"> * This class is not thread-safe. If multiple threads access a SimpleMap concurrently, and at least</em>
+<a class="jxr_linenumber" name="L90" href="#L90">90</a> <em class="jxr_javadoccomment"> * one thread modifies the map structurally (via {@link #put(Object, Object)}), it must be</em>
+<a class="jxr_linenumber" name="L91" href="#L91">91</a> <em class="jxr_javadoccomment"> * synchronized externally.</em>
+<a class="jxr_linenumber" name="L92" href="#L92">92</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L93" href="#L93">93</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Example - Enum Configuration:</h5></em>
+<a class="jxr_linenumber" name="L94" href="#L94">94</a> <em class="jxr_javadoccomment"> * <p class='bjava'></em>
+<a class="jxr_linenumber" name="L95" href="#L95">95</a> <em class="jxr_javadoccomment"> * <jc>// Map configuration keys to default values</jc></em>
+<a class="jxr_linenumber" name="L96" href="#L96">96</a> <em class="jxr_javadoccomment"> * <jk>enum</jk> ConfigKey { HOST, PORT, TIMEOUT }</em>
+<a class="jxr_linenumber" name="L97" href="#L97">97</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L98" href="#L98">98</a> <em class="jxr_javadoccomment"> * ConfigKey[] <jv>keys</jv> = ConfigKey.values();</em>
+<a class="jxr_linenumber" name="L99" href="#L99">99</a> <em class="jxr_javadoccomment"> * Object[] <jv>defaults</jv> = {<js>"localhost"</js>, 8080, 5000};</em>
+<a class="jxr_linenumber" name="L100" href="#L100">100</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L101" href="#L101">101</a> <em class="jxr_javadoccomment"> * SimpleMap&lt;ConfigKey,Object&gt; <jv>configMap</jv> = <jk>new</jk> SimpleMap&lt;&gt;(<jv>keys</jv>, <jv>defaults</jv>);</em>
+<a class="jxr_linenumber" name="L102" href="#L102">102</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L103" href="#L103">103</a> <em class="jxr_javadoccomment"> * <jc>// Update from user settings</jc></em>
+<a class="jxr_linenumber" name="L104" href="#L104">104</a> <em class="jxr_javadoccomment"> * <jv>configMap</jv>.put(ConfigKey.PORT, userSettings.getPort());</em>
+<a class="jxr_linenumber" name="L105" href="#L105">105</a> <em class="jxr_javadoccomment"> * </p></em>
+<a class="jxr_linenumber" name="L106" href="#L106">106</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L107" href="#L107">107</a> <em class="jxr_javadoccomment"> * <h5 class='section'>See Also:</h5></em>
+<a class="jxr_linenumber" name="L108" href="#L108">108</a> <em class="jxr_javadoccomment"> * <ul></em>
+<a class="jxr_linenumber" name="L109" href="#L109">109</a> <em class="jxr_javadoccomment"> * <li class='link'><a class="doclink" href="../../../../../index.html#juneau-common">Overview &gt; juneau-common</a></em>
+<a class="jxr_linenumber" name="L110" href="#L110">110</a> <em class="jxr_javadoccomment"> * </ul></em>
+<a class="jxr_linenumber" name="L111" href="#L111">111</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L112" href="#L112">112</a> <em class="jxr_javadoccomment"> * @param <K> The key type.</em>
+<a class="jxr_linenumber" name="L113" href="#L113">113</a> <em class="jxr_javadoccomment"> * @param <V> The value type.</em>
+<a class="jxr_linenumber" name="L114" href="#L114">114</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L115" href="#L115">115</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> SimpleMap<K,V> <strong class="jxr_keyword">extends</strong> AbstractMap<K,V> {
+<a class="jxr_linenumber" name="L116" href="#L116">116</a>
+<a class="jxr_linenumber" name="L117" href="#L117">117</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L118" href="#L118">118</a> <em class="jxr_javadoccomment"> * Inner class representing a single key-value entry in this map.</em>
+<a class="jxr_linenumber" name="L119" href="#L119">119</a> <em class="jxr_javadoccomment"> * <p></em>
+<a class="jxr_linenumber" name="L120" href="#L120">120</a> <em class="jxr_javadoccomment"> * This entry is backed by the underlying key and value arrays, so changes</em>
+<a class="jxr_linenumber" name="L121" href="#L121">121</a> <em class="jxr_javadoccomment"> * made via {@link #setValue(Object)} directly modify the underlying value array.</em>
+<a class="jxr_linenumber" name="L122" href="#L122">122</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L123" href="#L123">123</a> <strong class="jxr_keyword">class</strong> SimpleMapEntry <strong class="jxr_keyword">implements</strong> Map.Entry<K,V> {
+<a class="jxr_linenumber" name="L124" href="#L124">124</a>
+<a class="jxr_linenumber" name="L125" href="#L125">125</a> <em class="jxr_javadoccomment">/** The index into the keys/values arrays for this entry. */</em>
+<a class="jxr_linenumber" name="L126" href="#L126">126</a> <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong> index;
+<a class="jxr_linenumber" name="L127" href="#L127">127</a>
+<a class="jxr_linenumber" name="L128" href="#L128">128</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L129" href="#L129">129</a> <em class="jxr_javadoccomment"> * Constructor.</em>
+<a class="jxr_linenumber" name="L130" href="#L130">130</a> <em class="jxr_javadoccomment"> * @param index The array index for this entry.</em>
+<a class="jxr_linenumber" name="L131" href="#L131">131</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L132" href="#L132">132</a> SimpleMapEntry(<strong class="jxr_keyword">int</strong> index) {
+<a class="jxr_linenumber" name="L133" href="#L133">133</a> <strong class="jxr_keyword">this</strong>.index = index;
+<a class="jxr_linenumber" name="L134" href="#L134">134</a> }
+<a class="jxr_linenumber" name="L135" href="#L135">135</a>
+<a class="jxr_linenumber" name="L136" href="#L136">136</a> @Override <em class="jxr_comment">/* Map.Entry */</em>
+<a class="jxr_linenumber" name="L137" href="#L137">137</a> <strong class="jxr_keyword">public</strong> K getKey() { <strong class="jxr_keyword">return</strong> keys[index]; }
+<a class="jxr_linenumber" name="L138" href="#L138">138</a>
+<a class="jxr_linenumber" name="L139" href="#L139">139</a> @Override <em class="jxr_comment">/* Map.Entry */</em>
+<a class="jxr_linenumber" name="L140" href="#L140">140</a> <strong class="jxr_keyword">public</strong> V getValue() { <strong class="jxr_keyword">return</strong> values[index]; }
+<a class="jxr_linenumber" name="L141" href="#L141">141</a>
+<a class="jxr_linenumber" name="L142" href="#L142">142</a> @Override <em class="jxr_comment">/* Map.Entry */</em>
+<a class="jxr_linenumber" name="L143" href="#L143">143</a> <strong class="jxr_keyword">public</strong> V setValue(V val) {
+<a class="jxr_linenumber" name="L144" href="#L144">144</a> <strong class="jxr_keyword">var</strong> v = values[index];
+<a class="jxr_linenumber" name="L145" href="#L145">145</a> values[index] = val;
+<a class="jxr_linenumber" name="L146" href="#L146">146</a> <strong class="jxr_keyword">return</strong> v;
+<a class="jxr_linenumber" name="L147" href="#L147">147</a> }
+<a class="jxr_linenumber" name="L148" href="#L148">148</a> }
+<a class="jxr_linenumber" name="L149" href="#L149">149</a>
+<a class="jxr_linenumber" name="L150" href="#L150">150</a> <em class="jxr_javadoccomment">/** The array of keys. Keys are immutable after construction. */</em>
+<a class="jxr_linenumber" name="L151" href="#L151">151</a> <strong class="jxr_keyword">final</strong> K[] keys;
+<a class="jxr_linenumber" name="L152" href="#L152">152</a>
+<a class="jxr_linenumber" name="L153" href="#L153">153</a> <em class="jxr_javadoccomment">/** The array of values. Values can be modified via {@link #put(Object, Object)}. */</em>
+<a class="jxr_linenumber" name="L154" href="#L154">154</a> <strong class="jxr_keyword">final</strong> V[] values;
+<a class="jxr_linenumber" name="L155" href="#L155">155</a>
+<a class="jxr_linenumber" name="L156" href="#L156">156</a> <em class="jxr_javadoccomment">/** Pre-constructed entries array for {@link #entrySet()}. */</em>
+<a class="jxr_linenumber" name="L157" href="#L157">157</a> <strong class="jxr_keyword">final</strong> SimpleMapEntry[] entries;
+<a class="jxr_linenumber" name="L158" href="#L158">158</a>
+<a class="jxr_linenumber" name="L159" href="#L159">159</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L160" href="#L160">160</a> <em class="jxr_javadoccomment"> * Constructs a new SimpleMap with the specified keys and values.</em>
+<a class="jxr_linenumber" name="L161" href="#L161">161</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L162" href="#L162">162</a> <em class="jxr_javadoccomment"> * <p></em>
+<a class="jxr_linenumber" name="L163" href="#L163">163</a> <em class="jxr_javadoccomment"> * The keys and values arrays are stored by reference (not copied), so external</em>
+<a class="jxr_linenumber" name="L164" href="#L164">164</a> <em class="jxr_javadoccomment"> * modifications to the arrays after construction will be reflected in the map's behavior.</em>
+<a class="jxr_linenumber" name="L165" href="#L165">165</a> <em class="jxr_javadoccomment"> * However, the keys array should be treated as immutable after construction.</em>
+<a class="jxr_linenumber" name="L166" href="#L166">166</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L167" href="#L167">167</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Example:</h5></em>
+<a class="jxr_linenumber" name="L168" href="#L168">168</a> <em class="jxr_javadoccomment"> * <p class='bjava'></em>
+<a class="jxr_linenumber" name="L169" href="#L169">169</a> <em class="jxr_javadoccomment"> * String[] <jv>keys</jv> = {<js>"name"</js>, <js>"age"</js>, <js>"city"</js>};</em>
+<a class="jxr_linenumber" name="L170" href="#L170">170</a> <em class="jxr_javadoccomment"> * Object[] <jv>values</jv> = {<js>"John"</js>, 30, <js>"NYC"</js>};</em>
+<a class="jxr_linenumber" name="L171" href="#L171">171</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L172" href="#L172">172</a> <em class="jxr_javadoccomment"> * SimpleMap&lt;String,Object&gt; <jv>person</jv> = <jk>new</jk> SimpleMap&lt;&gt;(<jv>keys</jv>, <jv>values</jv>);</em>
+<a class="jxr_linenumber" name="L173" href="#L173">173</a> <em class="jxr_javadoccomment"> * </p></em>
+<a class="jxr_linenumber" name="L174" href="#L174">174</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L175" href="#L175">175</a> <em class="jxr_javadoccomment"> * @param keys The map keys. Must not be <jk>null</jk>, and no key can be <jk>null</jk>.</em>
+<a class="jxr_linenumber" name="L176" href="#L176">176</a> <em class="jxr_javadoccomment"> * @param values The map values. Must not be <jk>null</jk> and must have the same length as keys.</em>
+<a class="jxr_linenumber" name="L177" href="#L177">177</a> <em class="jxr_javadoccomment"> * Individual values can be <jk>null</jk>.</em>
+<a class="jxr_linenumber" name="L178" href="#L178">178</a> <em class="jxr_javadoccomment"> * @throws IllegalArgumentException if:</em>
+<a class="jxr_linenumber" name="L179" href="#L179">179</a> <em class="jxr_javadoccomment"> * <ul></em>
+<a class="jxr_linenumber" name="L180" href="#L180">180</a> <em class="jxr_javadoccomment"> * <li>The keys array is <jk>null</jk></em>
+<a class="jxr_linenumber" name="L181" href="#L181">181</a> <em class="jxr_javadoccomment"> * <li>The values array is <jk>null</jk></em>
+<a class="jxr_linenumber" name="L182" href="#L182">182</a> <em class="jxr_javadoccomment"> * <li>The keys and values arrays have different lengths</em>
+<a class="jxr_linenumber" name="L183" href="#L183">183</a> <em class="jxr_javadoccomment"> * <li>Any key is <jk>null</jk></em>
+<a class="jxr_linenumber" name="L184" href="#L184">184</a> <em class="jxr_javadoccomment"> * </ul></em>
+<a class="jxr_linenumber" name="L185" href="#L185">185</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L186" href="#L186">186</a> @SuppressWarnings(<span class="jxr_string">"unchecked"</span>)
+<a class="jxr_linenumber" name="L187" href="#L187">187</a> <strong class="jxr_keyword">public</strong> <a name="SimpleMap" href="../../../../../org/apache/juneau/common/collections/SimpleMap.html#SimpleMap">SimpleMap</a>(K[] keys, V[] values) {
+<a class="jxr_linenumber" name="L188" href="#L188">188</a> assertArgsNotNull(<span class="jxr_string">"keys"</span>, keys, <span class="jxr_string">"values"</span>, values);
+<a class="jxr_linenumber" name="L189" href="#L189">189</a> assertArg(keys.length == values.length, <span class="jxr_string">"keys ''{0}'' and values ''{1}'' array lengths differ"</span>, keys.length, values.length);
<a class="jxr_linenumber" name="L190" href="#L190">190</a>
<a class="jxr_linenumber" name="L191" href="#L191">191</a> <strong class="jxr_keyword">this</strong>.keys = keys;
<a class="jxr_linenumber" name="L192" href="#L192">192</a> <strong class="jxr_keyword">this</strong>.values = values;
diff --git a/site/xref/org/apache/juneau/common/io/FileReaderBuilder.html b/site/xref/org/apache/juneau/common/io/FileReaderBuilder.html
index 6c1e40d7a5..0e91a1f370 100644
--- a/site/xref/org/apache/juneau/common/io/FileReaderBuilder.html
+++ b/site/xref/org/apache/juneau/common/io/FileReaderBuilder.html
@@ -109,11 +109,11 @@
<a class="jxr_linenumber" name="L101" href="#L101">101</a> <em class="jxr_javadoccomment">/**</em>
<a class="jxr_linenumber" name="L102" href="#L102">102</a> <em class="jxr_javadoccomment"> * Sets the file being written from.</em>
<a class="jxr_linenumber" name="L103" href="#L103">103</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L104" href="#L104">104</a> <em class="jxr_javadoccomment"> * @param file The file being written from.</em>
+<a class="jxr_linenumber" name="L104" href="#L104">104</a> <em class="jxr_javadoccomment"> * @param value The file being written from.</em>
<a class="jxr_linenumber" name="L105" href="#L105">105</a> <em class="jxr_javadoccomment"> * @return This object.</em>
<a class="jxr_linenumber" name="L106" href="#L106">106</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L107" href="#L107">107</a> <strong class="jxr_keyword">public</strong> <a name="FileReaderBuilder" href="../../../../../org/apache/juneau/common/io/FileReaderBuilder.html#FileReaderBuilder">FileReaderBuilder</a> file(File file) {
-<a class="jxr_linenumber" name="L108" href="#L108">108</a> <strong class="jxr_keyword">this</strong>.file = file;
+<a class="jxr_linenumber" name="L107" href="#L107">107</a> <strong class="jxr_keyword">public</strong> <a name="FileReaderBuilder" href="../../../../../org/apache/juneau/common/io/FileReaderBuilder.html#FileReaderBuilder">FileReaderBuilder</a> file(File value) {
+<a class="jxr_linenumber" name="L108" href="#L108">108</a> <strong class="jxr_keyword">this</strong>.file = value;
<a class="jxr_linenumber" name="L109" href="#L109">109</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>;
<a class="jxr_linenumber" name="L110" href="#L110">110</a> }
<a class="jxr_linenumber" name="L111" href="#L111">111</a>
diff --git a/site/xref/org/apache/juneau/common/io/FileWriterBuilder.html b/site/xref/org/apache/juneau/common/io/FileWriterBuilder.html
index 44a371ff3a..fdb5709b2c 100644
--- a/site/xref/org/apache/juneau/common/io/FileWriterBuilder.html
+++ b/site/xref/org/apache/juneau/common/io/FileWriterBuilder.html
@@ -129,11 +129,11 @@
<a class="jxr_linenumber" name="L121" href="#L121">121</a> <em class="jxr_javadoccomment">/**</em>
<a class="jxr_linenumber" name="L122" href="#L122">122</a> <em class="jxr_javadoccomment"> * Sets the file being written to.</em>
<a class="jxr_linenumber" name="L123" href="#L123">123</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L124" href="#L124">124</a> <em class="jxr_javadoccomment"> * @param file The file being written to.</em>
+<a class="jxr_linenumber" name="L124" href="#L124">124</a> <em class="jxr_javadoccomment"> * @param value The file being written to.</em>
<a class="jxr_linenumber" name="L125" href="#L125">125</a> <em class="jxr_javadoccomment"> * @return This object.</em>
<a class="jxr_linenumber" name="L126" href="#L126">126</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L127" href="#L127">127</a> <strong class="jxr_keyword">public</strong> <a name="FileWriterBuilder" href="../../../../../org/apache/juneau/common/io/FileWriterBuilder.html#FileWriterBuilder">FileWriterBuilder</a> file(File file) {
-<a class="jxr_linenumber" name="L128" href="#L128">128</a> <strong class="jxr_keyword">this</strong>.file = file;
+<a class="jxr_linenumber" name="L127" href="#L127">127</a> <strong class="jxr_keyword">public</strong> <a name="FileWriterBuilder" href="../../../../../org/apache/juneau/common/io/FileWriterBuilder.html#FileWriterBuilder">FileWriterBuilder</a> file(File value) {
+<a class="jxr_linenumber" name="L128" href="#L128">128</a> <strong class="jxr_keyword">this</strong>.file = value;
<a class="jxr_linenumber" name="L129" href="#L129">129</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>;
<a class="jxr_linenumber" name="L130" href="#L130">130</a> }
<a class="jxr_linenumber" name="L131" href="#L131">131</a>
diff --git a/site/xref/org/apache/juneau/common/utils/AnnotationUtils.html b/site/xref/org/apache/juneau/common/utils/AnnotationUtils.html
index 22fbd97f88..35572c3efb 100644
--- a/site/xref/org/apache/juneau/common/utils/AnnotationUtils.html
+++ b/site/xref/org/apache/juneau/common/utils/AnnotationUtils.html
@@ -73,7 +73,7 @@
<a class="jxr_linenumber" name="L65" href="#L65">65</a> <em class="jxr_javadoccomment"> * @throws RuntimeException if an {@code Exception} is encountered during annotation member access</em>
<a class="jxr_linenumber" name="L66" href="#L66">66</a> <em class="jxr_javadoccomment"> * @throws IllegalStateException if an annotation method invocation returns {@code null}</em>
<a class="jxr_linenumber" name="L67" href="#L67">67</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L68" href="#L68">68</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">int</strong> hashCode(Annotation a) {
+<a class="jxr_linenumber" name="L68" href="#L68">68</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">int</strong> hash(Annotation a) {
<a class="jxr_linenumber" name="L69" href="#L69">69</a> <strong class="jxr_keyword">return</strong> getAnnotationMethods(a.annotationType()).mapToInt(x -> hashMember(x.getName(), safeSupplier(() -> x.invoke(a)))).sum();
<a class="jxr_linenumber" name="L70" href="#L70">70</a> }
<a class="jxr_linenumber" name="L71" href="#L71">71</a>
@@ -81,7 +81,7 @@
<a class="jxr_linenumber" name="L73" href="#L73">73</a> <strong class="jxr_keyword">if</strong> (a1.length != a2.length)
<a class="jxr_linenumber" name="L74" href="#L74">74</a> <strong class="jxr_keyword">return</strong> false;
<a class="jxr_linenumber" name="L75" href="#L75">75</a> <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">int</strong> i = 0; i < a1.length; i++)
-<a class="jxr_linenumber" name="L76" href="#L76">76</a> <strong class="jxr_keyword">if</strong> (! equals(a1[i], a2[i]))
+<a class="jxr_linenumber" name="L76" href="#L76">76</a> <strong class="jxr_keyword">if</strong> (ne(a1[i], a2[i]))
<a class="jxr_linenumber" name="L77" href="#L77">77</a> <strong class="jxr_keyword">return</strong> false;
<a class="jxr_linenumber" name="L78" href="#L78">78</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
<a class="jxr_linenumber" name="L79" href="#L79">79</a> }
@@ -139,7 +139,7 @@
<a class="jxr_linenumber" name="L131" href="#L131">131</a> <strong class="jxr_keyword">if</strong> (isArray(value))
<a class="jxr_linenumber" name="L132" href="#L132">132</a> <strong class="jxr_keyword">return</strong> part1 ^ arrayMemberHash(value.getClass().getComponentType(), value);
<a class="jxr_linenumber" name="L133" href="#L133">133</a> <strong class="jxr_keyword">if</strong> (value instanceof Annotation)
-<a class="jxr_linenumber" name="L134" href="#L134">134</a> <strong class="jxr_keyword">return</strong> part1 ^ hashCode((Annotation)value);
+<a class="jxr_linenumber" name="L134" href="#L134">134</a> <strong class="jxr_keyword">return</strong> part1 ^ hash((Annotation)value);
<a class="jxr_linenumber" name="L135" href="#L135">135</a> <strong class="jxr_keyword">return</strong> part1 ^ value.hashCode();
<a class="jxr_linenumber" name="L136" href="#L136">136</a> }
<a class="jxr_linenumber" name="L137" href="#L137">137</a>
@@ -151,7 +151,7 @@
<a class="jxr_linenumber" name="L143" href="#L143">143</a> <strong class="jxr_keyword">if</strong> (type.isArray())
<a class="jxr_linenumber" name="L144" href="#L144">144</a> <strong class="jxr_keyword">return</strong> arrayMemberEquals(type.getComponentType(), o1, o2);
<a class="jxr_linenumber" name="L145" href="#L145">145</a> <strong class="jxr_keyword">if</strong> (type.isAnnotation())
-<a class="jxr_linenumber" name="L146" href="#L146">146</a> <strong class="jxr_keyword">return</strong> equals((Annotation)o1, (Annotation)o2);
+<a class="jxr_linenumber" name="L146" href="#L146">146</a> <strong class="jxr_keyword">return</strong> eq((Annotation)o1, (Annotation)o2);
<a class="jxr_linenumber" name="L147" href="#L147">147</a> <strong class="jxr_keyword">return</strong> o1.equals(o2);
<a class="jxr_linenumber" name="L148" href="#L148">148</a> }
<a class="jxr_linenumber" name="L149" href="#L149">149</a> }
diff --git a/site/xref/org/apache/juneau/common/utils/AsciiSet.html b/site/xref/org/apache/juneau/common/utils/AsciiSet.html
index 3f7e36573f..4882640762 100644
--- a/site/xref/org/apache/juneau/common/utils/AsciiSet.html
+++ b/site/xref/org/apache/juneau/common/utils/AsciiSet.html
@@ -48,25 +48,25 @@
<a class="jxr_linenumber" name="L40" href="#L40">40</a> <em class="jxr_javadoccomment">/**</em>
<a class="jxr_linenumber" name="L41" href="#L41">41</a> <em class="jxr_javadoccomment"> * Adds a set of characters to this set.</em>
<a class="jxr_linenumber" name="L42" href="#L42">42</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L43" href="#L43">43</a> <em class="jxr_javadoccomment"> * @param chars The characters to keep in this store.</em>
+<a class="jxr_linenumber" name="L43" href="#L43">43</a> <em class="jxr_javadoccomment"> * @param value The characters to keep in this store.</em>
<a class="jxr_linenumber" name="L44" href="#L44">44</a> <em class="jxr_javadoccomment"> * @return This object.</em>
<a class="jxr_linenumber" name="L45" href="#L45">45</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L46" href="#L46">46</a> <strong class="jxr_keyword">public</strong> Builder chars(<strong class="jxr_keyword">char</strong>...chars) {
-<a class="jxr_linenumber" name="L47" href="#L47">47</a> <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">var</strong> i = 0; i < chars.length; i++)
-<a class="jxr_linenumber" name="L48" href="#L48">48</a> <strong class="jxr_keyword">if</strong> (chars[i] < 128)
-<a class="jxr_linenumber" name="L49" href="#L49">49</a> store[chars[i]] = <strong class="jxr_keyword">true</strong>;
+<a class="jxr_linenumber" name="L46" href="#L46">46</a> <strong class="jxr_keyword">public</strong> Builder chars(<strong class="jxr_keyword">char</strong>...value) {
+<a class="jxr_linenumber" name="L47" href="#L47">47</a> <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">var</strong> i = 0; i < value.length; i++)
+<a class="jxr_linenumber" name="L48" href="#L48">48</a> <strong class="jxr_keyword">if</strong> (value[i] < 128)
+<a class="jxr_linenumber" name="L49" href="#L49">49</a> store[value[i]] = <strong class="jxr_keyword">true</strong>;
<a class="jxr_linenumber" name="L50" href="#L50">50</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>;
<a class="jxr_linenumber" name="L51" href="#L51">51</a> }
<a class="jxr_linenumber" name="L52" href="#L52">52</a>
<a class="jxr_linenumber" name="L53" href="#L53">53</a> <em class="jxr_javadoccomment">/**</em>
<a class="jxr_linenumber" name="L54" href="#L54">54</a> <em class="jxr_javadoccomment"> * Adds a set of characters to this set.</em>
<a class="jxr_linenumber" name="L55" href="#L55">55</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L56" href="#L56">56</a> <em class="jxr_javadoccomment"> * @param chars The characters to keep in this store.</em>
+<a class="jxr_linenumber" name="L56" href="#L56">56</a> <em class="jxr_javadoccomment"> * @param value The characters to keep in this store.</em>
<a class="jxr_linenumber" name="L57" href="#L57">57</a> <em class="jxr_javadoccomment"> * @return This object.</em>
<a class="jxr_linenumber" name="L58" href="#L58">58</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L59" href="#L59">59</a> <strong class="jxr_keyword">public</strong> AsciiSet.Builder chars(String chars) {
-<a class="jxr_linenumber" name="L60" href="#L60">60</a> <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">var</strong> i = 0; i < chars.length(); i++) {
-<a class="jxr_linenumber" name="L61" href="#L61">61</a> <strong class="jxr_keyword">var</strong> c = chars.charAt(i);
+<a class="jxr_linenumber" name="L59" href="#L59">59</a> <strong class="jxr_keyword">public</strong> AsciiSet.Builder chars(String value) {
+<a class="jxr_linenumber" name="L60" href="#L60">60</a> <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">var</strong> i = 0; i < value.length(); i++) {
+<a class="jxr_linenumber" name="L61" href="#L61">61</a> <strong class="jxr_keyword">var</strong> c = value.charAt(i);
<a class="jxr_linenumber" name="L62" href="#L62">62</a> <strong class="jxr_keyword">if</strong> (c < 128)
<a class="jxr_linenumber" name="L63" href="#L63">63</a> store[c] = <strong class="jxr_keyword">true</strong>;
<a class="jxr_linenumber" name="L64" href="#L64">64</a> }
@@ -90,11 +90,11 @@
<a class="jxr_linenumber" name="L82" href="#L82">82</a> <em class="jxr_javadoccomment">/**</em>
<a class="jxr_linenumber" name="L83" href="#L83">83</a> <em class="jxr_javadoccomment"> * Shortcut for calling multiple ranges.</em>
<a class="jxr_linenumber" name="L84" href="#L84">84</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L85" href="#L85">85</a> <em class="jxr_javadoccomment"> * @param s Strings of the form "A-Z" where A and Z represent the first and last characters in the range.</em>
+<a class="jxr_linenumber" name="L85" href="#L85">85</a> <em class="jxr_javadoccomment"> * @param value Strings of the form "A-Z" where A and Z represent the first and last characters in the range.</em>
<a class="jxr_linenumber" name="L86" href="#L86">86</a> <em class="jxr_javadoccomment"> * @return This object.</em>
<a class="jxr_linenumber" name="L87" href="#L87">87</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L88" href="#L88">88</a> <strong class="jxr_keyword">public</strong> AsciiSet.Builder ranges(String...s) {
-<a class="jxr_linenumber" name="L89" href="#L89">89</a> <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">var</strong> ss : s) {
+<a class="jxr_linenumber" name="L88" href="#L88">88</a> <strong class="jxr_keyword">public</strong> AsciiSet.Builder ranges(String...value) {
+<a class="jxr_linenumber" name="L89" href="#L89">89</a> <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">var</strong> ss : value) {
<a class="jxr_linenumber" name="L90" href="#L90">90</a> <strong class="jxr_keyword">if</strong> (ss.length() != 3 || ss.charAt(1) != '-')
<a class="jxr_linenumber" name="L91" href="#L91">91</a> <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IllegalArgumentException(<span class="jxr_string">"Value passed to ranges() must be 3 characters"</span>);
<a class="jxr_linenumber" name="L92" href="#L92">92</a> range(ss.charAt(0), ss.charAt(2));
@@ -115,11 +115,11 @@
<a class="jxr_linenumber" name="L107" href="#L107">107</a> <em class="jxr_javadoccomment">/**</em>
<a class="jxr_linenumber" name="L108" href="#L108">108</a> <em class="jxr_javadoccomment"> * Creates an ASCII set with the specified characters.</em>
<a class="jxr_linenumber" name="L109" href="#L109">109</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L110" href="#L110">110</a> <em class="jxr_javadoccomment"> * @param chars The characters to keep in this store.</em>
+<a class="jxr_linenumber" name="L110" href="#L110">110</a> <em class="jxr_javadoccomment"> * @param value The characters to keep in this store.</em>
<a class="jxr_linenumber" name="L111" href="#L111">111</a> <em class="jxr_javadoccomment"> * @return A new object.</em>
<a class="jxr_linenumber" name="L112" href="#L112">112</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L113" href="#L113">113</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <a name="AsciiSet" href="../../../../../org/apache/juneau/common/utils/AsciiSet.html#AsciiSet">AsciiSet</a> of(String chars) {
-<a class="jxr_linenumber" name="L114" href="#L114">114</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> Builder().chars(chars).build();
+<a class="jxr_linenumber" name="L113" href="#L113">113</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <a name="AsciiSet" href="../../../../../org/apache/juneau/common/utils/AsciiSet.html#AsciiSet">AsciiSet</a> of(String value) {
+<a class="jxr_linenumber" name="L114" href="#L114">114</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> Builder().chars(value).build();
<a class="jxr_linenumber" name="L115" href="#L115">115</a> }
<a class="jxr_linenumber" name="L116" href="#L116">116</a>
<a class="jxr_linenumber" name="L117" href="#L117">117</a> <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">boolean</strong>[] store;
@@ -131,26 +131,26 @@
<a class="jxr_linenumber" name="L123" href="#L123">123</a> <em class="jxr_javadoccomment">/**</em>
<a class="jxr_linenumber" name="L124" href="#L124">124</a> <em class="jxr_javadoccomment"> * Returns <jk>true</jk> if the specified character is in this store.</em>
<a class="jxr_linenumber" name="L125" href="#L125">125</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L126" href="#L126">126</a> <em class="jxr_javadoccomment"> * @param c The character to check.</em>
+<a class="jxr_linenumber" name="L126" href="#L126">126</a> <em class="jxr_javadoccomment"> * @param value The character to check.</em>
<a class="jxr_linenumber" name="L127" href="#L127">127</a> <em class="jxr_javadoccomment"> * @return <jk>true</jk> if the specified character is in this store.</em>
<a class="jxr_linenumber" name="L128" href="#L128">128</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L129" href="#L129">129</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> contains(<strong class="jxr_keyword">char</strong> c) {
-<a class="jxr_linenumber" name="L130" href="#L130">130</a> <strong class="jxr_keyword">if</strong> (c > 127)
+<a class="jxr_linenumber" name="L129" href="#L129">129</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> contains(<strong class="jxr_keyword">char</strong> value) {
+<a class="jxr_linenumber" name="L130" href="#L130">130</a> <strong class="jxr_keyword">if</strong> (value > 127)
<a class="jxr_linenumber" name="L131" href="#L131">131</a> <strong class="jxr_keyword">return</strong> false;
-<a class="jxr_linenumber" name="L132" href="#L132">132</a> <strong class="jxr_keyword">return</strong> store[c];
+<a class="jxr_linenumber" name="L132" href="#L132">132</a> <strong class="jxr_keyword">return</strong> store[value];
<a class="jxr_linenumber" name="L133" href="#L133">133</a> }
<a class="jxr_linenumber" name="L134" href="#L134">134</a>
<a class="jxr_linenumber" name="L135" href="#L135">135</a> <em class="jxr_javadoccomment">/**</em>
<a class="jxr_linenumber" name="L136" href="#L136">136</a> <em class="jxr_javadoccomment"> * Returns <jk>true</jk> if the specified string contains at least one character in this set.</em>
<a class="jxr_linenumber" name="L137" href="#L137">137</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L138" href="#L138">138</a> <em class="jxr_javadoccomment"> * @param s The string to test.</em>
+<a class="jxr_linenumber" name="L138" href="#L138">138</a> <em class="jxr_javadoccomment"> * @param value The string to test.</em>
<a class="jxr_linenumber" name="L139" href="#L139">139</a> <em class="jxr_javadoccomment"> * @return <jk>true</jk> if the string is not null and contains at least one character in this set.</em>
<a class="jxr_linenumber" name="L140" href="#L140">140</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L141" href="#L141">141</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> contains(CharSequence s) {
-<a class="jxr_linenumber" name="L142" href="#L142">142</a> <strong class="jxr_keyword">if</strong> (s == <strong class="jxr_keyword">null</strong>)
+<a class="jxr_linenumber" name="L141" href="#L141">141</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> contains(CharSequence value) {
+<a class="jxr_linenumber" name="L142" href="#L142">142</a> <strong class="jxr_keyword">if</strong> (value == <strong class="jxr_keyword">null</strong>)
<a class="jxr_linenumber" name="L143" href="#L143">143</a> <strong class="jxr_keyword">return</strong> false;
-<a class="jxr_linenumber" name="L144" href="#L144">144</a> <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">var</strong> i = 0; i < s.length(); i++)
-<a class="jxr_linenumber" name="L145" href="#L145">145</a> <strong class="jxr_keyword">if</strong> (contains(s.charAt(i)))
+<a class="jxr_linenumber" name="L144" href="#L144">144</a> <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">var</strong> i = 0; i < value.length(); i++)
+<a class="jxr_linenumber" name="L145" href="#L145">145</a> <strong class="jxr_keyword">if</strong> (contains(value.charAt(i)))
<a class="jxr_linenumber" name="L146" href="#L146">146</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
<a class="jxr_linenumber" name="L147" href="#L147">147</a> <strong class="jxr_keyword">return</strong> false;
<a class="jxr_linenumber" name="L148" href="#L148">148</a> }
@@ -158,29 +158,29 @@
<a class="jxr_linenumber" name="L150" href="#L150">150</a> <em class="jxr_javadoccomment">/**</em>
<a class="jxr_linenumber" name="L151" href="#L151">151</a> <em class="jxr_javadoccomment"> * Returns <jk>true</jk> if the specified character is in this store.</em>
<a class="jxr_linenumber" name="L152" href="#L152">152</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L153" href="#L153">153</a> <em class="jxr_javadoccomment"> * @param c The character to check.</em>
+<a class="jxr_linenumber" name="L153" href="#L153">153</a> <em class="jxr_javadoccomment"> * @param value The character to check.</em>
<a class="jxr_linenumber" name="L154" href="#L154">154</a> <em class="jxr_javadoccomment"> * @return <jk>true</jk> if the specified character is in this store.</em>
<a class="jxr_linenumber" name="L155" href="#L155">155</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L156" href="#L156">156</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> contains(<strong class="jxr_keyword">int</strong> c) {
-<a class="jxr_linenumber" name="L157" href="#L157">157</a> <strong class="jxr_keyword">if</strong> (c < 0 || c > 127)
+<a class="jxr_linenumber" name="L156" href="#L156">156</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> contains(<strong class="jxr_keyword">int</strong> value) {
+<a class="jxr_linenumber" name="L157" href="#L157">157</a> <strong class="jxr_keyword">if</strong> (value < 0 || value > 127)
<a class="jxr_linenumber" name="L158" href="#L158">158</a> <strong class="jxr_keyword">return</strong> false;
-<a class="jxr_linenumber" name="L159" href="#L159">159</a> <strong class="jxr_keyword">return</strong> store[c];
+<a class="jxr_linenumber" name="L159" href="#L159">159</a> <strong class="jxr_keyword">return</strong> store[value];
<a class="jxr_linenumber" name="L160" href="#L160">160</a> }
<a class="jxr_linenumber" name="L161" href="#L161">161</a>
<a class="jxr_linenumber" name="L162" href="#L162">162</a> <em class="jxr_javadoccomment">/**</em>
<a class="jxr_linenumber" name="L163" href="#L163">163</a> <em class="jxr_javadoccomment"> * Returns <jk>true</jk> if the specified string contains only characters in this set.</em>
<a class="jxr_linenumber" name="L164" href="#L164">164</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L165" href="#L165">165</a> <em class="jxr_javadoccomment"> * @param s The string to test.</em>
+<a class="jxr_linenumber" name="L165" href="#L165">165</a> <em class="jxr_javadoccomment"> * @param value The string to test.</em>
<a class="jxr_linenumber" name="L166" href="#L166">166</a> <em class="jxr_javadoccomment"> * @return</em>
<a class="jxr_linenumber" name="L167" href="#L167">167</a> <em class="jxr_javadoccomment"> * <jk>true</jk> if the string contains only characters in this set.</em>
<a class="jxr_linenumber" name="L168" href="#L168">168</a> <em class="jxr_javadoccomment"> * <br>Nulls always return <jk>false</jk>.</em>
<a class="jxr_linenumber" name="L169" href="#L169">169</a> <em class="jxr_javadoccomment"> * <br>Blanks always return <jk>true</jk>.</em>
<a class="jxr_linenumber" name="L170" href="#L170">170</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L171" href="#L171">171</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> containsOnly(String s) {
-<a class="jxr_linenumber" name="L172" href="#L172">172</a> <strong class="jxr_keyword">if</strong> (s == <strong class="jxr_keyword">null</strong>)
+<a class="jxr_linenumber" name="L171" href="#L171">171</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> containsOnly(String value) {
+<a class="jxr_linenumber" name="L172" href="#L172">172</a> <strong class="jxr_keyword">if</strong> (value == <strong class="jxr_keyword">null</strong>)
<a class="jxr_linenumber" name="L173" href="#L173">173</a> <strong class="jxr_keyword">return</strong> false;
-<a class="jxr_linenumber" name="L174" href="#L174">174</a> <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">var</strong> i = 0; i < s.length(); i++)
-<a class="jxr_linenumber" name="L175" href="#L175">175</a> <strong class="jxr_keyword">if</strong> (! contains(s.charAt(i)))
+<a class="jxr_linenumber" name="L174" href="#L174">174</a> <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">var</strong> i = 0; i < value.length(); i++)
+<a class="jxr_linenumber" name="L175" href="#L175">175</a> <strong class="jxr_keyword">if</strong> (! contains(value.charAt(i)))
<a class="jxr_linenumber" name="L176" href="#L176">176</a> <strong class="jxr_keyword">return</strong> false;
<a class="jxr_linenumber" name="L177" href="#L177">177</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
<a class="jxr_linenumber" name="L178" href="#L178">178</a> }
diff --git a/site/xref/org/apache/juneau/common/utils/ClassUtils.html b/site/xref/org/apache/juneau/common/utils/ClassUtils.html
index bb97d82068..90d93b9556 100644
--- a/site/xref/org/apache/juneau/common/utils/ClassUtils.html
+++ b/site/xref/org/apache/juneau/common/utils/ClassUtils.html
@@ -24,105 +24,105 @@
<a class="jxr_linenumber" name="L16" href="#L16">16</a> <em class="jxr_comment"> */</em>
<a class="jxr_linenumber" name="L17" href="#L17">17</a> <strong class="jxr_keyword">package</strong> org.apache.juneau.common.utils;
<a class="jxr_linenumber" name="L18" href="#L18">18</a>
-<a class="jxr_linenumber" name="L19" href="#L19">19</a> <strong class="jxr_keyword">import</strong> <strong class="jxr_keyword">static</strong> org.apache.juneau.common.utils.Utils.*;
-<a class="jxr_linenumber" name="L20" href="#L20">20</a>
-<a class="jxr_linenumber" name="L21" href="#L21">21</a> <strong class="jxr_keyword">import</strong> java.lang.reflect.*;
-<a class="jxr_linenumber" name="L22" href="#L22">22</a> <strong class="jxr_keyword">import</strong> java.util.*;
-<a class="jxr_linenumber" name="L23" href="#L23">23</a> <strong class="jxr_keyword">import</strong> java.util.function.*;
-<a class="jxr_linenumber" name="L24" href="#L24">24</a>
-<a class="jxr_linenumber" name="L25" href="#L25">25</a> <strong class="jxr_keyword">import</strong> org.apache.juneau.common.collections.*;
-<a class="jxr_linenumber" name="L26" href="#L26">26</a>
-<a class="jxr_linenumber" name="L27" href="#L27">27</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L28" href="#L28">28</a> <em class="jxr_javadoccomment"> * Utility methods for working with classes.</em>
-<a class="jxr_linenumber" name="L29" href="#L29">29</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L30" href="#L30">30</a> <em class="jxr_javadoccomment"> * <h5 class='section'>See Also:</h5><ul></em>
-<a class="jxr_linenumber" name="L31" href="#L31">31</a> <em class="jxr_javadoccomment"> * </ul></em>
-<a class="jxr_linenumber" name="L32" href="#L32">32</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L33" href="#L33">33</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a name="ClassUtils" href="../../../../../org/apache/juneau/common/utils/ClassUtils.html#ClassUtils">ClassUtils</a> {
-<a class="jxr_linenumber" name="L34" href="#L34">34</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L35" href="#L35">35</a> <em class="jxr_javadoccomment"> * Attempts to call <code>x.setAccessible(<jk>true</jk>)</code> and quietly ignores security exceptions.</em>
-<a class="jxr_linenumber" name="L36" href="#L36">36</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L37" href="#L37">37</a> <em class="jxr_javadoccomment"> * @param x The constructor.</em>
-<a class="jxr_linenumber" name="L38" href="#L38">38</a> <em class="jxr_javadoccomment"> * @return <jk>true</jk> if call was successful.</em>
-<a class="jxr_linenumber" name="L39" href="#L39">39</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L40" href="#L40">40</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> setAccessible(Constructor<?> x) {
-<a class="jxr_linenumber" name="L41" href="#L41">41</a> <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="L42" href="#L42">42</a> <strong class="jxr_keyword">if</strong> (nn(x))
-<a class="jxr_linenumber" name="L43" href="#L43">43</a> x.setAccessible(<strong class="jxr_keyword">true</strong>);
-<a class="jxr_linenumber" name="L44" href="#L44">44</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
-<a class="jxr_linenumber" name="L45" href="#L45">45</a> } <strong class="jxr_keyword">catch</strong> (@SuppressWarnings(<span class="jxr_string">"unused"</span>) SecurityException e) {
-<a class="jxr_linenumber" name="L46" href="#L46">46</a> <strong class="jxr_keyword">return</strong> false;
-<a class="jxr_linenumber" name="L47" href="#L47">47</a> }
-<a class="jxr_linenumber" name="L48" href="#L48">48</a> }
-<a class="jxr_linenumber" name="L49" href="#L49">49</a>
-<a class="jxr_linenumber" name="L50" href="#L50">50</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L51" href="#L51">51</a> <em class="jxr_javadoccomment"> * Attempts to call <code>x.setAccessible(<jk>true</jk>)</code> and quietly ignores security exceptions.</em>
-<a class="jxr_linenumber" name="L52" href="#L52">52</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L53" href="#L53">53</a> <em class="jxr_javadoccomment"> * @param x The field.</em>
-<a class="jxr_linenumber" name="L54" href="#L54">54</a> <em class="jxr_javadoccomment"> * @return <jk>true</jk> if call was successful.</em>
-<a class="jxr_linenumber" name="L55" href="#L55">55</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L56" href="#L56">56</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> setAccessible(Field x) {
-<a class="jxr_linenumber" name="L57" href="#L57">57</a> <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="L58" href="#L58">58</a> <strong class="jxr_keyword">if</strong> (nn(x))
-<a class="jxr_linenumber" name="L59" href="#L59">59</a> x.setAccessible(<strong class="jxr_keyword">true</strong>);
-<a class="jxr_linenumber" name="L60" href="#L60">60</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
-<a class="jxr_linenumber" name="L61" href="#L61">61</a> } <strong class="jxr_keyword">catch</strong> (@SuppressWarnings(<span class="jxr_string">"unused"</span>) SecurityException e) {
-<a class="jxr_linenumber" name="L62" href="#L62">62</a> <strong class="jxr_keyword">return</strong> false;
-<a class="jxr_linenumber" name="L63" href="#L63">63</a> }
-<a class="jxr_linenumber" name="L64" href="#L64">64</a> }
-<a class="jxr_linenumber" name="L65" href="#L65">65</a>
-<a class="jxr_linenumber" name="L66" href="#L66">66</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L67" href="#L67">67</a> <em class="jxr_javadoccomment"> * Attempts to call <code>x.setAccessible(<jk>true</jk>)</code> and quietly ignores security exceptions.</em>
-<a class="jxr_linenumber" name="L68" href="#L68">68</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L69" href="#L69">69</a> <em class="jxr_javadoccomment"> * @param x The method.</em>
-<a class="jxr_linenumber" name="L70" href="#L70">70</a> <em class="jxr_javadoccomment"> * @return <jk>true</jk> if call was successful.</em>
-<a class="jxr_linenumber" name="L71" href="#L71">71</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L72" href="#L72">72</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> setAccessible(Method x) {
-<a class="jxr_linenumber" name="L73" href="#L73">73</a> <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="L74" href="#L74">74</a> <strong class="jxr_keyword">if</strong> (nn(x))
-<a class="jxr_linenumber" name="L75" href="#L75">75</a> x.setAccessible(<strong class="jxr_keyword">true</strong>);
-<a class="jxr_linenumber" name="L76" href="#L76">76</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
-<a class="jxr_linenumber" name="L77" href="#L77">77</a> } <strong class="jxr_keyword">catch</strong> (@SuppressWarnings(<span class="jxr_string">"unused"</span>) SecurityException e) {
-<a class="jxr_linenumber" name="L78" href="#L78">78</a> <strong class="jxr_keyword">return</strong> false;
-<a class="jxr_linenumber" name="L79" href="#L79">79</a> }
-<a class="jxr_linenumber" name="L80" href="#L80">80</a> }
-<a class="jxr_linenumber" name="L81" href="#L81">81</a>
-<a class="jxr_linenumber" name="L82" href="#L82">82</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L83" href="#L83">83</a> <em class="jxr_javadoccomment"> * Returns the generic parameter type of the Value type.</em>
-<a class="jxr_linenumber" name="L84" href="#L84">84</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L85" href="#L85">85</a> <em class="jxr_javadoccomment"> * @param t The type to find the parameter type of.</em>
-<a class="jxr_linenumber" name="L86" href="#L86">86</a> <em class="jxr_javadoccomment"> * @return The parameter type of the value, or <jk>null</jk> if the type is not a subclass of <c>Value</c>.</em>
-<a class="jxr_linenumber" name="L87" href="#L87">87</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L88" href="#L88">88</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> Type getParameterType(Type t) {
-<a class="jxr_linenumber" name="L89" href="#L89">89</a> <strong class="jxr_keyword">if</strong> (t instanceof ParameterizedType) {
-<a class="jxr_linenumber" name="L90" href="#L90">90</a> ParameterizedType pt = (ParameterizedType)t;
-<a class="jxr_linenumber" name="L91" href="#L91">91</a> <strong class="jxr_keyword">if</strong> (pt.getRawType() == Value.<strong class="jxr_keyword">class</strong>) {
-<a class="jxr_linenumber" name="L92" href="#L92">92</a> Type[] ta = pt.getActualTypeArguments();
-<a class="jxr_linenumber" name="L93" href="#L93">93</a> <strong class="jxr_keyword">if</strong> (ta.length > 0)
-<a class="jxr_linenumber" name="L94" href="#L94">94</a> <strong class="jxr_keyword">return</strong> ta[0];
-<a class="jxr_linenumber" name="L95" href="#L95">95</a> }
-<a class="jxr_linenumber" name="L96" href="#L96">96</a> } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (t instanceof Class) {
-<a class="jxr_linenumber" name="L97" href="#L97">97</a> Class<?> c = (Class<?>)t;
-<a class="jxr_linenumber" name="L98" href="#L98">98</a> <strong class="jxr_keyword">if</strong> (Value.<strong class="jxr_keyword">class</strong>.isAssignableFrom(c)) {
-<a class="jxr_linenumber" name="L99" href="#L99">99</a> <strong class="jxr_keyword">return</strong> ClassUtils.getParameterType(c, 0, Value.<strong class="jxr_keyword">class</strong>);
-<a class="jxr_linenumber" name="L100" href="#L100">100</a> }
-<a class="jxr_linenumber" name="L101" href="#L101">101</a> }
-<a class="jxr_linenumber" name="L102" href="#L102">102</a>
-<a class="jxr_linenumber" name="L103" href="#L103">103</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="L104" href="#L104">104</a> }
-<a class="jxr_linenumber" name="L105" href="#L105">105</a>
-<a class="jxr_linenumber" name="L106" href="#L106">106</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L107" href="#L107">107</a> <em class="jxr_javadoccomment"> * Returns the generic parameter type at the specified index for a class that extends a parameterized type.</em>
-<a class="jxr_linenumber" name="L108" href="#L108">108</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L109" href="#L109">109</a> <em class="jxr_javadoccomment"> * @param c The class to examine.</em>
-<a class="jxr_linenumber" name="L110" href="#L110">110</a> <em class="jxr_javadoccomment"> * @param index The zero-based index of the parameter to retrieve.</em>
-<a class="jxr_linenumber" name="L111" href="#L111">111</a> <em class="jxr_javadoccomment"> * @param pt The parameterized superclass or interface.</em>
-<a class="jxr_linenumber" name="L112" href="#L112">112</a> <em class="jxr_javadoccomment"> * @return The parameter type at the specified index.</em>
-<a class="jxr_linenumber" name="L113" href="#L113">113</a> <em class="jxr_javadoccomment"> * @throws IllegalArgumentException If the class is not a subclass of the parameterized type or if the index is invalid.</em>
-<a class="jxr_linenumber" name="L114" href="#L114">114</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L115" href="#L115">115</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> Class<?> getParameterType(Class<?> c, <strong class="jxr_keyword">int</strong> index, Class<?> pt) {
-<a class="jxr_linenumber" name="L116" href="#L116">116</a> AssertionUtils.assertArgNotNull(<span class="jxr_string">"pt"</span>, pt);
-<a class="jxr_linenumber" name="L117" href="#L117">117</a> AssertionUtils.assertArgNotNull(<span class="jxr_string">"c"</span>, c);
+<a class="jxr_linenumber" name="L19" href="#L19">19</a> <strong class="jxr_keyword">import</strong> <strong class="jxr_keyword">static</strong> org.apache.juneau.common.utils.AssertionUtils.*;
+<a class="jxr_linenumber" name="L20" href="#L20">20</a> <strong class="jxr_keyword">import</strong> <strong class="jxr_keyword">static</strong> org.apache.juneau.common.utils.Utils.*;
+<a class="jxr_linenumber" name="L21" href="#L21">21</a>
+<a class="jxr_linenumber" name="L22" href="#L22">22</a> <strong class="jxr_keyword">import</strong> java.lang.reflect.*;
+<a class="jxr_linenumber" name="L23" href="#L23">23</a> <strong class="jxr_keyword">import</strong> java.util.*;
+<a class="jxr_linenumber" name="L24" href="#L24">24</a> <strong class="jxr_keyword">import</strong> java.util.function.*;
+<a class="jxr_linenumber" name="L25" href="#L25">25</a>
+<a class="jxr_linenumber" name="L26" href="#L26">26</a> <strong class="jxr_keyword">import</strong> org.apache.juneau.common.collections.*;
+<a class="jxr_linenumber" name="L27" href="#L27">27</a>
+<a class="jxr_linenumber" name="L28" href="#L28">28</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L29" href="#L29">29</a> <em class="jxr_javadoccomment"> * Utility methods for working with classes.</em>
+<a class="jxr_linenumber" name="L30" href="#L30">30</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L31" href="#L31">31</a> <em class="jxr_javadoccomment"> * <h5 class='section'>See Also:</h5><ul></em>
+<a class="jxr_linenumber" name="L32" href="#L32">32</a> <em class="jxr_javadoccomment"> * </ul></em>
+<a class="jxr_linenumber" name="L33" href="#L33">33</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L34" href="#L34">34</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a name="ClassUtils" href="../../../../../org/apache/juneau/common/utils/ClassUtils.html#ClassUtils">ClassUtils</a> {
+<a class="jxr_linenumber" name="L35" href="#L35">35</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L36" href="#L36">36</a> <em class="jxr_javadoccomment"> * Attempts to call <code>x.setAccessible(<jk>true</jk>)</code> and quietly ignores security exceptions.</em>
+<a class="jxr_linenumber" name="L37" href="#L37">37</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L38" href="#L38">38</a> <em class="jxr_javadoccomment"> * @param x The constructor.</em>
+<a class="jxr_linenumber" name="L39" href="#L39">39</a> <em class="jxr_javadoccomment"> * @return <jk>true</jk> if call was successful.</em>
+<a class="jxr_linenumber" name="L40" href="#L40">40</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L41" href="#L41">41</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> setAccessible(Constructor<?> x) {
+<a class="jxr_linenumber" name="L42" href="#L42">42</a> <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="L43" href="#L43">43</a> <strong class="jxr_keyword">if</strong> (nn(x))
+<a class="jxr_linenumber" name="L44" href="#L44">44</a> x.setAccessible(<strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="L45" href="#L45">45</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
+<a class="jxr_linenumber" name="L46" href="#L46">46</a> } <strong class="jxr_keyword">catch</strong> (@SuppressWarnings(<span class="jxr_string">"unused"</span>) SecurityException e) {
+<a class="jxr_linenumber" name="L47" href="#L47">47</a> <strong class="jxr_keyword">return</strong> false;
+<a class="jxr_linenumber" name="L48" href="#L48">48</a> }
+<a class="jxr_linenumber" name="L49" href="#L49">49</a> }
+<a class="jxr_linenumber" name="L50" href="#L50">50</a>
+<a class="jxr_linenumber" name="L51" href="#L51">51</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L52" href="#L52">52</a> <em class="jxr_javadoccomment"> * Attempts to call <code>x.setAccessible(<jk>true</jk>)</code> and quietly ignores security exceptions.</em>
+<a class="jxr_linenumber" name="L53" href="#L53">53</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L54" href="#L54">54</a> <em class="jxr_javadoccomment"> * @param x The field.</em>
+<a class="jxr_linenumber" name="L55" href="#L55">55</a> <em class="jxr_javadoccomment"> * @return <jk>true</jk> if call was successful.</em>
+<a class="jxr_linenumber" name="L56" href="#L56">56</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L57" href="#L57">57</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> setAccessible(Field x) {
+<a class="jxr_linenumber" name="L58" href="#L58">58</a> <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="L59" href="#L59">59</a> <strong class="jxr_keyword">if</strong> (nn(x))
+<a class="jxr_linenumber" name="L60" href="#L60">60</a> x.setAccessible(<strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="L61" href="#L61">61</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
+<a class="jxr_linenumber" name="L62" href="#L62">62</a> } <strong class="jxr_keyword">catch</strong> (@SuppressWarnings(<span class="jxr_string">"unused"</span>) SecurityException e) {
+<a class="jxr_linenumber" name="L63" href="#L63">63</a> <strong class="jxr_keyword">return</strong> false;
+<a class="jxr_linenumber" name="L64" href="#L64">64</a> }
+<a class="jxr_linenumber" name="L65" href="#L65">65</a> }
+<a class="jxr_linenumber" name="L66" href="#L66">66</a>
+<a class="jxr_linenumber" name="L67" href="#L67">67</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L68" href="#L68">68</a> <em class="jxr_javadoccomment"> * Attempts to call <code>x.setAccessible(<jk>true</jk>)</code> and quietly ignores security exceptions.</em>
+<a class="jxr_linenumber" name="L69" href="#L69">69</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L70" href="#L70">70</a> <em class="jxr_javadoccomment"> * @param x The method.</em>
+<a class="jxr_linenumber" name="L71" href="#L71">71</a> <em class="jxr_javadoccomment"> * @return <jk>true</jk> if call was successful.</em>
+<a class="jxr_linenumber" name="L72" href="#L72">72</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L73" href="#L73">73</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> setAccessible(Method x) {
+<a class="jxr_linenumber" name="L74" href="#L74">74</a> <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="L75" href="#L75">75</a> <strong class="jxr_keyword">if</strong> (nn(x))
+<a class="jxr_linenumber" name="L76" href="#L76">76</a> x.setAccessible(<strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="L77" href="#L77">77</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
+<a class="jxr_linenumber" name="L78" href="#L78">78</a> } <strong class="jxr_keyword">catch</strong> (@SuppressWarnings(<span class="jxr_string">"unused"</span>) SecurityException e) {
+<a class="jxr_linenumber" name="L79" href="#L79">79</a> <strong class="jxr_keyword">return</strong> false;
+<a class="jxr_linenumber" name="L80" href="#L80">80</a> }
+<a class="jxr_linenumber" name="L81" href="#L81">81</a> }
+<a class="jxr_linenumber" name="L82" href="#L82">82</a>
+<a class="jxr_linenumber" name="L83" href="#L83">83</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L84" href="#L84">84</a> <em class="jxr_javadoccomment"> * Returns the generic parameter type of the Value type.</em>
+<a class="jxr_linenumber" name="L85" href="#L85">85</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L86" href="#L86">86</a> <em class="jxr_javadoccomment"> * @param t The type to find the parameter type of.</em>
+<a class="jxr_linenumber" name="L87" href="#L87">87</a> <em class="jxr_javadoccomment"> * @return The parameter type of the value, or <jk>null</jk> if the type is not a subclass of <c>Value</c>.</em>
+<a class="jxr_linenumber" name="L88" href="#L88">88</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L89" href="#L89">89</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> Type getParameterType(Type t) {
+<a class="jxr_linenumber" name="L90" href="#L90">90</a> <strong class="jxr_keyword">if</strong> (t instanceof ParameterizedType) {
+<a class="jxr_linenumber" name="L91" href="#L91">91</a> ParameterizedType pt = (ParameterizedType)t;
+<a class="jxr_linenumber" name="L92" href="#L92">92</a> <strong class="jxr_keyword">if</strong> (pt.getRawType() == Value.<strong class="jxr_keyword">class</strong>) {
+<a class="jxr_linenumber" name="L93" href="#L93">93</a> Type[] ta = pt.getActualTypeArguments();
+<a class="jxr_linenumber" name="L94" href="#L94">94</a> <strong class="jxr_keyword">if</strong> (ta.length > 0)
+<a class="jxr_linenumber" name="L95" href="#L95">95</a> <strong class="jxr_keyword">return</strong> ta[0];
+<a class="jxr_linenumber" name="L96" href="#L96">96</a> }
+<a class="jxr_linenumber" name="L97" href="#L97">97</a> } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (t instanceof Class) {
+<a class="jxr_linenumber" name="L98" href="#L98">98</a> Class<?> c = (Class<?>)t;
+<a class="jxr_linenumber" name="L99" href="#L99">99</a> <strong class="jxr_keyword">if</strong> (Value.<strong class="jxr_keyword">class</strong>.isAssignableFrom(c)) {
+<a class="jxr_linenumber" name="L100" href="#L100">100</a> <strong class="jxr_keyword">return</strong> ClassUtils.getParameterType(c, 0, Value.<strong class="jxr_keyword">class</strong>);
+<a class="jxr_linenumber" name="L101" href="#L101">101</a> }
+<a class="jxr_linenumber" name="L102" href="#L102">102</a> }
+<a class="jxr_linenumber" name="L103" href="#L103">103</a>
+<a class="jxr_linenumber" name="L104" href="#L104">104</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="L105" href="#L105">105</a> }
+<a class="jxr_linenumber" name="L106" href="#L106">106</a>
+<a class="jxr_linenumber" name="L107" href="#L107">107</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L108" href="#L108">108</a> <em class="jxr_javadoccomment"> * Returns the generic parameter type at the specified index for a class that extends a parameterized type.</em>
+<a class="jxr_linenumber" name="L109" href="#L109">109</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L110" href="#L110">110</a> <em class="jxr_javadoccomment"> * @param c The class to examine.</em>
+<a class="jxr_linenumber" name="L111" href="#L111">111</a> <em class="jxr_javadoccomment"> * @param index The zero-based index of the parameter to retrieve.</em>
+<a class="jxr_linenumber" name="L112" href="#L112">112</a> <em class="jxr_javadoccomment"> * @param pt The parameterized superclass or interface.</em>
+<a class="jxr_linenumber" name="L113" href="#L113">113</a> <em class="jxr_javadoccomment"> * @return The parameter type at the specified index.</em>
+<a class="jxr_linenumber" name="L114" href="#L114">114</a> <em class="jxr_javadoccomment"> * @throws IllegalArgumentException If the class is not a subclass of the parameterized type or if the index is invalid.</em>
+<a class="jxr_linenumber" name="L115" href="#L115">115</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L116" href="#L116">116</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> Class<?> getParameterType(Class<?> c, <strong class="jxr_keyword">int</strong> index, Class<?> pt) {
+<a class="jxr_linenumber" name="L117" href="#L117">117</a> assertArgsNotNull(<span class="jxr_string">"pt"</span>, pt, <span class="jxr_string">"c"</span>, c);
<a class="jxr_linenumber" name="L118" href="#L118">118</a>
<a class="jxr_linenumber" name="L119" href="#L119">119</a> <em class="jxr_comment">// We need to make up a mapping of type names.</em>
<a class="jxr_linenumber" name="L120" href="#L120">120</a> Map<Type,Type> typeMap = <strong class="jxr_keyword">new</strong> HashMap<>();
diff --git a/site/xref/org/apache/juneau/common/utils/Console.html b/site/xref/org/apache/juneau/common/utils/Console.html
index 1a2c83394d..7c4164b6ee 100644
--- a/site/xref/org/apache/juneau/common/utils/Console.html
+++ b/site/xref/org/apache/juneau/common/utils/Console.html
@@ -30,77 +30,54 @@
<a class="jxr_linenumber" name="L22" href="#L22">22</a>
<a class="jxr_linenumber" name="L23" href="#L23">23</a> <em class="jxr_javadoccomment">/**</em>
<a class="jxr_linenumber" name="L24" href="#L24">24</a> <em class="jxr_javadoccomment"> * A utility for logging formatted messages to the console.</em>
-<a class="jxr_linenumber" name="L25" href="#L25">25</a> <em class="jxr_javadoccomment"> * Uses the {@link Json5} marshaller for serializing objects so any</em>
-<a class="jxr_linenumber" name="L26" href="#L26">26</a> <em class="jxr_javadoccomment"> * POJOs can be used as format arguments.</em>
-<a class="jxr_linenumber" name="L27" href="#L27">27</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L28" href="#L28">28</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a name="Console" href="../../../../../org/apache/juneau/common/utils/Console.html#Console">Console</a> {
-<a class="jxr_linenumber" name="L29" href="#L29">29</a>
-<a class="jxr_linenumber" name="L30" href="#L30">30</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L31" href="#L31">31</a> <em class="jxr_javadoccomment"> * Prints a message with arguments to {@link System#err}.</em>
-<a class="jxr_linenumber" name="L32" href="#L32">32</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L33" href="#L33">33</a> <em class="jxr_javadoccomment"> * <p></em>
-<a class="jxr_linenumber" name="L34" href="#L34">34</a> <em class="jxr_javadoccomment"> * Arguments are automatically converted to strings using the {@link Json5} marshaller.</em>
-<a class="jxr_linenumber" name="L35" href="#L35">35</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L36" href="#L36">36</a> <em class="jxr_javadoccomment"> * <p></em>
-<a class="jxr_linenumber" name="L37" href="#L37">37</a> <em class="jxr_javadoccomment"> * Useful for debug messages.</em>
-<a class="jxr_linenumber" name="L38" href="#L38">38</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L39" href="#L39">39</a> <em class="jxr_javadoccomment"> * <h5 class='figure'>Example:</h5></em>
-<a class="jxr_linenumber" name="L40" href="#L40">40</a> <em class="jxr_javadoccomment"> * <p class='bjava'></em>
-<a class="jxr_linenumber" name="L41" href="#L41">41</a> <em class="jxr_javadoccomment"> * Console.<jsm>err</jsm>(<js>"myPojo={0}"</js>, <jv>myPojo</jv>);</em>
-<a class="jxr_linenumber" name="L42" href="#L42">42</a> <em class="jxr_javadoccomment"> * </p></em>
-<a class="jxr_linenumber" name="L43" href="#L43">43</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L44" href="#L44">44</a> <em class="jxr_javadoccomment"> * @param msg The {@link MessageFormat}-styled message.</em>
-<a class="jxr_linenumber" name="L45" href="#L45">45</a> <em class="jxr_javadoccomment"> * @param args The arguments sent to the the formatter after running them through the {@link Json5} marshaller.</em>
-<a class="jxr_linenumber" name="L46" href="#L46">46</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L47" href="#L47">47</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">void</strong> err(String msg, Object...args) {
-<a class="jxr_linenumber" name="L48" href="#L48">48</a> System.err.println(format(msg, args)); <em class="jxr_comment">// NOT DEBUG</em>
-<a class="jxr_linenumber" name="L49" href="#L49">49</a> }
-<a class="jxr_linenumber" name="L50" href="#L50">50</a>
-<a class="jxr_linenumber" name="L51" href="#L51">51</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L52" href="#L52">52</a> <em class="jxr_javadoccomment"> * Formats a message with arguments.</em>
-<a class="jxr_linenumber" name="L53" href="#L53">53</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L54" href="#L54">54</a> <em class="jxr_javadoccomment"> * <p></em>
-<a class="jxr_linenumber" name="L55" href="#L55">55</a> <em class="jxr_javadoccomment"> * Arguments are automatically converted to strings using the {@link Json5} marshaller.</em>
-<a class="jxr_linenumber" name="L56" href="#L56">56</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L57" href="#L57">57</a> <em class="jxr_javadoccomment"> * <p></em>
-<a class="jxr_linenumber" name="L58" href="#L58">58</a> <em class="jxr_javadoccomment"> * Useful for debug messages.</em>
-<a class="jxr_linenumber" name="L59" href="#L59">59</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L60" href="#L60">60</a> <em class="jxr_javadoccomment"> * <h5 class='figure'>Example:</h5></em>
-<a class="jxr_linenumber" name="L61" href="#L61">61</a> <em class="jxr_javadoccomment"> * <p class='bjava'></em>
-<a class="jxr_linenumber" name="L62" href="#L62">62</a> <em class="jxr_javadoccomment"> * String <jv>msg</jv> = Console.<jsm>format</jsm>(<js>"myPojo={0}"</js>, <jv>myPojo</jv>);</em>
-<a class="jxr_linenumber" name="L63" href="#L63">63</a> <em class="jxr_javadoccomment"> * </p></em>
-<a class="jxr_linenumber" name="L64" href="#L64">64</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L65" href="#L65">65</a> <em class="jxr_javadoccomment"> * @param msg The {@link MessageFormat}-styled message.</em>
-<a class="jxr_linenumber" name="L66" href="#L66">66</a> <em class="jxr_javadoccomment"> * @param args The arguments sent to the the formatter after running them through the {@link Json5} marshaller.</em>
-<a class="jxr_linenumber" name="L67" href="#L67">67</a> <em class="jxr_javadoccomment"> * @return This object.</em>
+<a class="jxr_linenumber" name="L25" href="#L25">25</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L26" href="#L26">26</a> <em class="jxr_javadoccomment"> * <p></em>
+<a class="jxr_linenumber" name="L27" href="#L27">27</a> <em class="jxr_javadoccomment"> * Uses {@link java.text.MessageFormat} for formatting messages with arguments.</em>
+<a class="jxr_linenumber" name="L28" href="#L28">28</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L29" href="#L29">29</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a name="Console" href="../../../../../org/apache/juneau/common/utils/Console.html#Console">Console</a> {
+<a class="jxr_linenumber" name="L30" href="#L30">30</a>
+<a class="jxr_linenumber" name="L31" href="#L31">31</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L32" href="#L32">32</a> <em class="jxr_javadoccomment"> * Prints a message with arguments to {@link System#err}.</em>
+<a class="jxr_linenumber" name="L33" href="#L33">33</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L34" href="#L34">34</a> <em class="jxr_javadoccomment"> * <p></em>
+<a class="jxr_linenumber" name="L35" href="#L35">35</a> <em class="jxr_javadoccomment"> * Arguments are formatted using {@link java.text.MessageFormat}.</em>
+<a class="jxr_linenumber" name="L36" href="#L36">36</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L37" href="#L37">37</a> <em class="jxr_javadoccomment"> * <p></em>
+<a class="jxr_linenumber" name="L38" href="#L38">38</a> <em class="jxr_javadoccomment"> * Useful for debug messages.</em>
+<a class="jxr_linenumber" name="L39" href="#L39">39</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L40" href="#L40">40</a> <em class="jxr_javadoccomment"> * <h5 class='figure'>Example:</h5></em>
+<a class="jxr_linenumber" name="L41" href="#L41">41</a> <em class="jxr_javadoccomment"> * <p class='bjava'></em>
+<a class="jxr_linenumber" name="L42" href="#L42">42</a> <em class="jxr_javadoccomment"> * Console.<jsm>err</jsm>(<js>"myPojo={0}"</js>, <jv>myPojo</jv>);</em>
+<a class="jxr_linenumber" name="L43" href="#L43">43</a> <em class="jxr_javadoccomment"> * </p></em>
+<a class="jxr_linenumber" name="L44" href="#L44">44</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L45" href="#L45">45</a> <em class="jxr_javadoccomment"> * @param msg The {@link MessageFormat}-styled message.</em>
+<a class="jxr_linenumber" name="L46" href="#L46">46</a> <em class="jxr_javadoccomment"> * @param args The arguments sent to the formatter.</em>
+<a class="jxr_linenumber" name="L47" href="#L47">47</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L48" href="#L48">48</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">void</strong> err(String msg, Object...args) {
+<a class="jxr_linenumber" name="L49" href="#L49">49</a> System.err.println(f(msg, args)); <em class="jxr_comment">// NOT DEBUG</em>
+<a class="jxr_linenumber" name="L50" href="#L50">50</a> }
+<a class="jxr_linenumber" name="L51" href="#L51">51</a>
+<a class="jxr_linenumber" name="L52" href="#L52">52</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L53" href="#L53">53</a> <em class="jxr_javadoccomment"> * Prints a message with arguments to {@link System#out}.</em>
+<a class="jxr_linenumber" name="L54" href="#L54">54</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L55" href="#L55">55</a> <em class="jxr_javadoccomment"> * <p></em>
+<a class="jxr_linenumber" name="L56" href="#L56">56</a> <em class="jxr_javadoccomment"> * Arguments are formatted using {@link java.text.MessageFormat}.</em>
+<a class="jxr_linenumber" name="L57" href="#L57">57</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L58" href="#L58">58</a> <em class="jxr_javadoccomment"> * <p></em>
+<a class="jxr_linenumber" name="L59" href="#L59">59</a> <em class="jxr_javadoccomment"> * Useful for debug messages.</em>
+<a class="jxr_linenumber" name="L60" href="#L60">60</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L61" href="#L61">61</a> <em class="jxr_javadoccomment"> * <h5 class='figure'>Example:</h5></em>
+<a class="jxr_linenumber" name="L62" href="#L62">62</a> <em class="jxr_javadoccomment"> * <p class='bjava'></em>
+<a class="jxr_linenumber" name="L63" href="#L63">63</a> <em class="jxr_javadoccomment"> * Console.<jsm>out</jsm>(<js>"myPojo={0}"</js>, <jv>myPojo</jv>);</em>
+<a class="jxr_linenumber" name="L64" href="#L64">64</a> <em class="jxr_javadoccomment"> * </p></em>
+<a class="jxr_linenumber" name="L65" href="#L65">65</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L66" href="#L66">66</a> <em class="jxr_javadoccomment"> * @param msg The {@link MessageFormat}-styled message.</em>
+<a class="jxr_linenumber" name="L67" href="#L67">67</a> <em class="jxr_javadoccomment"> * @param args The arguments sent to the formatter.</em>
<a class="jxr_linenumber" name="L68" href="#L68">68</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L69" href="#L69">69</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> String format(String msg, Object...args) {
-<a class="jxr_linenumber" name="L70" href="#L70">70</a> <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">int</strong> i = 0; i < args.length; i++)
-<a class="jxr_linenumber" name="L71" href="#L71">71</a> args[i] = s(args[i]);
-<a class="jxr_linenumber" name="L72" href="#L72">72</a> <strong class="jxr_keyword">return</strong> MessageFormat.format(msg, args);
-<a class="jxr_linenumber" name="L73" href="#L73">73</a> }
-<a class="jxr_linenumber" name="L74" href="#L74">74</a>
-<a class="jxr_linenumber" name="L75" href="#L75">75</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L76" href="#L76">76</a> <em class="jxr_javadoccomment"> * Prints a message with arguments to {@link System#out}.</em>
-<a class="jxr_linenumber" name="L77" href="#L77">77</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L78" href="#L78">78</a> <em class="jxr_javadoccomment"> * <p></em>
-<a class="jxr_linenumber" name="L79" href="#L79">79</a> <em class="jxr_javadoccomment"> * Arguments are automatically converted to strings using the {@link Json5} marshaller.</em>
-<a class="jxr_linenumber" name="L80" href="#L80">80</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L81" href="#L81">81</a> <em class="jxr_javadoccomment"> * <p></em>
-<a class="jxr_linenumber" name="L82" href="#L82">82</a> <em class="jxr_javadoccomment"> * Useful for debug messages.</em>
-<a class="jxr_linenumber" name="L83" href="#L83">83</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L84" href="#L84">84</a> <em class="jxr_javadoccomment"> * <h5 class='figure'>Example:</h5></em>
-<a class="jxr_linenumber" name="L85" href="#L85">85</a> <em class="jxr_javadoccomment"> * <p class='bjava'></em>
-<a class="jxr_linenumber" name="L86" href="#L86">86</a> <em class="jxr_javadoccomment"> * Console.<jsm>out</jsm>(<js>"myPojo={0}"</js>, <jv>myPojo</jv>);</em>
-<a class="jxr_linenumber" name="L87" href="#L87">87</a> <em class="jxr_javadoccomment"> * </p></em>
-<a class="jxr_linenumber" name="L88" href="#L88">88</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L89" href="#L89">89</a> <em class="jxr_javadoccomment"> * @param msg The {@link MessageFormat}-styled message.</em>
-<a class="jxr_linenumber" name="L90" href="#L90">90</a> <em class="jxr_javadoccomment"> * @param args The arguments sent to the the formatter after running them through the {@link Json5} marshaller.</em>
-<a class="jxr_linenumber" name="L91" href="#L91">91</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L92" href="#L92">92</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">void</strong> out(String msg, Object...args) {
-<a class="jxr_linenumber" name="L93" href="#L93">93</a> System.out.println(format(msg, args));
-<a class="jxr_linenumber" name="L94" href="#L94">94</a> }
-<a class="jxr_linenumber" name="L95" href="#L95">95</a> }
+<a class="jxr_linenumber" name="L69" href="#L69">69</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">void</strong> out(String msg, Object...args) {
+<a class="jxr_linenumber" name="L70" href="#L70">70</a> System.out.println(f(msg, args));
+<a class="jxr_linenumber" name="L71" href="#L71">71</a> }
+<a class="jxr_linenumber" name="L72" href="#L72">72</a> }
</pre>
<hr/>
<div id="footer">© 2016–2025 <a href="https://www.apache.org/">The Apache Software Foundation</a></div>
diff --git a/site/xref/org/apache/juneau/common/utils/ResourceBundleUtils.html b/site/xref/org/apache/juneau/common/utils/ResourceBundleUtils.html
index eb6c6c11a3..65e2605d01 100644
--- a/site/xref/org/apache/juneau/common/utils/ResourceBundleUtils.html
+++ b/site/xref/org/apache/juneau/common/utils/ResourceBundleUtils.html
@@ -35,40 +35,21 @@
<a class="jxr_linenumber" name="L27" href="#L27">27</a> <em class="jxr_javadoccomment"> */</em>
<a class="jxr_linenumber" name="L28" href="#L28">28</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a name="ResourceBundleUtils" href="../../../../../org/apache/juneau/common/utils/ResourceBundleUtils.html#ResourceBundleUtils">ResourceBundleUtils</a> {
<a class="jxr_linenumber" name="L29" href="#L29">29</a>
-<a class="jxr_linenumber" name="L30" href="#L30">30</a> <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> ResourceBundle EMPTY = <strong class="jxr_keyword">new</strong> ResourceBundle() {
-<a class="jxr_linenumber" name="L31" href="#L31">31</a> @Override
-<a class="jxr_linenumber" name="L32" href="#L32">32</a> <strong class="jxr_keyword">public</strong> Enumeration<String> getKeys() { <strong class="jxr_keyword">return</strong> Collections.emptyEnumeration(); }
-<a class="jxr_linenumber" name="L33" href="#L33">33</a>
-<a class="jxr_linenumber" name="L34" href="#L34">34</a> @Override
-<a class="jxr_linenumber" name="L35" href="#L35">35</a> <strong class="jxr_keyword">protected</strong> Object handleGetObject(String key) {
-<a class="jxr_linenumber" name="L36" href="#L36">36</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="L37" href="#L37">37</a> }
-<a class="jxr_linenumber" name="L38" href="#L38">38</a> };
-<a class="jxr_linenumber" name="L39" href="#L39">39</a>
-<a class="jxr_linenumber" name="L40" href="#L40">40</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L41" href="#L41">41</a> <em class="jxr_javadoccomment"> * Returns an empty resource bundle.</em>
-<a class="jxr_linenumber" name="L42" href="#L42">42</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L43" href="#L43">43</a> <em class="jxr_javadoccomment"> * @return An empty resource bundle.</em>
-<a class="jxr_linenumber" name="L44" href="#L44">44</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L45" href="#L45">45</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> ResourceBundle empty() {
-<a class="jxr_linenumber" name="L46" href="#L46">46</a> <strong class="jxr_keyword">return</strong> EMPTY;
-<a class="jxr_linenumber" name="L47" href="#L47">47</a> }
-<a class="jxr_linenumber" name="L48" href="#L48">48</a>
-<a class="jxr_linenumber" name="L49" href="#L49">49</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L50" href="#L50">50</a> <em class="jxr_javadoccomment"> * Same as {@link ResourceBundle#getBundle(String, Locale, ClassLoader)} but never throws a {@link MissingResourceException}.</em>
-<a class="jxr_linenumber" name="L51" href="#L51">51</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L52" href="#L52">52</a> <em class="jxr_javadoccomment"> * @param baseName The base name of the resource bundle, a fully qualified class name.</em>
-<a class="jxr_linenumber" name="L53" href="#L53">53</a> <em class="jxr_javadoccomment"> * @param locale The locale for which a resource bundle is desired.</em>
-<a class="jxr_linenumber" name="L54" href="#L54">54</a> <em class="jxr_javadoccomment"> * @param loader The class loader from which to load the resource bundle.</em>
-<a class="jxr_linenumber" name="L55" href="#L55">55</a> <em class="jxr_javadoccomment"> * @return The matching resource bundle, or <jk>null</jk> if it could not be found.</em>
-<a class="jxr_linenumber" name="L56" href="#L56">56</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L57" href="#L57">57</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> ResourceBundle findBundle(String baseName, Locale locale, ClassLoader loader) {
-<a class="jxr_linenumber" name="L58" href="#L58">58</a> <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="L59" href="#L59">59</a> <strong class="jxr_keyword">return</strong> ResourceBundle.getBundle(baseName, locale, loader);
-<a class="jxr_linenumber" name="L60" href="#L60">60</a> } <strong class="jxr_keyword">catch</strong> (@SuppressWarnings(<span class="jxr_string">"unused"</span>) MissingResourceException e) {}
-<a class="jxr_linenumber" name="L61" href="#L61">61</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="L62" href="#L62">62</a> }
-<a class="jxr_linenumber" name="L63" href="#L63">63</a> }
+<a class="jxr_linenumber" name="L30" href="#L30">30</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L31" href="#L31">31</a> <em class="jxr_javadoccomment"> * Same as {@link ResourceBundle#getBundle(String, Locale, ClassLoader)} but never throws a {@link MissingResourceException}.</em>
+<a class="jxr_linenumber" name="L32" href="#L32">32</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L33" href="#L33">33</a> <em class="jxr_javadoccomment"> * @param baseName The base name of the resource bundle, a fully qualified class name.</em>
+<a class="jxr_linenumber" name="L34" href="#L34">34</a> <em class="jxr_javadoccomment"> * @param locale The locale for which a resource bundle is desired.</em>
+<a class="jxr_linenumber" name="L35" href="#L35">35</a> <em class="jxr_javadoccomment"> * @param loader The class loader from which to load the resource bundle.</em>
+<a class="jxr_linenumber" name="L36" href="#L36">36</a> <em class="jxr_javadoccomment"> * @return The matching resource bundle, or <jk>null</jk> if it could not be found.</em>
+<a class="jxr_linenumber" name="L37" href="#L37">37</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L38" href="#L38">38</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> ResourceBundle findBundle(String baseName, Locale locale, ClassLoader loader) {
+<a class="jxr_linenumber" name="L39" href="#L39">39</a> <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="L40" href="#L40">40</a> <strong class="jxr_keyword">return</strong> ResourceBundle.getBundle(baseName, locale, loader);
+<a class="jxr_linenumber" name="L41" href="#L41">41</a> } <strong class="jxr_keyword">catch</strong> (@SuppressWarnings(<span class="jxr_string">"unused"</span>) MissingResourceException e) {}
+<a class="jxr_linenumber" name="L42" href="#L42">42</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="L43" href="#L43">43</a> }
+<a class="jxr_linenumber" name="L44" href="#L44">44</a> }
</pre>
<hr/>
<div id="footer">© 2016–2025 <a href="https://www.apache.org/">The Apache Software Foundation</a></div>
diff --git a/site/xref/org/apache/juneau/common/utils/Utils.html b/site/xref/org/apache/juneau/common/utils/Utils.html
index 7ab7b1a54d..0a4aa562a4 100644
--- a/site/xref/org/apache/juneau/common/utils/Utils.html
+++ b/site/xref/org/apache/juneau/common/utils/Utils.html
@@ -395,969 +395,1014 @@
<a class="jxr_linenumber" name="L387" href="#L387">387</a> }
<a class="jxr_linenumber" name="L388" href="#L388">388</a>
<a class="jxr_linenumber" name="L389" href="#L389">389</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L390" href="#L390">390</a> <em class="jxr_javadoccomment"> * Tests two strings for case-insensitive equality, but gracefully handles nulls.</em>
+<a class="jxr_linenumber" name="L390" href="#L390">390</a> <em class="jxr_javadoccomment"> * Tests two annotations for equality using the criteria presented in the {@link java.lang.annotation.Annotation#equals(Object)} API docs.</em>
<a class="jxr_linenumber" name="L391" href="#L391">391</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L392" href="#L392">392</a> <em class="jxr_javadoccomment"> * @param s1 String 1.</em>
-<a class="jxr_linenumber" name="L393" href="#L393">393</a> <em class="jxr_javadoccomment"> * @param s2 String 2.</em>
-<a class="jxr_linenumber" name="L394" href="#L394">394</a> <em class="jxr_javadoccomment"> * @return <jk>true</jk> if the strings are equal.</em>
-<a class="jxr_linenumber" name="L395" href="#L395">395</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L396" href="#L396">396</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> eqic(String s1, String s2) {
-<a class="jxr_linenumber" name="L397" href="#L397">397</a> <strong class="jxr_keyword">if</strong> (s1 == <strong class="jxr_keyword">null</strong>)
-<a class="jxr_linenumber" name="L398" href="#L398">398</a> <strong class="jxr_keyword">return</strong> s2 == <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="L399" href="#L399">399</a> <strong class="jxr_keyword">if</strong> (s2 == <strong class="jxr_keyword">null</strong>)
-<a class="jxr_linenumber" name="L400" href="#L400">400</a> <strong class="jxr_keyword">return</strong> false;
-<a class="jxr_linenumber" name="L401" href="#L401">401</a> <strong class="jxr_keyword">return</strong> s1.equalsIgnoreCase(s2);
-<a class="jxr_linenumber" name="L402" href="#L402">402</a> }
-<a class="jxr_linenumber" name="L403" href="#L403">403</a>
-<a class="jxr_linenumber" name="L404" href="#L404">404</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L405" href="#L405">405</a> <em class="jxr_javadoccomment"> * Same as MessageFormat.format().</em>
-<a class="jxr_linenumber" name="L406" href="#L406">406</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L407" href="#L407">407</a> <em class="jxr_javadoccomment"> * @param pattern The message pattern.</em>
-<a class="jxr_linenumber" name="L408" href="#L408">408</a> <em class="jxr_javadoccomment"> * @param args The arguments to substitute into the pattern.</em>
-<a class="jxr_linenumber" name="L409" href="#L409">409</a> <em class="jxr_javadoccomment"> * @return The formatted string.</em>
-<a class="jxr_linenumber" name="L410" href="#L410">410</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L411" href="#L411">411</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> String f(String pattern, Object...args) {
-<a class="jxr_linenumber" name="L412" href="#L412">412</a> <strong class="jxr_keyword">if</strong> (args.length == 0)
-<a class="jxr_linenumber" name="L413" href="#L413">413</a> <strong class="jxr_keyword">return</strong> pattern;
-<a class="jxr_linenumber" name="L414" href="#L414">414</a> <strong class="jxr_keyword">return</strong> MessageFormat.format(pattern, args);
-<a class="jxr_linenumber" name="L415" href="#L415">415</a> }
-<a class="jxr_linenumber" name="L416" href="#L416">416</a>
-<a class="jxr_linenumber" name="L417" href="#L417">417</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L418" href="#L418">418</a> <em class="jxr_javadoccomment"> * Returns the first non-null value in the specified array</em>
-<a class="jxr_linenumber" name="L419" href="#L419">419</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L420" href="#L420">420</a> <em class="jxr_javadoccomment"> * @param <T> The value types.</em>
-<a class="jxr_linenumber" name="L421" href="#L421">421</a> <em class="jxr_javadoccomment"> * @param t The values to check.</em>
-<a class="jxr_linenumber" name="L422" href="#L422">422</a> <em class="jxr_javadoccomment"> * @return The first non-null value, or <jk>null</jk> if the array is null or empty or contains only <jk>null</jk> values.</em>
-<a class="jxr_linenumber" name="L423" href="#L423">423</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L424" href="#L424">424</a> @SafeVarargs
-<a class="jxr_linenumber" name="L425" href="#L425">425</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <T> T firstNonNull(T...t) {
-<a class="jxr_linenumber" name="L426" href="#L426">426</a> <strong class="jxr_keyword">if</strong> (nn(t))
-<a class="jxr_linenumber" name="L427" href="#L427">427</a> <strong class="jxr_keyword">for</strong> (T tt : t)
-<a class="jxr_linenumber" name="L428" href="#L428">428</a> <strong class="jxr_keyword">if</strong> (nn(tt))
-<a class="jxr_linenumber" name="L429" href="#L429">429</a> <strong class="jxr_keyword">return</strong> tt;
-<a class="jxr_linenumber" name="L430" href="#L430">430</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="L431" href="#L431">431</a> }
-<a class="jxr_linenumber" name="L432" href="#L432">432</a>
-<a class="jxr_linenumber" name="L433" href="#L433">433</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L434" href="#L434">434</a> <em class="jxr_javadoccomment"> * Converts a string containing glob-style wildcard characters to a regular expression {@link java.util.regex.Pattern}.</em>
-<a class="jxr_linenumber" name="L435" href="#L435">435</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L436" href="#L436">436</a> <em class="jxr_javadoccomment"> * <p>This method converts glob-style patterns to regular expressions with the following mappings:</em>
-<a class="jxr_linenumber" name="L437" href="#L437">437</a> <em class="jxr_javadoccomment"> * <ul></em>
-<a class="jxr_linenumber" name="L438" href="#L438">438</a> <em class="jxr_javadoccomment"> * <li>{@code *} matches any sequence of characters (including none)</li></em>
-<a class="jxr_linenumber" name="L439" href="#L439">439</a> <em class="jxr_javadoccomment"> * <li>{@code ?} matches exactly one character</li></em>
-<a class="jxr_linenumber" name="L440" href="#L440">440</a> <em class="jxr_javadoccomment"> * <li>All other characters are treated literally</li></em>
-<a class="jxr_linenumber" name="L441" href="#L441">441</a> <em class="jxr_javadoccomment"> * </ul></em>
-<a class="jxr_linenumber" name="L442" href="#L442">442</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L443" href="#L443">443</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Example:</h5></em>
-<a class="jxr_linenumber" name="L444" href="#L444">444</a> <em class="jxr_javadoccomment"> * <p class='bjava'></em>
-<a class="jxr_linenumber" name="L445" href="#L445">445</a> <em class="jxr_javadoccomment"> * <jk>var</jk> <jv>pattern</jv> = <jsm>getGlobMatchPattern</jsm>(<js>"user_*_temp"</js>);</em>
-<a class="jxr_linenumber" name="L446" href="#L446">446</a> <em class="jxr_javadoccomment"> * <jk>boolean</jk> <jv>matches</jv> = <jv>pattern</jv>.matcher(<js>"user_alice_temp"</js>).matches(); <jc>// true</jc></em>
-<a class="jxr_linenumber" name="L447" href="#L447">447</a> <em class="jxr_javadoccomment"> * <jv>matches</jv> = <jv>pattern</jv>.matcher(<js>"user_bob_temp"</js>).matches(); <jc>// true</jc></em>
-<a class="jxr_linenumber" name="L448" href="#L448">448</a> <em class="jxr_javadoccomment"> * <jv>matches</jv> = <jv>pattern</jv>.matcher(<js>"admin_alice_temp"</js>).matches(); <jc>// false</jc></em>
-<a class="jxr_linenumber" name="L449" href="#L449">449</a> <em class="jxr_javadoccomment"> * </p></em>
-<a class="jxr_linenumber" name="L450" href="#L450">450</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L451" href="#L451">451</a> <em class="jxr_javadoccomment"> * @param s The glob-style wildcard pattern string.</em>
-<a class="jxr_linenumber" name="L452" href="#L452">452</a> <em class="jxr_javadoccomment"> * @return A compiled {@link java.util.regex.Pattern} object, or <jk>null</jk> if the input string is <jk>null</jk>.</em>
-<a class="jxr_linenumber" name="L453" href="#L453">453</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L454" href="#L454">454</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> java.util.regex.Pattern getGlobMatchPattern(String s) {
-<a class="jxr_linenumber" name="L455" href="#L455">455</a> <strong class="jxr_keyword">return</strong> getGlobMatchPattern(s, 0);
-<a class="jxr_linenumber" name="L456" href="#L456">456</a> }
-<a class="jxr_linenumber" name="L457" href="#L457">457</a>
-<a class="jxr_linenumber" name="L458" href="#L458">458</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L459" href="#L459">459</a> <em class="jxr_javadoccomment"> * Converts a string containing glob-style wildcard characters to a regular expression {@link java.util.regex.Pattern} with flags.</em>
-<a class="jxr_linenumber" name="L460" href="#L460">460</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L461" href="#L461">461</a> <em class="jxr_javadoccomment"> * <p>This method converts glob-style patterns to regular expressions with the following mappings:</em>
-<a class="jxr_linenumber" name="L462" href="#L462">462</a> <em class="jxr_javadoccomment"> * <ul></em>
-<a class="jxr_linenumber" name="L463" href="#L463">463</a> <em class="jxr_javadoccomment"> * <li>{@code *} matches any sequence of characters (including none)</li></em>
-<a class="jxr_linenumber" name="L464" href="#L464">464</a> <em class="jxr_javadoccomment"> * <li>{@code ?} matches exactly one character</li></em>
-<a class="jxr_linenumber" name="L465" href="#L465">465</a> <em class="jxr_javadoccomment"> * <li>All other characters are treated literally</li></em>
-<a class="jxr_linenumber" name="L466" href="#L466">466</a> <em class="jxr_javadoccomment"> * </ul></em>
-<a class="jxr_linenumber" name="L467" href="#L467">467</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L468" href="#L468">468</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Example:</h5></em>
-<a class="jxr_linenumber" name="L469" href="#L469">469</a> <em class="jxr_javadoccomment"> * <p class='bjava'></em>
-<a class="jxr_linenumber" name="L470" href="#L470">470</a> <em class="jxr_javadoccomment"> * <jc>// Case-insensitive matching</jc></em>
-<a class="jxr_linenumber" name="L471" href="#L471">471</a> <em class="jxr_javadoccomment"> * <jk>var</jk> <jv>pattern</jv> = <jsm>getGlobMatchPattern</jsm>(<js>"USER_*"</js>, Pattern.<jsf>CASE_INSENSITIVE</jsf>);</em>
-<a class="jxr_linenumber" name="L472" href="#L472">472</a> <em class="jxr_javadoccomment"> * <jk>boolean</jk> <jv>matches</jv> = <jv>pattern</jv>.matcher(<js>"user_alice"</js>).matches(); <jc>// true</jc></em>
-<a class="jxr_linenumber" name="L473" href="#L473">473</a> <em class="jxr_javadoccomment"> * </p></em>
-<a class="jxr_linenumber" name="L474" href="#L474">474</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L475" href="#L475">475</a> <em class="jxr_javadoccomment"> * @param s The glob-style wildcard pattern string.</em>
-<a class="jxr_linenumber" name="L476" href="#L476">476</a> <em class="jxr_javadoccomment"> * @param flags Regular expression flags (see {@link java.util.regex.Pattern} constants).</em>
-<a class="jxr_linenumber" name="L477" href="#L477">477</a> <em class="jxr_javadoccomment"> * @return A compiled {@link java.util.regex.Pattern} object, or <jk>null</jk> if the input string is <jk>null</jk>.</em>
-<a class="jxr_linenumber" name="L478" href="#L478">478</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L479" href="#L479">479</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> java.util.regex.Pattern getGlobMatchPattern(String s, <strong class="jxr_keyword">int</strong> flags) {
-<a class="jxr_linenumber" name="L480" href="#L480">480</a> <strong class="jxr_keyword">if</strong> (s == <strong class="jxr_keyword">null</strong>)
-<a class="jxr_linenumber" name="L481" href="#L481">481</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="L482" href="#L482">482</a> <strong class="jxr_keyword">var</strong> sb = <strong class="jxr_keyword">new</strong> StringBuilder();
-<a class="jxr_linenumber" name="L483" href="#L483">483</a> sb.append(<span class="jxr_string">"\\Q"</span>);
-<a class="jxr_linenumber" name="L484" href="#L484">484</a> <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">var</strong> i = 0; i < s.length(); i++) {
-<a class="jxr_linenumber" name="L485" href="#L485">485</a> <strong class="jxr_keyword">var</strong> c = s.charAt(i);
-<a class="jxr_linenumber" name="L486" href="#L486">486</a> <strong class="jxr_keyword">if</strong> (c == '*')
-<a class="jxr_linenumber" name="L487" href="#L487">487</a> sb.append(<span class="jxr_string">"\\E"</span>).append(<span class="jxr_string">".*"</span>).append(<span class="jxr_string">"\\Q"</span>);
-<a class="jxr_linenumber" name="L488" href="#L488">488</a> <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (c == '?')
-<a class="jxr_linenumber" name="L489" href="#L489">489</a> sb.append(<span class="jxr_string">"\\E"</span>).append(<span class="jxr_string">"."</span>).append(<span class="jxr_string">"\\Q"</span>);
-<a class="jxr_linenumber" name="L490" href="#L490">490</a> <strong class="jxr_keyword">else</strong>
-<a class="jxr_linenumber" name="L491" href="#L491">491</a> sb.append(c);
-<a class="jxr_linenumber" name="L492" href="#L492">492</a> }
-<a class="jxr_linenumber" name="L493" href="#L493">493</a> sb.append(<span class="jxr_string">"\\E"</span>);
-<a class="jxr_linenumber" name="L494" href="#L494">494</a> <strong class="jxr_keyword">return</strong> java.util.regex.Pattern.compile(sb.toString(), flags);
-<a class="jxr_linenumber" name="L495" href="#L495">495</a> }
-<a class="jxr_linenumber" name="L496" href="#L496">496</a>
-<a class="jxr_linenumber" name="L497" href="#L497">497</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L498" href="#L498">498</a> <em class="jxr_javadoccomment"> * Creates a formatted string supplier with message arguments for lazy evaluation.</em>
-<a class="jxr_linenumber" name="L499" href="#L499">499</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L500" href="#L500">500</a> <em class="jxr_javadoccomment"> * <p>This method returns a {@link Supplier} that formats the string pattern with the provided arguments</em>
-<a class="jxr_linenumber" name="L501" href="#L501">501</a> <em class="jxr_javadoccomment"> * only when the supplier's {@code get()} method is called. This is useful for expensive string formatting</em>
-<a class="jxr_linenumber" name="L502" href="#L502">502</a> <em class="jxr_javadoccomment"> * operations that may not always be needed, such as error messages in assertions.</p></em>
-<a class="jxr_linenumber" name="L503" href="#L503">503</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L504" href="#L504">504</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Usage Examples:</h5></em>
-<a class="jxr_linenumber" name="L505" href="#L505">505</a> <em class="jxr_javadoccomment"> * <p class='bjava'></em>
-<a class="jxr_linenumber" name="L506" href="#L506">506</a> <em class="jxr_javadoccomment"> * <jc>// Lazy evaluation - string is only formatted if assertion fails</jc></em>
-<a class="jxr_linenumber" name="L507" href="#L507">507</a> <em class="jxr_javadoccomment"> * assertTrue(condition, fs(<js>"Expected {0} but got {1}"</js>, expected, actual));</em>
-<a class="jxr_linenumber" name="L508" href="#L508">508</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L509" href="#L509">509</a> <em class="jxr_javadoccomment"> * <jc>// Can be used anywhere a Supplier&lt;String&gt; is expected</jc></em>
-<a class="jxr_linenumber" name="L510" href="#L510">510</a> <em class="jxr_javadoccomment"> * Supplier&lt;String&gt; <jv>messageSupplier</jv> = fs(<js>"Processing item {0} of {1}"</js>, i, total);</em>
-<a class="jxr_linenumber" name="L511" href="#L511">511</a> <em class="jxr_javadoccomment"> * </p></em>
-<a class="jxr_linenumber" name="L512" href="#L512">512</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L513" href="#L513">513</a> <em class="jxr_javadoccomment"> * @param pattern The message pattern using <js>{0}</js>, <js>{1}</js>, etc. placeholders.</em>
-<a class="jxr_linenumber" name="L514" href="#L514">514</a> <em class="jxr_javadoccomment"> * @param args The arguments to substitute into the pattern placeholders.</em>
-<a class="jxr_linenumber" name="L515" href="#L515">515</a> <em class="jxr_javadoccomment"> * @return A {@link Supplier} that will format the string when {@code get()} is called.</em>
-<a class="jxr_linenumber" name="L516" href="#L516">516</a> <em class="jxr_javadoccomment"> * @see StringUtils#format(String, Object...)</em>
-<a class="jxr_linenumber" name="L517" href="#L517">517</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L518" href="#L518">518</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> Supplier<String> fs(String pattern, Object...args) {
-<a class="jxr_linenumber" name="L519" href="#L519">519</a> <strong class="jxr_keyword">return</strong> () -> StringUtils.format(pattern, args);
-<a class="jxr_linenumber" name="L520" href="#L520">520</a> }
-<a class="jxr_linenumber" name="L521" href="#L521">521</a>
-<a class="jxr_linenumber" name="L522" href="#L522">522</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L523" href="#L523">523</a> <em class="jxr_javadoccomment"> * Shortcut for calling {@link Objects#hash(Object...)}.</em>
-<a class="jxr_linenumber" name="L524" href="#L524">524</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L525" href="#L525">525</a> <em class="jxr_javadoccomment"> * @param values The values to hash.</em>
-<a class="jxr_linenumber" name="L526" href="#L526">526</a> <em class="jxr_javadoccomment"> * @return A hash code value for the given values.</em>
-<a class="jxr_linenumber" name="L527" href="#L527">527</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L528" href="#L528">528</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong> hash(Object...values) {
-<a class="jxr_linenumber" name="L529" href="#L529">529</a> <strong class="jxr_keyword">return</strong> Objects.hash(values);
-<a class="jxr_linenumber" name="L530" href="#L530">530</a> }
-<a class="jxr_linenumber" name="L531" href="#L531">531</a>
-<a class="jxr_linenumber" name="L532" href="#L532">532</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L533" href="#L533">533</a> <em class="jxr_javadoccomment"> * Checks if the specified object is an array.</em>
-<a class="jxr_linenumber" name="L534" href="#L534">534</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L535" href="#L535">535</a> <em class="jxr_javadoccomment"> * @param o The object to check.</em>
-<a class="jxr_linenumber" name="L536" href="#L536">536</a> <em class="jxr_javadoccomment"> * @return <jk>true</jk> if the object is not <jk>null</jk> and is an array.</em>
-<a class="jxr_linenumber" name="L537" href="#L537">537</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L538" href="#L538">538</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> isArray(Object o) {
-<a class="jxr_linenumber" name="L539" href="#L539">539</a> <strong class="jxr_keyword">return</strong> nn(o) && o.getClass().isArray();
-<a class="jxr_linenumber" name="L540" href="#L540">540</a> }
-<a class="jxr_linenumber" name="L541" href="#L541">541</a>
-<a class="jxr_linenumber" name="L542" href="#L542">542</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L543" href="#L543">543</a> <em class="jxr_javadoccomment"> * Returns <jk>true</jk> if the specified object can be converted to a list.</em>
-<a class="jxr_linenumber" name="L544" href="#L544">544</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L545" href="#L545">545</a> <em class="jxr_javadoccomment"> * <p></em>
-<a class="jxr_linenumber" name="L546" href="#L546">546</a> <em class="jxr_javadoccomment"> * The following types are considered convertible:</em>
-<a class="jxr_linenumber" name="L547" href="#L547">547</a> <em class="jxr_javadoccomment"> * <ul></em>
-<a class="jxr_linenumber" name="L548" href="#L548">548</a> <em class="jxr_javadoccomment"> * <li>Collections</em>
-<a class="jxr_linenumber" name="L549" href="#L549">549</a> <em class="jxr_javadoccomment"> * <li>Iterables</em>
-<a class="jxr_linenumber" name="L550" href="#L550">550</a> <em class="jxr_javadoccomment"> * <li>Iterators</em>
-<a class="jxr_linenumber" name="L551" href="#L551">551</a> <em class="jxr_javadoccomment"> * <li>Enumerations</em>
-<a class="jxr_linenumber" name="L552" href="#L552">552</a> <em class="jxr_javadoccomment"> * <li>Streams</em>
-<a class="jxr_linenumber" name="L553" href="#L553">553</a> <em class="jxr_javadoccomment"> * <li>Maps</em>
-<a class="jxr_linenumber" name="L554" href="#L554">554</a> <em class="jxr_javadoccomment"> * <li>Optional</em>
-<a class="jxr_linenumber" name="L555" href="#L555">555</a> <em class="jxr_javadoccomment"> * <li>Arrays</em>
-<a class="jxr_linenumber" name="L556" href="#L556">556</a> <em class="jxr_javadoccomment"> * </ul></em>
+<a class="jxr_linenumber" name="L392" href="#L392">392</a> <em class="jxr_javadoccomment"> * <p></em>
+<a class="jxr_linenumber" name="L393" href="#L393">393</a> <em class="jxr_javadoccomment"> * This method delegates to {@link AnnotationUtils#equals(java.lang.annotation.Annotation, java.lang.annotation.Annotation)}</em>
+<a class="jxr_linenumber" name="L394" href="#L394">394</a> <em class="jxr_javadoccomment"> * to ensure proper annotation comparison according to the annotation equality contract.</em>
+<a class="jxr_linenumber" name="L395" href="#L395">395</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L396" href="#L396">396</a> <em class="jxr_javadoccomment"> * @param a1 Annotation 1.</em>
+<a class="jxr_linenumber" name="L397" href="#L397">397</a> <em class="jxr_javadoccomment"> * @param a2 Annotation 2.</em>
+<a class="jxr_linenumber" name="L398" href="#L398">398</a> <em class="jxr_javadoccomment"> * @return <jk>true</jk> if the two annotations are equal or both are <jk>null</jk>.</em>
+<a class="jxr_linenumber" name="L399" href="#L399">399</a> <em class="jxr_javadoccomment"> * @see AnnotationUtils#equals(java.lang.annotation.Annotation, java.lang.annotation.Annotation)</em>
+<a class="jxr_linenumber" name="L400" href="#L400">400</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L401" href="#L401">401</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> eq(java.lang.annotation.Annotation a1, java.lang.annotation.Annotation a2) {
+<a class="jxr_linenumber" name="L402" href="#L402">402</a> <strong class="jxr_keyword">return</strong> AnnotationUtils.equals(a1, a2);
+<a class="jxr_linenumber" name="L403" href="#L403">403</a> }
+<a class="jxr_linenumber" name="L404" href="#L404">404</a>
+<a class="jxr_linenumber" name="L405" href="#L405">405</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L406" href="#L406">406</a> <em class="jxr_javadoccomment"> * Tests two annotations for inequality using the criteria presented in the {@link java.lang.annotation.Annotation#equals(Object)} API docs.</em>
+<a class="jxr_linenumber" name="L407" href="#L407">407</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L408" href="#L408">408</a> <em class="jxr_javadoccomment"> * <p></em>
+<a class="jxr_linenumber" name="L409" href="#L409">409</a> <em class="jxr_javadoccomment"> * This method is the negation of {@link #eq(java.lang.annotation.Annotation, java.lang.annotation.Annotation)},</em>
+<a class="jxr_linenumber" name="L410" href="#L410">410</a> <em class="jxr_javadoccomment"> * which delegates to {@link AnnotationUtils#equals(java.lang.annotation.Annotation, java.lang.annotation.Annotation)}.</em>
+<a class="jxr_linenumber" name="L411" href="#L411">411</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L412" href="#L412">412</a> <em class="jxr_javadoccomment"> * @param a1 Annotation 1.</em>
+<a class="jxr_linenumber" name="L413" href="#L413">413</a> <em class="jxr_javadoccomment"> * @param a2 Annotation 2.</em>
+<a class="jxr_linenumber" name="L414" href="#L414">414</a> <em class="jxr_javadoccomment"> * @return <jk>true</jk> if the two annotations are not equal.</em>
+<a class="jxr_linenumber" name="L415" href="#L415">415</a> <em class="jxr_javadoccomment"> * @see #eq(java.lang.annotation.Annotation, java.lang.annotation.Annotation)</em>
+<a class="jxr_linenumber" name="L416" href="#L416">416</a> <em class="jxr_javadoccomment"> * @see AnnotationUtils#equals(java.lang.annotation.Annotation, java.lang.annotation.Annotation)</em>
+<a class="jxr_linenumber" name="L417" href="#L417">417</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L418" href="#L418">418</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> ne(java.lang.annotation.Annotation a1, java.lang.annotation.Annotation a2) {
+<a class="jxr_linenumber" name="L419" href="#L419">419</a> <strong class="jxr_keyword">return</strong> !eq(a1, a2);
+<a class="jxr_linenumber" name="L420" href="#L420">420</a> }
+<a class="jxr_linenumber" name="L421" href="#L421">421</a>
+<a class="jxr_linenumber" name="L422" href="#L422">422</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L423" href="#L423">423</a> <em class="jxr_javadoccomment"> * Tests two strings for case-insensitive equality, but gracefully handles nulls.</em>
+<a class="jxr_linenumber" name="L424" href="#L424">424</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L425" href="#L425">425</a> <em class="jxr_javadoccomment"> * @param s1 String 1.</em>
+<a class="jxr_linenumber" name="L426" href="#L426">426</a> <em class="jxr_javadoccomment"> * @param s2 String 2.</em>
+<a class="jxr_linenumber" name="L427" href="#L427">427</a> <em class="jxr_javadoccomment"> * @return <jk>true</jk> if the strings are equal.</em>
+<a class="jxr_linenumber" name="L428" href="#L428">428</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L429" href="#L429">429</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> eqic(String s1, String s2) {
+<a class="jxr_linenumber" name="L430" href="#L430">430</a> <strong class="jxr_keyword">if</strong> (s1 == <strong class="jxr_keyword">null</strong>)
+<a class="jxr_linenumber" name="L431" href="#L431">431</a> <strong class="jxr_keyword">return</strong> s2 == <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="L432" href="#L432">432</a> <strong class="jxr_keyword">if</strong> (s2 == <strong class="jxr_keyword">null</strong>)
+<a class="jxr_linenumber" name="L433" href="#L433">433</a> <strong class="jxr_keyword">return</strong> false;
+<a class="jxr_linenumber" name="L434" href="#L434">434</a> <strong class="jxr_keyword">return</strong> s1.equalsIgnoreCase(s2);
+<a class="jxr_linenumber" name="L435" href="#L435">435</a> }
+<a class="jxr_linenumber" name="L436" href="#L436">436</a>
+<a class="jxr_linenumber" name="L437" href="#L437">437</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L438" href="#L438">438</a> <em class="jxr_javadoccomment"> * Same as MessageFormat.format().</em>
+<a class="jxr_linenumber" name="L439" href="#L439">439</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L440" href="#L440">440</a> <em class="jxr_javadoccomment"> * @param pattern The message pattern.</em>
+<a class="jxr_linenumber" name="L441" href="#L441">441</a> <em class="jxr_javadoccomment"> * @param args The arguments to substitute into the pattern.</em>
+<a class="jxr_linenumber" name="L442" href="#L442">442</a> <em class="jxr_javadoccomment"> * @return The formatted string.</em>
+<a class="jxr_linenumber" name="L443" href="#L443">443</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L444" href="#L444">444</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> String f(String pattern, Object...args) {
+<a class="jxr_linenumber" name="L445" href="#L445">445</a> <strong class="jxr_keyword">if</strong> (args.length == 0)
+<a class="jxr_linenumber" name="L446" href="#L446">446</a> <strong class="jxr_keyword">return</strong> pattern;
+<a class="jxr_linenumber" name="L447" href="#L447">447</a> <strong class="jxr_keyword">return</strong> MessageFormat.format(pattern, args);
+<a class="jxr_linenumber" name="L448" href="#L448">448</a> }
+<a class="jxr_linenumber" name="L449" href="#L449">449</a>
+<a class="jxr_linenumber" name="L450" href="#L450">450</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L451" href="#L451">451</a> <em class="jxr_javadoccomment"> * Returns the first non-null value in the specified array</em>
+<a class="jxr_linenumber" name="L452" href="#L452">452</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L453" href="#L453">453</a> <em class="jxr_javadoccomment"> * @param <T> The value types.</em>
+<a class="jxr_linenumber" name="L454" href="#L454">454</a> <em class="jxr_javadoccomment"> * @param t The values to check.</em>
+<a class="jxr_linenumber" name="L455" href="#L455">455</a> <em class="jxr_javadoccomment"> * @return The first non-null value, or <jk>null</jk> if the array is null or empty or contains only <jk>null</jk> values.</em>
+<a class="jxr_linenumber" name="L456" href="#L456">456</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L457" href="#L457">457</a> @SafeVarargs
+<a class="jxr_linenumber" name="L458" href="#L458">458</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <T> T firstNonNull(T...t) {
+<a class="jxr_linenumber" name="L459" href="#L459">459</a> <strong class="jxr_keyword">if</strong> (nn(t))
+<a class="jxr_linenumber" name="L460" href="#L460">460</a> <strong class="jxr_keyword">for</strong> (T tt : t)
+<a class="jxr_linenumber" name="L461" href="#L461">461</a> <strong class="jxr_keyword">if</strong> (nn(tt))
+<a class="jxr_linenumber" name="L462" href="#L462">462</a> <strong class="jxr_keyword">return</strong> tt;
+<a class="jxr_linenumber" name="L463" href="#L463">463</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="L464" href="#L464">464</a> }
+<a class="jxr_linenumber" name="L465" href="#L465">465</a>
+<a class="jxr_linenumber" name="L466" href="#L466">466</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L467" href="#L467">467</a> <em class="jxr_javadoccomment"> * Converts a string containing glob-style wildcard characters to a regular expression {@link java.util.regex.Pattern}.</em>
+<a class="jxr_linenumber" name="L468" href="#L468">468</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L469" href="#L469">469</a> <em class="jxr_javadoccomment"> * <p>This method converts glob-style patterns to regular expressions with the following mappings:</em>
+<a class="jxr_linenumber" name="L470" href="#L470">470</a> <em class="jxr_javadoccomment"> * <ul></em>
+<a class="jxr_linenumber" name="L471" href="#L471">471</a> <em class="jxr_javadoccomment"> * <li>{@code *} matches any sequence of characters (including none)</li></em>
+<a class="jxr_linenumber" name="L472" href="#L472">472</a> <em class="jxr_javadoccomment"> * <li>{@code ?} matches exactly one character</li></em>
+<a class="jxr_linenumber" name="L473" href="#L473">473</a> <em class="jxr_javadoccomment"> * <li>All other characters are treated literally</li></em>
+<a class="jxr_linenumber" name="L474" href="#L474">474</a> <em class="jxr_javadoccomment"> * </ul></em>
+<a class="jxr_linenumber" name="L475" href="#L475">475</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L476" href="#L476">476</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Example:</h5></em>
+<a class="jxr_linenumber" name="L477" href="#L477">477</a> <em class="jxr_javadoccomment"> * <p class='bjava'></em>
+<a class="jxr_linenumber" name="L478" href="#L478">478</a> <em class="jxr_javadoccomment"> * <jk>var</jk> <jv>pattern</jv> = <jsm>getGlobMatchPattern</jsm>(<js>"user_*_temp"</js>);</em>
+<a class="jxr_linenumber" name="L479" href="#L479">479</a> <em class="jxr_javadoccomment"> * <jk>boolean</jk> <jv>matches</jv> = <jv>pattern</jv>.matcher(<js>"user_alice_temp"</js>).matches(); <jc>// true</jc></em>
+<a class="jxr_linenumber" name="L480" href="#L480">480</a> <em class="jxr_javadoccomment"> * <jv>matches</jv> = <jv>pattern</jv>.matcher(<js>"user_bob_temp"</js>).matches(); <jc>// true</jc></em>
+<a class="jxr_linenumber" name="L481" href="#L481">481</a> <em class="jxr_javadoccomment"> * <jv>matches</jv> = <jv>pattern</jv>.matcher(<js>"admin_alice_temp"</js>).matches(); <jc>// false</jc></em>
+<a class="jxr_linenumber" name="L482" href="#L482">482</a> <em class="jxr_javadoccomment"> * </p></em>
+<a class="jxr_linenumber" name="L483" href="#L483">483</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L484" href="#L484">484</a> <em class="jxr_javadoccomment"> * @param s The glob-style wildcard pattern string.</em>
+<a class="jxr_linenumber" name="L485" href="#L485">485</a> <em class="jxr_javadoccomment"> * @return A compiled {@link java.util.regex.Pattern} object, or <jk>null</jk> if the input string is <jk>null</jk>.</em>
+<a class="jxr_linenumber" name="L486" href="#L486">486</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L487" href="#L487">487</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> java.util.regex.Pattern getGlobMatchPattern(String s) {
+<a class="jxr_linenumber" name="L488" href="#L488">488</a> <strong class="jxr_keyword">return</strong> getGlobMatchPattern(s, 0);
+<a class="jxr_linenumber" name="L489" href="#L489">489</a> }
+<a class="jxr_linenumber" name="L490" href="#L490">490</a>
+<a class="jxr_linenumber" name="L491" href="#L491">491</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L492" href="#L492">492</a> <em class="jxr_javadoccomment"> * Converts a string containing glob-style wildcard characters to a regular expression {@link java.util.regex.Pattern} with flags.</em>
+<a class="jxr_linenumber" name="L493" href="#L493">493</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L494" href="#L494">494</a> <em class="jxr_javadoccomment"> * <p>This method converts glob-style patterns to regular expressions with the following mappings:</em>
+<a class="jxr_linenumber" name="L495" href="#L495">495</a> <em class="jxr_javadoccomment"> * <ul></em>
+<a class="jxr_linenumber" name="L496" href="#L496">496</a> <em class="jxr_javadoccomment"> * <li>{@code *} matches any sequence of characters (including none)</li></em>
+<a class="jxr_linenumber" name="L497" href="#L497">497</a> <em class="jxr_javadoccomment"> * <li>{@code ?} matches exactly one character</li></em>
+<a class="jxr_linenumber" name="L498" href="#L498">498</a> <em class="jxr_javadoccomment"> * <li>All other characters are treated literally</li></em>
+<a class="jxr_linenumber" name="L499" href="#L499">499</a> <em class="jxr_javadoccomment"> * </ul></em>
+<a class="jxr_linenumber" name="L500" href="#L500">500</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L501" href="#L501">501</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Example:</h5></em>
+<a class="jxr_linenumber" name="L502" href="#L502">502</a> <em class="jxr_javadoccomment"> * <p class='bjava'></em>
+<a class="jxr_linenumber" name="L503" href="#L503">503</a> <em class="jxr_javadoccomment"> * <jc>// Case-insensitive matching</jc></em>
+<a class="jxr_linenumber" name="L504" href="#L504">504</a> <em class="jxr_javadoccomment"> * <jk>var</jk> <jv>pattern</jv> = <jsm>getGlobMatchPattern</jsm>(<js>"USER_*"</js>, Pattern.<jsf>CASE_INSENSITIVE</jsf>);</em>
+<a class="jxr_linenumber" name="L505" href="#L505">505</a> <em class="jxr_javadoccomment"> * <jk>boolean</jk> <jv>matches</jv> = <jv>pattern</jv>.matcher(<js>"user_alice"</js>).matches(); <jc>// true</jc></em>
+<a class="jxr_linenumber" name="L506" href="#L506">506</a> <em class="jxr_javadoccomment"> * </p></em>
+<a class="jxr_linenumber" name="L507" href="#L507">507</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L508" href="#L508">508</a> <em class="jxr_javadoccomment"> * @param s The glob-style wildcard pattern string.</em>
+<a class="jxr_linenumber" name="L509" href="#L509">509</a> <em class="jxr_javadoccomment"> * @param flags Regular expression flags (see {@link java.util.regex.Pattern} constants).</em>
+<a class="jxr_linenumber" name="L510" href="#L510">510</a> <em class="jxr_javadoccomment"> * @return A compiled {@link java.util.regex.Pattern} object, or <jk>null</jk> if the input string is <jk>null</jk>.</em>
+<a class="jxr_linenumber" name="L511" href="#L511">511</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L512" href="#L512">512</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> java.util.regex.Pattern getGlobMatchPattern(String s, <strong class="jxr_keyword">int</strong> flags) {
+<a class="jxr_linenumber" name="L513" href="#L513">513</a> <strong class="jxr_keyword">if</strong> (s == <strong class="jxr_keyword">null</strong>)
+<a class="jxr_linenumber" name="L514" href="#L514">514</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="L515" href="#L515">515</a> <strong class="jxr_keyword">var</strong> sb = <strong class="jxr_keyword">new</strong> StringBuilder();
+<a class="jxr_linenumber" name="L516" href="#L516">516</a> sb.append(<span class="jxr_string">"\\Q"</span>);
+<a class="jxr_linenumber" name="L517" href="#L517">517</a> <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">var</strong> i = 0; i < s.length(); i++) {
+<a class="jxr_linenumber" name="L518" href="#L518">518</a> <strong class="jxr_keyword">var</strong> c = s.charAt(i);
+<a class="jxr_linenumber" name="L519" href="#L519">519</a> <strong class="jxr_keyword">if</strong> (c == '*')
+<a class="jxr_linenumber" name="L520" href="#L520">520</a> sb.append(<span class="jxr_string">"\\E"</span>).append(<span class="jxr_string">".*"</span>).append(<span class="jxr_string">"\\Q"</span>);
+<a class="jxr_linenumber" name="L521" href="#L521">521</a> <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (c == '?')
+<a class="jxr_linenumber" name="L522" href="#L522">522</a> sb.append(<span class="jxr_string">"\\E"</span>).append(<span class="jxr_string">"."</span>).append(<span class="jxr_string">"\\Q"</span>);
+<a class="jxr_linenumber" name="L523" href="#L523">523</a> <strong class="jxr_keyword">else</strong>
+<a class="jxr_linenumber" name="L524" href="#L524">524</a> sb.append(c);
+<a class="jxr_linenumber" name="L525" href="#L525">525</a> }
+<a class="jxr_linenumber" name="L526" href="#L526">526</a> sb.append(<span class="jxr_string">"\\E"</span>);
+<a class="jxr_linenumber" name="L527" href="#L527">527</a> <strong class="jxr_keyword">return</strong> java.util.regex.Pattern.compile(sb.toString(), flags);
+<a class="jxr_linenumber" name="L528" href="#L528">528</a> }
+<a class="jxr_linenumber" name="L529" href="#L529">529</a>
+<a class="jxr_linenumber" name="L530" href="#L530">530</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L531" href="#L531">531</a> <em class="jxr_javadoccomment"> * Creates a formatted string supplier with message arguments for lazy evaluation.</em>
+<a class="jxr_linenumber" name="L532" href="#L532">532</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L533" href="#L533">533</a> <em class="jxr_javadoccomment"> * <p>This method returns a {@link Supplier} that formats the string pattern with the provided arguments</em>
+<a class="jxr_linenumber" name="L534" href="#L534">534</a> <em class="jxr_javadoccomment"> * only when the supplier's {@code get()} method is called. This is useful for expensive string formatting</em>
+<a class="jxr_linenumber" name="L535" href="#L535">535</a> <em class="jxr_javadoccomment"> * operations that may not always be needed, such as error messages in assertions.</p></em>
+<a class="jxr_linenumber" name="L536" href="#L536">536</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L537" href="#L537">537</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Usage Examples:</h5></em>
+<a class="jxr_linenumber" name="L538" href="#L538">538</a> <em class="jxr_javadoccomment"> * <p class='bjava'></em>
+<a class="jxr_linenumber" name="L539" href="#L539">539</a> <em class="jxr_javadoccomment"> * <jc>// Lazy evaluation - string is only formatted if assertion fails</jc></em>
+<a class="jxr_linenumber" name="L540" href="#L540">540</a> <em class="jxr_javadoccomment"> * assertTrue(condition, fs(<js>"Expected {0} but got {1}"</js>, expected, actual));</em>
+<a class="jxr_linenumber" name="L541" href="#L541">541</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L542" href="#L542">542</a> <em class="jxr_javadoccomment"> * <jc>// Can be used anywhere a Supplier&lt;String&gt; is expected</jc></em>
+<a class="jxr_linenumber" name="L543" href="#L543">543</a> <em class="jxr_javadoccomment"> * Supplier&lt;String&gt; <jv>messageSupplier</jv> = fs(<js>"Processing item {0} of {1}"</js>, i, total);</em>
+<a class="jxr_linenumber" name="L544" href="#L544">544</a> <em class="jxr_javadoccomment"> * </p></em>
+<a class="jxr_linenumber" name="L545" href="#L545">545</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L546" href="#L546">546</a> <em class="jxr_javadoccomment"> * @param pattern The message pattern using <js>{0}</js>, <js>{1}</js>, etc. placeholders.</em>
+<a class="jxr_linenumber" name="L547" href="#L547">547</a> <em class="jxr_javadoccomment"> * @param args The arguments to substitute into the pattern placeholders.</em>
+<a class="jxr_linenumber" name="L548" href="#L548">548</a> <em class="jxr_javadoccomment"> * @return A {@link Supplier} that will format the string when {@code get()} is called.</em>
+<a class="jxr_linenumber" name="L549" href="#L549">549</a> <em class="jxr_javadoccomment"> * @see StringUtils#format(String, Object...)</em>
+<a class="jxr_linenumber" name="L550" href="#L550">550</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L551" href="#L551">551</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> Supplier<String> fs(String pattern, Object...args) {
+<a class="jxr_linenumber" name="L552" href="#L552">552</a> <strong class="jxr_keyword">return</strong> () -> StringUtils.format(pattern, args);
+<a class="jxr_linenumber" name="L553" href="#L553">553</a> }
+<a class="jxr_linenumber" name="L554" href="#L554">554</a>
+<a class="jxr_linenumber" name="L555" href="#L555">555</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L556" href="#L556">556</a> <em class="jxr_javadoccomment"> * Calculates a hash code for the specified values.</em>
<a class="jxr_linenumber" name="L557" href="#L557">557</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L558" href="#L558">558</a> <em class="jxr_javadoccomment"> * @param o The object to check.</em>
-<a class="jxr_linenumber" name="L559" href="#L559">559</a> <em class="jxr_javadoccomment"> * @return <jk>true</jk> if the object can be converted to a list.</em>
-<a class="jxr_linenumber" name="L560" href="#L560">560</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L561" href="#L561">561</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> isConvertibleToList(Object o) {
-<a class="jxr_linenumber" name="L562" href="#L562">562</a> <strong class="jxr_keyword">return</strong> nn(o) && (o instanceof Collection || o instanceof Iterable || o instanceof Iterator || o instanceof Enumeration || o instanceof Stream || o instanceof Map || o instanceof Optional
-<a class="jxr_linenumber" name="L563" href="#L563">563</a> || isArray(o));
-<a class="jxr_linenumber" name="L564" href="#L564">564</a> }
-<a class="jxr_linenumber" name="L565" href="#L565">565</a>
-<a class="jxr_linenumber" name="L566" href="#L566">566</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L567" href="#L567">567</a> <em class="jxr_javadoccomment"> * Returns <jk>true</jk> if the specified object is empty.</em>
-<a class="jxr_linenumber" name="L568" href="#L568">568</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L569" href="#L569">569</a> <em class="jxr_javadoccomment"> * <p></em>
-<a class="jxr_linenumber" name="L570" href="#L570">570</a> <em class="jxr_javadoccomment"> * Return <jk>true</jk> if the value is any of the following:</em>
-<a class="jxr_linenumber" name="L571" href="#L571">571</a> <em class="jxr_javadoccomment"> * <ul></em>
-<a class="jxr_linenumber" name="L572" href="#L572">572</a> <em class="jxr_javadoccomment"> * <li><jk>null</jk></em>
-<a class="jxr_linenumber" name="L573" href="#L573">573</a> <em class="jxr_javadoccomment"> * <li>An empty Collection</em>
-<a class="jxr_linenumber" name="L574" href="#L574">574</a> <em class="jxr_javadoccomment"> * <li>An empty Map</em>
-<a class="jxr_linenumber" name="L575" href="#L575">575</a> <em class="jxr_javadoccomment"> * <li>An empty array</em>
-<a class="jxr_linenumber" name="L576" href="#L576">576</a> <em class="jxr_javadoccomment"> * <li>An empty CharSequence</em>
-<a class="jxr_linenumber" name="L577" href="#L577">577</a> <em class="jxr_javadoccomment"> * <li>An empty String when serialized to a string using {@link Object#toString()}.</em>
-<a class="jxr_linenumber" name="L578" href="#L578">578</a> <em class="jxr_javadoccomment"> * </ul></em>
+<a class="jxr_linenumber" name="L558" href="#L558">558</a> <em class="jxr_javadoccomment"> * <p></em>
+<a class="jxr_linenumber" name="L559" href="#L559">559</a> <em class="jxr_javadoccomment"> * This method handles annotations specially by delegating to {@link AnnotationUtils#hash(Annotation)}</em>
+<a class="jxr_linenumber" name="L560" href="#L560">560</a> <em class="jxr_javadoccomment"> * to ensure consistent hashing according to the {@link java.lang.annotation.Annotation#hashCode()} contract.</em>
+<a class="jxr_linenumber" name="L561" href="#L561">561</a> <em class="jxr_javadoccomment"> * For non-annotation values, it uses {@link Objects#hashCode(Object)}.</em>
+<a class="jxr_linenumber" name="L562" href="#L562">562</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L563" href="#L563">563</a> <em class="jxr_javadoccomment"> * @param values The values to hash.</em>
+<a class="jxr_linenumber" name="L564" href="#L564">564</a> <em class="jxr_javadoccomment"> * @return A hash code value for the given values.</em>
+<a class="jxr_linenumber" name="L565" href="#L565">565</a> <em class="jxr_javadoccomment"> * @see AnnotationUtils#hash(Annotation)</em>
+<a class="jxr_linenumber" name="L566" href="#L566">566</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L567" href="#L567">567</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong> hash(Object...values) {
+<a class="jxr_linenumber" name="L568" href="#L568">568</a> <strong class="jxr_keyword">if</strong> (values == <strong class="jxr_keyword">null</strong>)
+<a class="jxr_linenumber" name="L569" href="#L569">569</a> <strong class="jxr_keyword">return</strong> 0;
+<a class="jxr_linenumber" name="L570" href="#L570">570</a> <strong class="jxr_keyword">var</strong> result = 1;
+<a class="jxr_linenumber" name="L571" href="#L571">571</a> <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">var</strong> value : values) {
+<a class="jxr_linenumber" name="L572" href="#L572">572</a> result = 31 * result + (value instanceof java.lang.annotation.Annotation ? AnnotationUtils.hash((java.lang.annotation.Annotation)value) : Objects.hashCode(value));
+<a class="jxr_linenumber" name="L573" href="#L573">573</a> }
+<a class="jxr_linenumber" name="L574" href="#L574">574</a> <strong class="jxr_keyword">return</strong> result;
+<a class="jxr_linenumber" name="L575" href="#L575">575</a> }
+<a class="jxr_linenumber" name="L576" href="#L576">576</a>
+<a class="jxr_linenumber" name="L577" href="#L577">577</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L578" href="#L578">578</a> <em class="jxr_javadoccomment"> * Checks if the specified object is an array.</em>
<a class="jxr_linenumber" name="L579" href="#L579">579</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L580" href="#L580">580</a> <em class="jxr_javadoccomment"> * @param o The object to test.</em>
-<a class="jxr_linenumber" name="L581" href="#L581">581</a> <em class="jxr_javadoccomment"> * @return <jk>true</jk> if the specified object is empty.</em>
+<a class="jxr_linenumber" name="L580" href="#L580">580</a> <em class="jxr_javadoccomment"> * @param o The object to check.</em>
+<a class="jxr_linenumber" name="L581" href="#L581">581</a> <em class="jxr_javadoccomment"> * @return <jk>true</jk> if the object is not <jk>null</jk> and is an array.</em>
<a class="jxr_linenumber" name="L582" href="#L582">582</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L583" href="#L583">583</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> isEmpty(Object o) {
-<a class="jxr_linenumber" name="L584" href="#L584">584</a> <strong class="jxr_keyword">if</strong> (o == <strong class="jxr_keyword">null</strong>)
-<a class="jxr_linenumber" name="L585" href="#L585">585</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
-<a class="jxr_linenumber" name="L586" href="#L586">586</a> <strong class="jxr_keyword">if</strong> (o instanceof Collection<?> o2)
-<a class="jxr_linenumber" name="L587" href="#L587">587</a> <strong class="jxr_keyword">return</strong> o2.isEmpty();
-<a class="jxr_linenumber" name="L588" href="#L588">588</a> <strong class="jxr_keyword">if</strong> (o instanceof Map<?,?> o2)
-<a class="jxr_linenumber" name="L589" href="#L589">589</a> <strong class="jxr_keyword">return</strong> o2.isEmpty();
-<a class="jxr_linenumber" name="L590" href="#L590">590</a> <strong class="jxr_keyword">if</strong> (isArray(o))
-<a class="jxr_linenumber" name="L591" href="#L591">591</a> <strong class="jxr_keyword">return</strong> (Array.getLength(o) == 0);
-<a class="jxr_linenumber" name="L592" href="#L592">592</a> <strong class="jxr_keyword">return</strong> o.toString().isEmpty();
-<a class="jxr_linenumber" name="L593" href="#L593">593</a> }
-<a class="jxr_linenumber" name="L594" href="#L594">594</a>
-<a class="jxr_linenumber" name="L595" href="#L595">595</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L596" href="#L596">596</a> <em class="jxr_javadoccomment"> * Returns <jk>true</jk> if the specified collection is <jk>null</jk> or empty.</em>
-<a class="jxr_linenumber" name="L597" href="#L597">597</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L598" href="#L598">598</a> <em class="jxr_javadoccomment"> * @param o The collection to check.</em>
-<a class="jxr_linenumber" name="L599" href="#L599">599</a> <em class="jxr_javadoccomment"> * @return <jk>true</jk> if the specified collection is <jk>null</jk> or empty.</em>
-<a class="jxr_linenumber" name="L600" href="#L600">600</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L601" href="#L601">601</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> isEmpty(Collection<?> o) {
-<a class="jxr_linenumber" name="L602" href="#L602">602</a> <strong class="jxr_keyword">if</strong> (o == <strong class="jxr_keyword">null</strong>)
-<a class="jxr_linenumber" name="L603" href="#L603">603</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
-<a class="jxr_linenumber" name="L604" href="#L604">604</a> <strong class="jxr_keyword">return</strong> o.isEmpty();
-<a class="jxr_linenumber" name="L605" href="#L605">605</a> }
-<a class="jxr_linenumber" name="L606" href="#L606">606</a>
-<a class="jxr_linenumber" name="L607" href="#L607">607</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L608" href="#L608">608</a> <em class="jxr_javadoccomment"> * Returns <jk>true</jk> if the specified map is <jk>null</jk> or empty.</em>
-<a class="jxr_linenumber" name="L609" href="#L609">609</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L610" href="#L610">610</a> <em class="jxr_javadoccomment"> * @param o The map to check.</em>
-<a class="jxr_linenumber" name="L611" href="#L611">611</a> <em class="jxr_javadoccomment"> * @return <jk>true</jk> if the specified map is <jk>null</jk> or empty.</em>
-<a class="jxr_linenumber" name="L612" href="#L612">612</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L613" href="#L613">613</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> isEmpty(Map<?,?> o) {
-<a class="jxr_linenumber" name="L614" href="#L614">614</a> <strong class="jxr_keyword">if</strong> (o == <strong class="jxr_keyword">null</strong>)
-<a class="jxr_linenumber" name="L615" href="#L615">615</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
-<a class="jxr_linenumber" name="L616" href="#L616">616</a> <strong class="jxr_keyword">return</strong> o.isEmpty();
-<a class="jxr_linenumber" name="L617" href="#L617">617</a> }
-<a class="jxr_linenumber" name="L618" href="#L618">618</a>
-<a class="jxr_linenumber" name="L619" href="#L619">619</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L620" href="#L620">620</a> <em class="jxr_javadoccomment"> * Returns <jk>true</jk> if string is <jk>null</jk> or empty.</em>
-<a class="jxr_linenumber" name="L621" href="#L621">621</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L622" href="#L622">622</a> <em class="jxr_javadoccomment"> * @param o The string to check.</em>
-<a class="jxr_linenumber" name="L623" href="#L623">623</a> <em class="jxr_javadoccomment"> * @return <jk>true</jk> if string is <jk>null</jk> or empty.</em>
-<a class="jxr_linenumber" name="L624" href="#L624">624</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L625" href="#L625">625</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> isEmpty(CharSequence o) {
-<a class="jxr_linenumber" name="L626" href="#L626">626</a> <strong class="jxr_keyword">return</strong> StringUtils.isEmpty(o);
-<a class="jxr_linenumber" name="L627" href="#L627">627</a> }
-<a class="jxr_linenumber" name="L628" href="#L628">628</a>
-<a class="jxr_linenumber" name="L629" href="#L629">629</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L630" href="#L630">630</a> <em class="jxr_javadoccomment"> * Returns <jk>true</jk> if specified string is <jk>null</jk> or empty or consists of only blanks.</em>
-<a class="jxr_linenumber" name="L631" href="#L631">631</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L632" href="#L632">632</a> <em class="jxr_javadoccomment"> * @param s The string to check.</em>
-<a class="jxr_linenumber" name="L633" href="#L633">633</a> <em class="jxr_javadoccomment"> * @return <jk>true</jk> if specified string is <jk>null</jk> or empty or consists of only blanks.</em>
-<a class="jxr_linenumber" name="L634" href="#L634">634</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L635" href="#L635">635</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> isBlank(CharSequence s) {
-<a class="jxr_linenumber" name="L636" href="#L636">636</a> <strong class="jxr_keyword">return</strong> StringUtils.isBlank(s);
-<a class="jxr_linenumber" name="L637" href="#L637">637</a> }
-<a class="jxr_linenumber" name="L638" href="#L638">638</a>
-<a class="jxr_linenumber" name="L639" href="#L639">639</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L640" href="#L640">640</a> <em class="jxr_javadoccomment"> * Returns <jk>true</jk> if the specified object is not <jk>null</jk> and not empty.</em>
-<a class="jxr_linenumber" name="L641" href="#L641">641</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L642" href="#L642">642</a> <em class="jxr_javadoccomment"> * Works on any of the following data types: String, CharSequence, Collection, Map, array.</em>
-<a class="jxr_linenumber" name="L643" href="#L643">643</a> <em class="jxr_javadoccomment"> * All other types are stringified and then checked as a String.</em>
-<a class="jxr_linenumber" name="L644" href="#L644">644</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L645" href="#L645">645</a> <em class="jxr_javadoccomment"> * @param value The value being checked.</em>
-<a class="jxr_linenumber" name="L646" href="#L646">646</a> <em class="jxr_javadoccomment"> * @return <jk>true</jk> if the specified object is not <jk>null</jk> and not empty.</em>
-<a class="jxr_linenumber" name="L647" href="#L647">647</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L648" href="#L648">648</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> isNotEmpty(Object value) {
-<a class="jxr_linenumber" name="L649" href="#L649">649</a> <strong class="jxr_keyword">if</strong> (value == <strong class="jxr_keyword">null</strong>)
-<a class="jxr_linenumber" name="L650" href="#L650">650</a> <strong class="jxr_keyword">return</strong> false;
-<a class="jxr_linenumber" name="L651" href="#L651">651</a> <strong class="jxr_keyword">if</strong> (value instanceof CharSequence x)
-<a class="jxr_linenumber" name="L652" href="#L652">652</a> <strong class="jxr_keyword">return</strong> ! x.isEmpty();
-<a class="jxr_linenumber" name="L653" href="#L653">653</a> <strong class="jxr_keyword">if</strong> (value instanceof Collection<?> x)
-<a class="jxr_linenumber" name="L654" href="#L654">654</a> <strong class="jxr_keyword">return</strong> ! x.isEmpty();
-<a class="jxr_linenumber" name="L655" href="#L655">655</a> <strong class="jxr_keyword">if</strong> (value instanceof Map<?,?> x)
-<a class="jxr_linenumber" name="L656" href="#L656">656</a> <strong class="jxr_keyword">return</strong> ! x.isEmpty();
-<a class="jxr_linenumber" name="L657" href="#L657">657</a> <strong class="jxr_keyword">if</strong> (isArray(value))
-<a class="jxr_linenumber" name="L658" href="#L658">658</a> <strong class="jxr_keyword">return</strong> Array.getLength(value) > 0;
-<a class="jxr_linenumber" name="L659" href="#L659">659</a> <strong class="jxr_keyword">return</strong> isNotEmpty(s(value));
-<a class="jxr_linenumber" name="L660" href="#L660">660</a> }
-<a class="jxr_linenumber" name="L661" href="#L661">661</a>
-<a class="jxr_linenumber" name="L662" href="#L662">662</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L663" href="#L663">663</a> <em class="jxr_javadoccomment"> * Returns <jk>true</jk> if the specified collection is not <jk>null</jk> and not empty.</em>
-<a class="jxr_linenumber" name="L664" href="#L664">664</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L665" href="#L665">665</a> <em class="jxr_javadoccomment"> * @param value The collection to check.</em>
-<a class="jxr_linenumber" name="L666" href="#L666">666</a> <em class="jxr_javadoccomment"> * @return <jk>true</jk> if the specified collection is not <jk>null</jk> and not empty.</em>
-<a class="jxr_linenumber" name="L667" href="#L667">667</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L668" href="#L668">668</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> isNotEmpty(Collection<?> value) {
-<a class="jxr_linenumber" name="L669" href="#L669">669</a> <strong class="jxr_keyword">return</strong> ! isEmpty(value);
-<a class="jxr_linenumber" name="L670" href="#L670">670</a> }
-<a class="jxr_linenumber" name="L671" href="#L671">671</a>
-<a class="jxr_linenumber" name="L672" href="#L672">672</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L673" href="#L673">673</a> <em class="jxr_javadoccomment"> * Returns <jk>true</jk> if the specified map is not <jk>null</jk> and not empty.</em>
-<a class="jxr_linenumber" name="L674" href="#L674">674</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L675" href="#L675">675</a> <em class="jxr_javadoccomment"> * @param value The map to check.</em>
-<a class="jxr_linenumber" name="L676" href="#L676">676</a> <em class="jxr_javadoccomment"> * @return <jk>true</jk> if the specified map is not <jk>null</jk> and not empty.</em>
-<a class="jxr_linenumber" name="L677" href="#L677">677</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L678" href="#L678">678</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> isNotEmpty(Map<?,?> value) {
-<a class="jxr_linenumber" name="L679" href="#L679">679</a> <strong class="jxr_keyword">return</strong> ! isEmpty(value);
-<a class="jxr_linenumber" name="L680" href="#L680">680</a> }
-<a class="jxr_linenumber" name="L681" href="#L681">681</a>
-<a class="jxr_linenumber" name="L682" href="#L682">682</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L683" href="#L683">683</a> <em class="jxr_javadoccomment"> * Returns <jk>true</jk> if string is not <jk>null</jk> and not empty.</em>
-<a class="jxr_linenumber" name="L684" href="#L684">684</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L685" href="#L685">685</a> <em class="jxr_javadoccomment"> * @param o The string to check.</em>
-<a class="jxr_linenumber" name="L686" href="#L686">686</a> <em class="jxr_javadoccomment"> * @return <jk>true</jk> if string is not <jk>null</jk> and not empty.</em>
-<a class="jxr_linenumber" name="L687" href="#L687">687</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L688" href="#L688">688</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> isNotEmpty(CharSequence o) {
-<a class="jxr_linenumber" name="L689" href="#L689">689</a> <strong class="jxr_keyword">return</strong> ! isEmpty(o);
-<a class="jxr_linenumber" name="L690" href="#L690">690</a> }
-<a class="jxr_linenumber" name="L691" href="#L691">691</a>
-<a class="jxr_linenumber" name="L692" href="#L692">692</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L693" href="#L693">693</a> <em class="jxr_javadoccomment"> * Returns <jk>true</jk> if the specified number is not <jk>null</jk> and not <c>-1</c>.</em>
-<a class="jxr_linenumber" name="L694" href="#L694">694</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L695" href="#L695">695</a> <em class="jxr_javadoccomment"> * @param <T> The value types.</em>
-<a class="jxr_linenumber" name="L696" href="#L696">696</a> <em class="jxr_javadoccomment"> * @param value The value being checked.</em>
-<a class="jxr_linenumber" name="L697" href="#L697">697</a> <em class="jxr_javadoccomment"> * @return <jk>true</jk> if the specified number is not <jk>null</jk> and not <c>-1</c>.</em>
-<a class="jxr_linenumber" name="L698" href="#L698">698</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L699" href="#L699">699</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <T <strong class="jxr_keyword">extends</strong> Number> <strong class="jxr_keyword">boolean</strong> isNotMinusOne(T value) {
-<a class="jxr_linenumber" name="L700" href="#L700">700</a> <strong class="jxr_keyword">return</strong> nn(value) && value.intValue() != -1;
-<a class="jxr_linenumber" name="L701" href="#L701">701</a> }
-<a class="jxr_linenumber" name="L702" href="#L702">702</a>
-<a class="jxr_linenumber" name="L703" href="#L703">703</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L704" href="#L704">704</a> <em class="jxr_javadoccomment"> * Returns <jk>true</jk> if the specified object is not <jk>null</jk>.</em>
-<a class="jxr_linenumber" name="L705" href="#L705">705</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L706" href="#L706">706</a> <em class="jxr_javadoccomment"> * @param <T> The value type.</em>
-<a class="jxr_linenumber" name="L707" href="#L707">707</a> <em class="jxr_javadoccomment"> * @param value The value being checked.</em>
-<a class="jxr_linenumber" name="L708" href="#L708">708</a> <em class="jxr_javadoccomment"> * @return <jk>true</jk> if the specified object is not <jk>null</jk>.</em>
-<a class="jxr_linenumber" name="L709" href="#L709">709</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L710" href="#L710">710</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <T> <strong class="jxr_keyword">boolean</strong> isNotNull(T value) {
-<a class="jxr_linenumber" name="L711" href="#L711">711</a> <strong class="jxr_keyword">return</strong> value != <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="L712" href="#L712">712</a> }
-<a class="jxr_linenumber" name="L713" href="#L713">713</a>
-<a class="jxr_linenumber" name="L714" href="#L714">714</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L715" href="#L715">715</a> <em class="jxr_javadoccomment"> * Returns <jk>true</jk> if the specified boolean is not <jk>null</jk> and is <jk>true</jk>.</em>
-<a class="jxr_linenumber" name="L716" href="#L716">716</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L717" href="#L717">717</a> <em class="jxr_javadoccomment"> * @param value The value being checked.</em>
-<a class="jxr_linenumber" name="L718" href="#L718">718</a> <em class="jxr_javadoccomment"> * @return <jk>true</jk> if the specified boolean is not <jk>null</jk> and is <jk>true</jk>.</em>
-<a class="jxr_linenumber" name="L719" href="#L719">719</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L720" href="#L720">720</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> isTrue(Boolean value) {
-<a class="jxr_linenumber" name="L721" href="#L721">721</a> <strong class="jxr_keyword">return</strong> nn(value) && value;
-<a class="jxr_linenumber" name="L722" href="#L722">722</a> }
-<a class="jxr_linenumber" name="L723" href="#L723">723</a>
-<a class="jxr_linenumber" name="L724" href="#L724">724</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L725" href="#L725">725</a> <em class="jxr_javadoccomment"> * Shortcut for creating a modifiable list out of an array of values.</em>
-<a class="jxr_linenumber" name="L726" href="#L726">726</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L727" href="#L727">727</a> <em class="jxr_javadoccomment"> * @param <T> The element type.</em>
-<a class="jxr_linenumber" name="L728" href="#L728">728</a> <em class="jxr_javadoccomment"> * @param values The values to add to the list.</em>
-<a class="jxr_linenumber" name="L729" href="#L729">729</a> <em class="jxr_javadoccomment"> * @return A modifiable list containing the specified values.</em>
-<a class="jxr_linenumber" name="L730" href="#L730">730</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L731" href="#L731">731</a> @SafeVarargs
-<a class="jxr_linenumber" name="L732" href="#L732">732</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <T> List<T> list(T...values) { <em class="jxr_comment">// NOSONAR</em>
-<a class="jxr_linenumber" name="L733" href="#L733">733</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> ArrayList<>(Arrays.asList(values));
-<a class="jxr_linenumber" name="L734" href="#L734">734</a> }
-<a class="jxr_linenumber" name="L735" href="#L735">735</a>
-<a class="jxr_linenumber" name="L736" href="#L736">736</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L737" href="#L737">737</a> <em class="jxr_javadoccomment"> * Convenience method for creating an {@link ArrayList} of the specified size.</em>
-<a class="jxr_linenumber" name="L738" href="#L738">738</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L739" href="#L739">739</a> <em class="jxr_javadoccomment"> * @param <E> The element type.</em>
-<a class="jxr_linenumber" name="L740" href="#L740">740</a> <em class="jxr_javadoccomment"> * @param size The initial size of the list.</em>
-<a class="jxr_linenumber" name="L741" href="#L741">741</a> <em class="jxr_javadoccomment"> * @return A new modifiable list.</em>
-<a class="jxr_linenumber" name="L742" href="#L742">742</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L743" href="#L743">743</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <E> ArrayList<E> listOfSize(<strong class="jxr_keyword">int</strong> size) {
-<a class="jxr_linenumber" name="L744" href="#L744">744</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> ArrayList<>(size);
-<a class="jxr_linenumber" name="L745" href="#L745">745</a> }
-<a class="jxr_linenumber" name="L746" href="#L746">746</a>
-<a class="jxr_linenumber" name="L747" href="#L747">747</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L748" href="#L748">748</a> <em class="jxr_javadoccomment"> * Shortcut for creating a modifiable map out of an array of key-value pairs.</em>
-<a class="jxr_linenumber" name="L749" href="#L749">749</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L750" href="#L750">750</a> <em class="jxr_javadoccomment"> * @param <K> The key type.</em>
-<a class="jxr_linenumber" name="L751" href="#L751">751</a> <em class="jxr_javadoccomment"> * @param <V> The value type.</em>
-<a class="jxr_linenumber" name="L752" href="#L752">752</a> <em class="jxr_javadoccomment"> * @param values The key-value pairs (alternating keys and values).</em>
-<a class="jxr_linenumber" name="L753" href="#L753">753</a> <em class="jxr_javadoccomment"> * @return A modifiable LinkedHashMap containing the specified key-value pairs.</em>
+<a class="jxr_linenumber" name="L583" href="#L583">583</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> isArray(Object o) {
+<a class="jxr_linenumber" name="L584" href="#L584">584</a> <strong class="jxr_keyword">return</strong> nn(o) && o.getClass().isArray();
+<a class="jxr_linenumber" name="L585" href="#L585">585</a> }
+<a class="jxr_linenumber" name="L586" href="#L586">586</a>
+<a class="jxr_linenumber" name="L587" href="#L587">587</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L588" href="#L588">588</a> <em class="jxr_javadoccomment"> * Returns <jk>true</jk> if the specified object can be converted to a list.</em>
+<a class="jxr_linenumber" name="L589" href="#L589">589</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L590" href="#L590">590</a> <em class="jxr_javadoccomment"> * <p></em>
+<a class="jxr_linenumber" name="L591" href="#L591">591</a> <em class="jxr_javadoccomment"> * The following types are considered convertible:</em>
+<a class="jxr_linenumber" name="L592" href="#L592">592</a> <em class="jxr_javadoccomment"> * <ul></em>
+<a class="jxr_linenumber" name="L593" href="#L593">593</a> <em class="jxr_javadoccomment"> * <li>Collections</em>
+<a class="jxr_linenumber" name="L594" href="#L594">594</a> <em class="jxr_javadoccomment"> * <li>Iterables</em>
+<a class="jxr_linenumber" name="L595" href="#L595">595</a> <em class="jxr_javadoccomment"> * <li>Iterators</em>
+<a class="jxr_linenumber" name="L596" href="#L596">596</a> <em class="jxr_javadoccomment"> * <li>Enumerations</em>
+<a class="jxr_linenumber" name="L597" href="#L597">597</a> <em class="jxr_javadoccomment"> * <li>Streams</em>
+<a class="jxr_linenumber" name="L598" href="#L598">598</a> <em class="jxr_javadoccomment"> * <li>Maps</em>
+<a class="jxr_linenumber" name="L599" href="#L599">599</a> <em class="jxr_javadoccomment"> * <li>Optional</em>
+<a class="jxr_linenumber" name="L600" href="#L600">600</a> <em class="jxr_javadoccomment"> * <li>Arrays</em>
+<a class="jxr_linenumber" name="L601" href="#L601">601</a> <em class="jxr_javadoccomment"> * </ul></em>
+<a class="jxr_linenumber" name="L602" href="#L602">602</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L603" href="#L603">603</a> <em class="jxr_javadoccomment"> * @param o The object to check.</em>
+<a class="jxr_linenumber" name="L604" href="#L604">604</a> <em class="jxr_javadoccomment"> * @return <jk>true</jk> if the object can be converted to a list.</em>
+<a class="jxr_linenumber" name="L605" href="#L605">605</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L606" href="#L606">606</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> isConvertibleToList(Object o) {
+<a class="jxr_linenumber" name="L607" href="#L607">607</a> <strong class="jxr_keyword">return</strong> nn(o) && (o instanceof Collection || o instanceof Iterable || o instanceof Iterator || o instanceof Enumeration || o instanceof Stream || o instanceof Map || o instanceof Optional
+<a class="jxr_linenumber" name="L608" href="#L608">608</a> || isArray(o));
+<a class="jxr_linenumber" name="L609" href="#L609">609</a> }
+<a class="jxr_linenumber" name="L610" href="#L610">610</a>
+<a class="jxr_linenumber" name="L611" href="#L611">611</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L612" href="#L612">612</a> <em class="jxr_javadoccomment"> * Returns <jk>true</jk> if the specified object is empty.</em>
+<a class="jxr_linenumber" name="L613" href="#L613">613</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L614" href="#L614">614</a> <em class="jxr_javadoccomment"> * <p></em>
+<a class="jxr_linenumber" name="L615" href="#L615">615</a> <em class="jxr_javadoccomment"> * Return <jk>true</jk> if the value is any of the following:</em>
+<a class="jxr_linenumber" name="L616" href="#L616">616</a> <em class="jxr_javadoccomment"> * <ul></em>
+<a class="jxr_linenumber" name="L617" href="#L617">617</a> <em class="jxr_javadoccomment"> * <li><jk>null</jk></em>
+<a class="jxr_linenumber" name="L618" href="#L618">618</a> <em class="jxr_javadoccomment"> * <li>An empty Collection</em>
+<a class="jxr_linenumber" name="L619" href="#L619">619</a> <em class="jxr_javadoccomment"> * <li>An empty Map</em>
+<a class="jxr_linenumber" name="L620" href="#L620">620</a> <em class="jxr_javadoccomment"> * <li>An empty array</em>
+<a class="jxr_linenumber" name="L621" href="#L621">621</a> <em class="jxr_javadoccomment"> * <li>An empty CharSequence</em>
+<a class="jxr_linenumber" name="L622" href="#L622">622</a> <em class="jxr_javadoccomment"> * <li>An empty String when serialized to a string using {@link Object#toString()}.</em>
+<a class="jxr_linenumber" name="L623" href="#L623">623</a> <em class="jxr_javadoccomment"> * </ul></em>
+<a class="jxr_linenumber" name="L624" href="#L624">624</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L625" href="#L625">625</a> <em class="jxr_javadoccomment"> * @param o The object to test.</em>
+<a class="jxr_linenumber" name="L626" href="#L626">626</a> <em class="jxr_javadoccomment"> * @return <jk>true</jk> if the specified object is empty.</em>
+<a class="jxr_linenumber" name="L627" href="#L627">627</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L628" href="#L628">628</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> isEmpty(Object o) {
+<a class="jxr_linenumber" name="L629" href="#L629">629</a> <strong class="jxr_keyword">if</strong> (o == <strong class="jxr_keyword">null</strong>)
+<a class="jxr_linenumber" name="L630" href="#L630">630</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
+<a class="jxr_linenumber" name="L631" href="#L631">631</a> <strong class="jxr_keyword">if</strong> (o instanceof Collection<?> o2)
+<a class="jxr_linenumber" name="L632" href="#L632">632</a> <strong class="jxr_keyword">return</strong> o2.isEmpty();
+<a class="jxr_linenumber" name="L633" href="#L633">633</a> <strong class="jxr_keyword">if</strong> (o instanceof Map<?,?> o2)
+<a class="jxr_linenumber" name="L634" href="#L634">634</a> <strong class="jxr_keyword">return</strong> o2.isEmpty();
+<a class="jxr_linenumber" name="L635" href="#L635">635</a> <strong class="jxr_keyword">if</strong> (isArray(o))
+<a class="jxr_linenumber" name="L636" href="#L636">636</a> <strong class="jxr_keyword">return</strong> (Array.getLength(o) == 0);
+<a class="jxr_linenumber" name="L637" href="#L637">637</a> <strong class="jxr_keyword">return</strong> o.toString().isEmpty();
+<a class="jxr_linenumber" name="L638" href="#L638">638</a> }
+<a class="jxr_linenumber" name="L639" href="#L639">639</a>
+<a class="jxr_linenumber" name="L640" href="#L640">640</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L641" href="#L641">641</a> <em class="jxr_javadoccomment"> * Returns <jk>true</jk> if the specified collection is <jk>null</jk> or empty.</em>
+<a class="jxr_linenumber" name="L642" href="#L642">642</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L643" href="#L643">643</a> <em class="jxr_javadoccomment"> * @param o The collection to check.</em>
+<a class="jxr_linenumber" name="L644" href="#L644">644</a> <em class="jxr_javadoccomment"> * @return <jk>true</jk> if the specified collection is <jk>null</jk> or empty.</em>
+<a class="jxr_linenumber" name="L645" href="#L645">645</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L646" href="#L646">646</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> isEmpty(Collection<?> o) {
+<a class="jxr_linenumber" name="L647" href="#L647">647</a> <strong class="jxr_keyword">if</strong> (o == <strong class="jxr_keyword">null</strong>)
+<a class="jxr_linenumber" name="L648" href="#L648">648</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
+<a class="jxr_linenumber" name="L649" href="#L649">649</a> <strong class="jxr_keyword">return</strong> o.isEmpty();
+<a class="jxr_linenumber" name="L650" href="#L650">650</a> }
+<a class="jxr_linenumber" name="L651" href="#L651">651</a>
+<a class="jxr_linenumber" name="L652" href="#L652">652</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L653" href="#L653">653</a> <em class="jxr_javadoccomment"> * Returns <jk>true</jk> if the specified map is <jk>null</jk> or empty.</em>
+<a class="jxr_linenumber" name="L654" href="#L654">654</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L655" href="#L655">655</a> <em class="jxr_javadoccomment"> * @param o The map to check.</em>
+<a class="jxr_linenumber" name="L656" href="#L656">656</a> <em class="jxr_javadoccomment"> * @return <jk>true</jk> if the specified map is <jk>null</jk> or empty.</em>
+<a class="jxr_linenumber" name="L657" href="#L657">657</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L658" href="#L658">658</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> isEmpty(Map<?,?> o) {
+<a class="jxr_linenumber" name="L659" href="#L659">659</a> <strong class="jxr_keyword">if</strong> (o == <strong class="jxr_keyword">null</strong>)
+<a class="jxr_linenumber" name="L660" href="#L660">660</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
+<a class="jxr_linenumber" name="L661" href="#L661">661</a> <strong class="jxr_keyword">return</strong> o.isEmpty();
+<a class="jxr_linenumber" name="L662" href="#L662">662</a> }
+<a class="jxr_linenumber" name="L663" href="#L663">663</a>
+<a class="jxr_linenumber" name="L664" href="#L664">664</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L665" href="#L665">665</a> <em class="jxr_javadoccomment"> * Returns <jk>true</jk> if string is <jk>null</jk> or empty.</em>
+<a class="jxr_linenumber" name="L666" href="#L666">666</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L667" href="#L667">667</a> <em class="jxr_javadoccomment"> * @param o The string to check.</em>
+<a class="jxr_linenumber" name="L668" href="#L668">668</a> <em class="jxr_javadoccomment"> * @return <jk>true</jk> if string is <jk>null</jk> or empty.</em>
+<a class="jxr_linenumber" name="L669" href="#L669">669</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L670" href="#L670">670</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> isEmpty(CharSequence o) {
+<a class="jxr_linenumber" name="L671" href="#L671">671</a> <strong class="jxr_keyword">return</strong> StringUtils.isEmpty(o);
+<a class="jxr_linenumber" name="L672" href="#L672">672</a> }
+<a class="jxr_linenumber" name="L673" href="#L673">673</a>
+<a class="jxr_linenumber" name="L674" href="#L674">674</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L675" href="#L675">675</a> <em class="jxr_javadoccomment"> * Returns <jk>true</jk> if specified string is <jk>null</jk> or empty or consists of only blanks.</em>
+<a class="jxr_linenumber" name="L676" href="#L676">676</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L677" href="#L677">677</a> <em class="jxr_javadoccomment"> * @param s The string to check.</em>
+<a class="jxr_linenumber" name="L678" href="#L678">678</a> <em class="jxr_javadoccomment"> * @return <jk>true</jk> if specified string is <jk>null</jk> or empty or consists of only blanks.</em>
+<a class="jxr_linenumber" name="L679" href="#L679">679</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L680" href="#L680">680</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> isBlank(CharSequence s) {
+<a class="jxr_linenumber" name="L681" href="#L681">681</a> <strong class="jxr_keyword">return</strong> StringUtils.isBlank(s);
+<a class="jxr_linenumber" name="L682" href="#L682">682</a> }
+<a class="jxr_linenumber" name="L683" href="#L683">683</a>
+<a class="jxr_linenumber" name="L684" href="#L684">684</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L685" href="#L685">685</a> <em class="jxr_javadoccomment"> * Returns <jk>true</jk> if the specified object is not <jk>null</jk> and not empty.</em>
+<a class="jxr_linenumber" name="L686" href="#L686">686</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L687" href="#L687">687</a> <em class="jxr_javadoccomment"> * Works on any of the following data types: String, CharSequence, Collection, Map, array.</em>
+<a class="jxr_linenumber" name="L688" href="#L688">688</a> <em class="jxr_javadoccomment"> * All other types are stringified and then checked as a String.</em>
+<a class="jxr_linenumber" name="L689" href="#L689">689</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L690" href="#L690">690</a> <em class="jxr_javadoccomment"> * @param value The value being checked.</em>
+<a class="jxr_linenumber" name="L691" href="#L691">691</a> <em class="jxr_javadoccomment"> * @return <jk>true</jk> if the specified object is not <jk>null</jk> and not empty.</em>
+<a class="jxr_linenumber" name="L692" href="#L692">692</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L693" href="#L693">693</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> isNotEmpty(Object value) {
+<a class="jxr_linenumber" name="L694" href="#L694">694</a> <strong class="jxr_keyword">if</strong> (value == <strong class="jxr_keyword">null</strong>)
+<a class="jxr_linenumber" name="L695" href="#L695">695</a> <strong class="jxr_keyword">return</strong> false;
+<a class="jxr_linenumber" name="L696" href="#L696">696</a> <strong class="jxr_keyword">if</strong> (value instanceof CharSequence x)
+<a class="jxr_linenumber" name="L697" href="#L697">697</a> <strong class="jxr_keyword">return</strong> ! x.isEmpty();
+<a class="jxr_linenumber" name="L698" href="#L698">698</a> <strong class="jxr_keyword">if</strong> (value instanceof Collection<?> x)
+<a class="jxr_linenumber" name="L699" href="#L699">699</a> <strong class="jxr_keyword">return</strong> ! x.isEmpty();
+<a class="jxr_linenumber" name="L700" href="#L700">700</a> <strong class="jxr_keyword">if</strong> (value instanceof Map<?,?> x)
+<a class="jxr_linenumber" name="L701" href="#L701">701</a> <strong class="jxr_keyword">return</strong> ! x.isEmpty();
+<a class="jxr_linenumber" name="L702" href="#L702">702</a> <strong class="jxr_keyword">if</strong> (isArray(value))
+<a class="jxr_linenumber" name="L703" href="#L703">703</a> <strong class="jxr_keyword">return</strong> Array.getLength(value) > 0;
+<a class="jxr_linenumber" name="L704" href="#L704">704</a> <strong class="jxr_keyword">return</strong> isNotEmpty(s(value));
+<a class="jxr_linenumber" name="L705" href="#L705">705</a> }
+<a class="jxr_linenumber" name="L706" href="#L706">706</a>
+<a class="jxr_linenumber" name="L707" href="#L707">707</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L708" href="#L708">708</a> <em class="jxr_javadoccomment"> * Returns <jk>true</jk> if the specified collection is not <jk>null</jk> and not empty.</em>
+<a class="jxr_linenumber" name="L709" href="#L709">709</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L710" href="#L710">710</a> <em class="jxr_javadoccomment"> * @param value The collection to check.</em>
+<a class="jxr_linenumber" name="L711" href="#L711">711</a> <em class="jxr_javadoccomment"> * @return <jk>true</jk> if the specified collection is not <jk>null</jk> and not empty.</em>
+<a class="jxr_linenumber" name="L712" href="#L712">712</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L713" href="#L713">713</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> isNotEmpty(Collection<?> value) {
+<a class="jxr_linenumber" name="L714" href="#L714">714</a> <strong class="jxr_keyword">return</strong> ! isEmpty(value);
+<a class="jxr_linenumber" name="L715" href="#L715">715</a> }
+<a class="jxr_linenumber" name="L716" href="#L716">716</a>
+<a class="jxr_linenumber" name="L717" href="#L717">717</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L718" href="#L718">718</a> <em class="jxr_javadoccomment"> * Returns <jk>true</jk> if the specified map is not <jk>null</jk> and not empty.</em>
+<a class="jxr_linenumber" name="L719" href="#L719">719</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L720" href="#L720">720</a> <em class="jxr_javadoccomment"> * @param value The map to check.</em>
+<a class="jxr_linenumber" name="L721" href="#L721">721</a> <em class="jxr_javadoccomment"> * @return <jk>true</jk> if the specified map is not <jk>null</jk> and not empty.</em>
+<a class="jxr_linenumber" name="L722" href="#L722">722</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L723" href="#L723">723</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> isNotEmpty(Map<?,?> value) {
+<a class="jxr_linenumber" name="L724" href="#L724">724</a> <strong class="jxr_keyword">return</strong> ! isEmpty(value);
+<a class="jxr_linenumber" name="L725" href="#L725">725</a> }
+<a class="jxr_linenumber" name="L726" href="#L726">726</a>
+<a class="jxr_linenumber" name="L727" href="#L727">727</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L728" href="#L728">728</a> <em class="jxr_javadoccomment"> * Returns <jk>true</jk> if string is not <jk>null</jk> and not empty.</em>
+<a class="jxr_linenumber" name="L729" href="#L729">729</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L730" href="#L730">730</a> <em class="jxr_javadoccomment"> * @param o The string to check.</em>
+<a class="jxr_linenumber" name="L731" href="#L731">731</a> <em class="jxr_javadoccomment"> * @return <jk>true</jk> if string is not <jk>null</jk> and not empty.</em>
+<a class="jxr_linenumber" name="L732" href="#L732">732</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L733" href="#L733">733</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> isNotEmpty(CharSequence o) {
+<a class="jxr_linenumber" name="L734" href="#L734">734</a> <strong class="jxr_keyword">return</strong> ! isEmpty(o);
+<a class="jxr_linenumber" name="L735" href="#L735">735</a> }
+<a class="jxr_linenumber" name="L736" href="#L736">736</a>
+<a class="jxr_linenumber" name="L737" href="#L737">737</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L738" href="#L738">738</a> <em class="jxr_javadoccomment"> * Returns <jk>true</jk> if the specified number is not <jk>null</jk> and not <c>-1</c>.</em>
+<a class="jxr_linenumber" name="L739" href="#L739">739</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L740" href="#L740">740</a> <em class="jxr_javadoccomment"> * @param <T> The value types.</em>
+<a class="jxr_linenumber" name="L741" href="#L741">741</a> <em class="jxr_javadoccomment"> * @param value The value being checked.</em>
+<a class="jxr_linenumber" name="L742" href="#L742">742</a> <em class="jxr_javadoccomment"> * @return <jk>true</jk> if the specified number is not <jk>null</jk> and not <c>-1</c>.</em>
+<a class="jxr_linenumber" name="L743" href="#L743">743</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L744" href="#L744">744</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <T <strong class="jxr_keyword">extends</strong> Number> <strong class="jxr_keyword">boolean</strong> isNotMinusOne(T value) {
+<a class="jxr_linenumber" name="L745" href="#L745">745</a> <strong class="jxr_keyword">return</strong> nn(value) && value.intValue() != -1;
+<a class="jxr_linenumber" name="L746" href="#L746">746</a> }
+<a class="jxr_linenumber" name="L747" href="#L747">747</a>
+<a class="jxr_linenumber" name="L748" href="#L748">748</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L749" href="#L749">749</a> <em class="jxr_javadoccomment"> * Returns <jk>true</jk> if the specified object is not <jk>null</jk>.</em>
+<a class="jxr_linenumber" name="L750" href="#L750">750</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L751" href="#L751">751</a> <em class="jxr_javadoccomment"> * @param <T> The value type.</em>
+<a class="jxr_linenumber" name="L752" href="#L752">752</a> <em class="jxr_javadoccomment"> * @param value The value being checked.</em>
+<a class="jxr_linenumber" name="L753" href="#L753">753</a> <em class="jxr_javadoccomment"> * @return <jk>true</jk> if the specified object is not <jk>null</jk>.</em>
<a class="jxr_linenumber" name="L754" href="#L754">754</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L755" href="#L755">755</a> @SafeVarargs
-<a class="jxr_linenumber" name="L756" href="#L756">756</a> @SuppressWarnings(<span class="jxr_string">"unchecked"</span>)
-<a class="jxr_linenumber" name="L757" href="#L757">757</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <K,V> LinkedHashMap<K,V> map(Object...values) { <em class="jxr_comment">// NOSONAR</em>
-<a class="jxr_linenumber" name="L758" href="#L758">758</a> <strong class="jxr_keyword">var</strong> m = <strong class="jxr_keyword">new</strong> LinkedHashMap<K,V>();
-<a class="jxr_linenumber" name="L759" href="#L759">759</a> <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">var</strong> i = 0; i < values.length; i += 2) {
-<a class="jxr_linenumber" name="L760" href="#L760">760</a> m.put((K)values[i], (V)values[i + 1]);
-<a class="jxr_linenumber" name="L761" href="#L761">761</a> }
-<a class="jxr_linenumber" name="L762" href="#L762">762</a> <strong class="jxr_keyword">return</strong> m;
-<a class="jxr_linenumber" name="L763" href="#L763">763</a> }
-<a class="jxr_linenumber" name="L764" href="#L764">764</a>
-<a class="jxr_linenumber" name="L765" href="#L765">765</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L766" href="#L766">766</a> <em class="jxr_javadoccomment"> * Returns <jk>null</jk> for the specified type.</em>
-<a class="jxr_linenumber" name="L767" href="#L767">767</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L768" href="#L768">768</a> <em class="jxr_javadoccomment"> * @param <T> The type.</em>
-<a class="jxr_linenumber" name="L769" href="#L769">769</a> <em class="jxr_javadoccomment"> * @param type The type class.</em>
-<a class="jxr_linenumber" name="L770" href="#L770">770</a> <em class="jxr_javadoccomment"> * @return <jk>null</jk>.</em>
-<a class="jxr_linenumber" name="L771" href="#L771">771</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L772" href="#L772">772</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <T> T n(Class<T> type) {
-<a class="jxr_linenumber" name="L773" href="#L773">773</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="L774" href="#L774">774</a> }
-<a class="jxr_linenumber" name="L775" href="#L775">775</a>
-<a class="jxr_linenumber" name="L776" href="#L776">776</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L777" href="#L777">777</a> <em class="jxr_javadoccomment"> * Returns <jk>null</jk> for the specified array type.</em>
-<a class="jxr_linenumber" name="L778" href="#L778">778</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L779" href="#L779">779</a> <em class="jxr_javadoccomment"> * @param <T> The component type.</em>
-<a class="jxr_linenumber" name="L780" href="#L780">780</a> <em class="jxr_javadoccomment"> * @param type The component type class.</em>
-<a class="jxr_linenumber" name="L781" href="#L781">781</a> <em class="jxr_javadoccomment"> * @return <jk>null</jk>.</em>
-<a class="jxr_linenumber" name="L782" href="#L782">782</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L783" href="#L783">783</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <T> T[] na(Class<T> type) {
-<a class="jxr_linenumber" name="L784" href="#L784">784</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="L785" href="#L785">785</a> }
-<a class="jxr_linenumber" name="L786" href="#L786">786</a>
-<a class="jxr_linenumber" name="L787" href="#L787">787</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L788" href="#L788">788</a> <em class="jxr_javadoccomment"> * Null-safe not-equals check.</em>
-<a class="jxr_linenumber" name="L789" href="#L789">789</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L790" href="#L790">790</a> <em class="jxr_javadoccomment"> * @param <T> The object type.</em>
-<a class="jxr_linenumber" name="L791" href="#L791">791</a> <em class="jxr_javadoccomment"> * @param s1 Object 1.</em>
-<a class="jxr_linenumber" name="L792" href="#L792">792</a> <em class="jxr_javadoccomment"> * @param s2 Object 2.</em>
-<a class="jxr_linenumber" name="L793" href="#L793">793</a> <em class="jxr_javadoccomment"> * @return <jk>true</jk> if the objects are not equal.</em>
-<a class="jxr_linenumber" name="L794" href="#L794">794</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L795" href="#L795">795</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <T> <strong class="jxr_keyword">boolean</strong> ne(T s1, T s2) {
-<a class="jxr_linenumber" name="L796" href="#L796">796</a> <strong class="jxr_keyword">return</strong> ! eq(s1, s2);
-<a class="jxr_linenumber" name="L797" href="#L797">797</a> }
-<a class="jxr_linenumber" name="L798" href="#L798">798</a>
-<a class="jxr_linenumber" name="L799" href="#L799">799</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L800" href="#L800">800</a> <em class="jxr_javadoccomment"> * Tests two objects for inequality, gracefully handling nulls.</em>
-<a class="jxr_linenumber" name="L801" href="#L801">801</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L802" href="#L802">802</a> <em class="jxr_javadoccomment"> * @param <T> Object 1 type.</em>
-<a class="jxr_linenumber" name="L803" href="#L803">803</a> <em class="jxr_javadoccomment"> * @param <U> Object 2 type.</em>
-<a class="jxr_linenumber" name="L804" href="#L804">804</a> <em class="jxr_javadoccomment"> * @param o1 Object 1.</em>
-<a class="jxr_linenumber" name="L805" href="#L805">805</a> <em class="jxr_javadoccomment"> * @param o2 Object 2.</em>
-<a class="jxr_linenumber" name="L806" href="#L806">806</a> <em class="jxr_javadoccomment"> * @param test The test to use for equality.</em>
-<a class="jxr_linenumber" name="L807" href="#L807">807</a> <em class="jxr_javadoccomment"> * @return <jk>false</jk> if both objects are equal based on the test.</em>
-<a class="jxr_linenumber" name="L808" href="#L808">808</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L809" href="#L809">809</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <T,U> <strong class="jxr_keyword">boolean</strong> ne(T o1, U o2, BiPredicate<T,U> test) {
-<a class="jxr_linenumber" name="L810" href="#L810">810</a> <strong class="jxr_keyword">if</strong> (o1 == <strong class="jxr_keyword">null</strong>)
-<a class="jxr_linenumber" name="L811" href="#L811">811</a> <strong class="jxr_keyword">return</strong> nn(o2);
-<a class="jxr_linenumber" name="L812" href="#L812">812</a> <strong class="jxr_keyword">if</strong> (o2 == <strong class="jxr_keyword">null</strong>)
-<a class="jxr_linenumber" name="L813" href="#L813">813</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
-<a class="jxr_linenumber" name="L814" href="#L814">814</a> <strong class="jxr_keyword">if</strong> (o1 == o2)
-<a class="jxr_linenumber" name="L815" href="#L815">815</a> <strong class="jxr_keyword">return</strong> false;
-<a class="jxr_linenumber" name="L816" href="#L816">816</a> <strong class="jxr_keyword">return</strong> ! test.test(o1, o2);
-<a class="jxr_linenumber" name="L817" href="#L817">817</a> }
-<a class="jxr_linenumber" name="L818" href="#L818">818</a>
-<a class="jxr_linenumber" name="L819" href="#L819">819</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L820" href="#L820">820</a> <em class="jxr_javadoccomment"> * Returns <jk>true</jk> if the specified object is not <jk>null</jk>.</em>
-<a class="jxr_linenumber" name="L821" href="#L821">821</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L822" href="#L822">822</a> <em class="jxr_javadoccomment"> * <p></em>
-<a class="jxr_linenumber" name="L823" href="#L823">823</a> <em class="jxr_javadoccomment"> * Equivalent to <c><jv>o</jv> != <jk>null</jk></c>, but with a more readable method name.</em>
-<a class="jxr_linenumber" name="L824" href="#L824">824</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L825" href="#L825">825</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Example:</h5></em>
-<a class="jxr_linenumber" name="L826" href="#L826">826</a> <em class="jxr_javadoccomment"> * <p class='bjava'></em>
-<a class="jxr_linenumber" name="L827" href="#L827">827</a> <em class="jxr_javadoccomment"> * <jk>import static</jk> org.apache.juneau.common.utils.Utils.*;</em>
-<a class="jxr_linenumber" name="L828" href="#L828">828</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L829" href="#L829">829</a> <em class="jxr_javadoccomment"> * <jk>if</jk> (<jsm>nn</jsm>(<jv>myObject</jv>)) {</em>
-<a class="jxr_linenumber" name="L830" href="#L830">830</a> <em class="jxr_javadoccomment"> * <jc>// Do something with non-null object</jc></em>
-<a class="jxr_linenumber" name="L831" href="#L831">831</a> <em class="jxr_javadoccomment"> * }</em>
-<a class="jxr_linenumber" name="L832" href="#L832">832</a> <em class="jxr_javadoccomment"> * </p></em>
-<a class="jxr_linenumber" name="L833" href="#L833">833</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L834" href="#L834">834</a> <em class="jxr_javadoccomment"> * @param o The object to check.</em>
-<a class="jxr_linenumber" name="L835" href="#L835">835</a> <em class="jxr_javadoccomment"> * @return <jk>true</jk> if the specified object is not <jk>null</jk>.</em>
-<a class="jxr_linenumber" name="L836" href="#L836">836</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L837" href="#L837">837</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> nn(Object o) {
-<a class="jxr_linenumber" name="L838" href="#L838">838</a> <strong class="jxr_keyword">return</strong> isNotNull(o);
-<a class="jxr_linenumber" name="L839" href="#L839">839</a> }
-<a class="jxr_linenumber" name="L840" href="#L840">840</a>
-<a class="jxr_linenumber" name="L841" href="#L841">841</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L842" href="#L842">842</a> <em class="jxr_javadoccomment"> * Tests two strings for non-equality ignoring case, but gracefully handles nulls.</em>
-<a class="jxr_linenumber" name="L843" href="#L843">843</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L844" href="#L844">844</a> <em class="jxr_javadoccomment"> * @param s1 String 1.</em>
-<a class="jxr_linenumber" name="L845" href="#L845">845</a> <em class="jxr_javadoccomment"> * @param s2 String 2.</em>
-<a class="jxr_linenumber" name="L846" href="#L846">846</a> <em class="jxr_javadoccomment"> * @return <jk>true</jk> if the strings are not equal ignoring case.</em>
-<a class="jxr_linenumber" name="L847" href="#L847">847</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L848" href="#L848">848</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> neic(String s1, String s2) {
-<a class="jxr_linenumber" name="L849" href="#L849">849</a> <strong class="jxr_keyword">return</strong> ! eqic(s1, s2);
-<a class="jxr_linenumber" name="L850" href="#L850">850</a> }
-<a class="jxr_linenumber" name="L851" href="#L851">851</a>
-<a class="jxr_linenumber" name="L852" href="#L852">852</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L853" href="#L853">853</a> <em class="jxr_javadoccomment"> * Returns a null list.</em>
-<a class="jxr_linenumber" name="L854" href="#L854">854</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L855" href="#L855">855</a> <em class="jxr_javadoccomment"> * @param <T> The element type.</em>
-<a class="jxr_linenumber" name="L856" href="#L856">856</a> <em class="jxr_javadoccomment"> * @param type The element type class.</em>
-<a class="jxr_linenumber" name="L857" href="#L857">857</a> <em class="jxr_javadoccomment"> * @return <jk>null</jk>.</em>
-<a class="jxr_linenumber" name="L858" href="#L858">858</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L859" href="#L859">859</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <T> List<T> nlist(Class<T> type) {
-<a class="jxr_linenumber" name="L860" href="#L860">860</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="L861" href="#L861">861</a> }
-<a class="jxr_linenumber" name="L862" href="#L862">862</a>
-<a class="jxr_linenumber" name="L863" href="#L863">863</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L864" href="#L864">864</a> <em class="jxr_javadoccomment"> * Returns a null map.</em>
-<a class="jxr_linenumber" name="L865" href="#L865">865</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L866" href="#L866">866</a> <em class="jxr_javadoccomment"> * @param <K> The key type.</em>
-<a class="jxr_linenumber" name="L867" href="#L867">867</a> <em class="jxr_javadoccomment"> * @param <V> The value type.</em>
-<a class="jxr_linenumber" name="L868" href="#L868">868</a> <em class="jxr_javadoccomment"> * @param keyType The key type class.</em>
-<a class="jxr_linenumber" name="L869" href="#L869">869</a> <em class="jxr_javadoccomment"> * @param valueType The value type class.</em>
-<a class="jxr_linenumber" name="L870" href="#L870">870</a> <em class="jxr_javadoccomment"> * @return <jk>null</jk>.</em>
-<a class="jxr_linenumber" name="L871" href="#L871">871</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L872" href="#L872">872</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <K,V> Map<K,V> nmap(Class<K> keyType, Class<V> valueType) {
-<a class="jxr_linenumber" name="L873" href="#L873">873</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="L874" href="#L874">874</a> }
-<a class="jxr_linenumber" name="L875" href="#L875">875</a>
-<a class="jxr_linenumber" name="L876" href="#L876">876</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L877" href="#L877">877</a> <em class="jxr_javadoccomment"> * Shortcut for calling {@link Optional#ofNullable(Object)}.</em>
+<a class="jxr_linenumber" name="L755" href="#L755">755</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <T> <strong class="jxr_keyword">boolean</strong> isNotNull(T value) {
+<a class="jxr_linenumber" name="L756" href="#L756">756</a> <strong class="jxr_keyword">return</strong> value != <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="L757" href="#L757">757</a> }
+<a class="jxr_linenumber" name="L758" href="#L758">758</a>
+<a class="jxr_linenumber" name="L759" href="#L759">759</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L760" href="#L760">760</a> <em class="jxr_javadoccomment"> * Returns <jk>true</jk> if the specified boolean is not <jk>null</jk> and is <jk>true</jk>.</em>
+<a class="jxr_linenumber" name="L761" href="#L761">761</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L762" href="#L762">762</a> <em class="jxr_javadoccomment"> * @param value The value being checked.</em>
+<a class="jxr_linenumber" name="L763" href="#L763">763</a> <em class="jxr_javadoccomment"> * @return <jk>true</jk> if the specified boolean is not <jk>null</jk> and is <jk>true</jk>.</em>
+<a class="jxr_linenumber" name="L764" href="#L764">764</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L765" href="#L765">765</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> isTrue(Boolean value) {
+<a class="jxr_linenumber" name="L766" href="#L766">766</a> <strong class="jxr_keyword">return</strong> nn(value) && value;
+<a class="jxr_linenumber" name="L767" href="#L767">767</a> }
+<a class="jxr_linenumber" name="L768" href="#L768">768</a>
+<a class="jxr_linenumber" name="L769" href="#L769">769</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L770" href="#L770">770</a> <em class="jxr_javadoccomment"> * Shortcut for creating a modifiable list out of an array of values.</em>
+<a class="jxr_linenumber" name="L771" href="#L771">771</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L772" href="#L772">772</a> <em class="jxr_javadoccomment"> * @param <T> The element type.</em>
+<a class="jxr_linenumber" name="L773" href="#L773">773</a> <em class="jxr_javadoccomment"> * @param values The values to add to the list.</em>
+<a class="jxr_linenumber" name="L774" href="#L774">774</a> <em class="jxr_javadoccomment"> * @return A modifiable list containing the specified values.</em>
+<a class="jxr_linenumber" name="L775" href="#L775">775</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L776" href="#L776">776</a> @SafeVarargs
+<a class="jxr_linenumber" name="L777" href="#L777">777</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <T> List<T> list(T...values) { <em class="jxr_comment">// NOSONAR</em>
+<a class="jxr_linenumber" name="L778" href="#L778">778</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> ArrayList<>(Arrays.asList(values));
+<a class="jxr_linenumber" name="L779" href="#L779">779</a> }
+<a class="jxr_linenumber" name="L780" href="#L780">780</a>
+<a class="jxr_linenumber" name="L781" href="#L781">781</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L782" href="#L782">782</a> <em class="jxr_javadoccomment"> * Convenience method for creating an {@link ArrayList} of the specified size.</em>
+<a class="jxr_linenumber" name="L783" href="#L783">783</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L784" href="#L784">784</a> <em class="jxr_javadoccomment"> * @param <E> The element type.</em>
+<a class="jxr_linenumber" name="L785" href="#L785">785</a> <em class="jxr_javadoccomment"> * @param size The initial size of the list.</em>
+<a class="jxr_linenumber" name="L786" href="#L786">786</a> <em class="jxr_javadoccomment"> * @return A new modifiable list.</em>
+<a class="jxr_linenumber" name="L787" href="#L787">787</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L788" href="#L788">788</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <E> ArrayList<E> listOfSize(<strong class="jxr_keyword">int</strong> size) {
+<a class="jxr_linenumber" name="L789" href="#L789">789</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> ArrayList<>(size);
+<a class="jxr_linenumber" name="L790" href="#L790">790</a> }
+<a class="jxr_linenumber" name="L791" href="#L791">791</a>
+<a class="jxr_linenumber" name="L792" href="#L792">792</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L793" href="#L793">793</a> <em class="jxr_javadoccomment"> * Shortcut for creating a modifiable map out of an array of key-value pairs.</em>
+<a class="jxr_linenumber" name="L794" href="#L794">794</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L795" href="#L795">795</a> <em class="jxr_javadoccomment"> * @param <K> The key type.</em>
+<a class="jxr_linenumber" name="L796" href="#L796">796</a> <em class="jxr_javadoccomment"> * @param <V> The value type.</em>
+<a class="jxr_linenumber" name="L797" href="#L797">797</a> <em class="jxr_javadoccomment"> * @param values The key-value pairs (alternating keys and values).</em>
+<a class="jxr_linenumber" name="L798" href="#L798">798</a> <em class="jxr_javadoccomment"> * @return A modifiable LinkedHashMap containing the specified key-value pairs.</em>
+<a class="jxr_linenumber" name="L799" href="#L799">799</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L800" href="#L800">800</a> @SafeVarargs
+<a class="jxr_linenumber" name="L801" href="#L801">801</a> @SuppressWarnings(<span class="jxr_string">"unchecked"</span>)
+<a class="jxr_linenumber" name="L802" href="#L802">802</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <K,V> LinkedHashMap<K,V> map(Object...values) { <em class="jxr_comment">// NOSONAR</em>
+<a class="jxr_linenumber" name="L803" href="#L803">803</a> <strong class="jxr_keyword">var</strong> m = <strong class="jxr_keyword">new</strong> LinkedHashMap<K,V>();
+<a class="jxr_linenumber" name="L804" href="#L804">804</a> <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">var</strong> i = 0; i < values.length; i += 2) {
+<a class="jxr_linenumber" name="L805" href="#L805">805</a> m.put((K)values[i], (V)values[i + 1]);
+<a class="jxr_linenumber" name="L806" href="#L806">806</a> }
+<a class="jxr_linenumber" name="L807" href="#L807">807</a> <strong class="jxr_keyword">return</strong> m;
+<a class="jxr_linenumber" name="L808" href="#L808">808</a> }
+<a class="jxr_linenumber" name="L809" href="#L809">809</a>
+<a class="jxr_linenumber" name="L810" href="#L810">810</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L811" href="#L811">811</a> <em class="jxr_javadoccomment"> * Returns <jk>null</jk> for the specified type.</em>
+<a class="jxr_linenumber" name="L812" href="#L812">812</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L813" href="#L813">813</a> <em class="jxr_javadoccomment"> * @param <T> The type.</em>
+<a class="jxr_linenumber" name="L814" href="#L814">814</a> <em class="jxr_javadoccomment"> * @param type The type class.</em>
+<a class="jxr_linenumber" name="L815" href="#L815">815</a> <em class="jxr_javadoccomment"> * @return <jk>null</jk>.</em>
+<a class="jxr_linenumber" name="L816" href="#L816">816</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L817" href="#L817">817</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <T> T n(Class<T> type) {
+<a class="jxr_linenumber" name="L818" href="#L818">818</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="L819" href="#L819">819</a> }
+<a class="jxr_linenumber" name="L820" href="#L820">820</a>
+<a class="jxr_linenumber" name="L821" href="#L821">821</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L822" href="#L822">822</a> <em class="jxr_javadoccomment"> * Returns <jk>null</jk> for the specified array type.</em>
+<a class="jxr_linenumber" name="L823" href="#L823">823</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L824" href="#L824">824</a> <em class="jxr_javadoccomment"> * @param <T> The component type.</em>
+<a class="jxr_linenumber" name="L825" href="#L825">825</a> <em class="jxr_javadoccomment"> * @param type The component type class.</em>
+<a class="jxr_linenumber" name="L826" href="#L826">826</a> <em class="jxr_javadoccomment"> * @return <jk>null</jk>.</em>
+<a class="jxr_linenumber" name="L827" href="#L827">827</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L828" href="#L828">828</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <T> T[] na(Class<T> type) {
+<a class="jxr_linenumber" name="L829" href="#L829">829</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="L830" href="#L830">830</a> }
+<a class="jxr_linenumber" name="L831" href="#L831">831</a>
+<a class="jxr_linenumber" name="L832" href="#L832">832</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L833" href="#L833">833</a> <em class="jxr_javadoccomment"> * Null-safe not-equals check.</em>
+<a class="jxr_linenumber" name="L834" href="#L834">834</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L835" href="#L835">835</a> <em class="jxr_javadoccomment"> * @param <T> The object type.</em>
+<a class="jxr_linenumber" name="L836" href="#L836">836</a> <em class="jxr_javadoccomment"> * @param s1 Object 1.</em>
+<a class="jxr_linenumber" name="L837" href="#L837">837</a> <em class="jxr_javadoccomment"> * @param s2 Object 2.</em>
+<a class="jxr_linenumber" name="L838" href="#L838">838</a> <em class="jxr_javadoccomment"> * @return <jk>true</jk> if the objects are not equal.</em>
+<a class="jxr_linenumber" name="L839" href="#L839">839</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L840" href="#L840">840</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <T> <strong class="jxr_keyword">boolean</strong> ne(T s1, T s2) {
+<a class="jxr_linenumber" name="L841" href="#L841">841</a> <strong class="jxr_keyword">return</strong> ! eq(s1, s2);
+<a class="jxr_linenumber" name="L842" href="#L842">842</a> }
+<a class="jxr_linenumber" name="L843" href="#L843">843</a>
+<a class="jxr_linenumber" name="L844" href="#L844">844</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L845" href="#L845">845</a> <em class="jxr_javadoccomment"> * Tests two objects for inequality, gracefully handling nulls.</em>
+<a class="jxr_linenumber" name="L846" href="#L846">846</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L847" href="#L847">847</a> <em class="jxr_javadoccomment"> * @param <T> Object 1 type.</em>
+<a class="jxr_linenumber" name="L848" href="#L848">848</a> <em class="jxr_javadoccomment"> * @param <U> Object 2 type.</em>
+<a class="jxr_linenumber" name="L849" href="#L849">849</a> <em class="jxr_javadoccomment"> * @param o1 Object 1.</em>
+<a class="jxr_linenumber" name="L850" href="#L850">850</a> <em class="jxr_javadoccomment"> * @param o2 Object 2.</em>
+<a class="jxr_linenumber" name="L851" href="#L851">851</a> <em class="jxr_javadoccomment"> * @param test The test to use for equality.</em>
+<a class="jxr_linenumber" name="L852" href="#L852">852</a> <em class="jxr_javadoccomment"> * @return <jk>false</jk> if both objects are equal based on the test.</em>
+<a class="jxr_linenumber" name="L853" href="#L853">853</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L854" href="#L854">854</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <T,U> <strong class="jxr_keyword">boolean</strong> ne(T o1, U o2, BiPredicate<T,U> test) {
+<a class="jxr_linenumber" name="L855" href="#L855">855</a> <strong class="jxr_keyword">if</strong> (o1 == <strong class="jxr_keyword">null</strong>)
+<a class="jxr_linenumber" name="L856" href="#L856">856</a> <strong class="jxr_keyword">return</strong> nn(o2);
+<a class="jxr_linenumber" name="L857" href="#L857">857</a> <strong class="jxr_keyword">if</strong> (o2 == <strong class="jxr_keyword">null</strong>)
+<a class="jxr_linenumber" name="L858" href="#L858">858</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
+<a class="jxr_linenumber" name="L859" href="#L859">859</a> <strong class="jxr_keyword">if</strong> (o1 == o2)
+<a class="jxr_linenumber" name="L860" href="#L860">860</a> <strong class="jxr_keyword">return</strong> false;
+<a class="jxr_linenumber" name="L861" href="#L861">861</a> <strong class="jxr_keyword">return</strong> ! test.test(o1, o2);
+<a class="jxr_linenumber" name="L862" href="#L862">862</a> }
+<a class="jxr_linenumber" name="L863" href="#L863">863</a>
+<a class="jxr_linenumber" name="L864" href="#L864">864</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L865" href="#L865">865</a> <em class="jxr_javadoccomment"> * Returns <jk>true</jk> if the specified object is not <jk>null</jk>.</em>
+<a class="jxr_linenumber" name="L866" href="#L866">866</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L867" href="#L867">867</a> <em class="jxr_javadoccomment"> * <p></em>
+<a class="jxr_linenumber" name="L868" href="#L868">868</a> <em class="jxr_javadoccomment"> * Equivalent to <c><jv>o</jv> != <jk>null</jk></c>, but with a more readable method name.</em>
+<a class="jxr_linenumber" name="L869" href="#L869">869</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L870" href="#L870">870</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Example:</h5></em>
+<a class="jxr_linenumber" name="L871" href="#L871">871</a> <em class="jxr_javadoccomment"> * <p class='bjava'></em>
+<a class="jxr_linenumber" name="L872" href="#L872">872</a> <em class="jxr_javadoccomment"> * <jk>import static</jk> org.apache.juneau.common.utils.Utils.*;</em>
+<a class="jxr_linenumber" name="L873" href="#L873">873</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L874" href="#L874">874</a> <em class="jxr_javadoccomment"> * <jk>if</jk> (<jsm>nn</jsm>(<jv>myObject</jv>)) {</em>
+<a class="jxr_linenumber" name="L875" href="#L875">875</a> <em class="jxr_javadoccomment"> * <jc>// Do something with non-null object</jc></em>
+<a class="jxr_linenumber" name="L876" href="#L876">876</a> <em class="jxr_javadoccomment"> * }</em>
+<a class="jxr_linenumber" name="L877" href="#L877">877</a> <em class="jxr_javadoccomment"> * </p></em>
<a class="jxr_linenumber" name="L878" href="#L878">878</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L879" href="#L879">879</a> <em class="jxr_javadoccomment"> * @param <T> The object type.</em>
-<a class="jxr_linenumber" name="L880" href="#L880">880</a> <em class="jxr_javadoccomment"> * @param t The object to wrap in an Optional.</em>
-<a class="jxr_linenumber" name="L881" href="#L881">881</a> <em class="jxr_javadoccomment"> * @return An Optional containing the specified object, or empty if <jk>null</jk>.</em>
-<a class="jxr_linenumber" name="L882" href="#L882">882</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L883" href="#L883">883</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <T> Optional<T> opt(T t) {
-<a class="jxr_linenumber" name="L884" href="#L884">884</a> <strong class="jxr_keyword">return</strong> Optional.ofNullable(t);
-<a class="jxr_linenumber" name="L885" href="#L885">885</a> }
-<a class="jxr_linenumber" name="L886" href="#L886">886</a>
-<a class="jxr_linenumber" name="L887" href="#L887">887</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L888" href="#L888">888</a> <em class="jxr_javadoccomment"> * Returns an empty Optional.</em>
-<a class="jxr_linenumber" name="L889" href="#L889">889</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L890" href="#L890">890</a> <em class="jxr_javadoccomment"> * @param <T> The object type.</em>
-<a class="jxr_linenumber" name="L891" href="#L891">891</a> <em class="jxr_javadoccomment"> * @return An empty Optional.</em>
+<a class="jxr_linenumber" name="L879" href="#L879">879</a> <em class="jxr_javadoccomment"> * @param o The object to check.</em>
+<a class="jxr_linenumber" name="L880" href="#L880">880</a> <em class="jxr_javadoccomment"> * @return <jk>true</jk> if the specified object is not <jk>null</jk>.</em>
+<a class="jxr_linenumber" name="L881" href="#L881">881</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L882" href="#L882">882</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> nn(Object o) {
+<a class="jxr_linenumber" name="L883" href="#L883">883</a> <strong class="jxr_keyword">return</strong> isNotNull(o);
+<a class="jxr_linenumber" name="L884" href="#L884">884</a> }
+<a class="jxr_linenumber" name="L885" href="#L885">885</a>
+<a class="jxr_linenumber" name="L886" href="#L886">886</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L887" href="#L887">887</a> <em class="jxr_javadoccomment"> * Tests two strings for non-equality ignoring case, but gracefully handles nulls.</em>
+<a class="jxr_linenumber" name="L888" href="#L888">888</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L889" href="#L889">889</a> <em class="jxr_javadoccomment"> * @param s1 String 1.</em>
+<a class="jxr_linenumber" name="L890" href="#L890">890</a> <em class="jxr_javadoccomment"> * @param s2 String 2.</em>
+<a class="jxr_linenumber" name="L891" href="#L891">891</a> <em class="jxr_javadoccomment"> * @return <jk>true</jk> if the strings are not equal ignoring case.</em>
<a class="jxr_linenumber" name="L892" href="#L892">892</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L893" href="#L893">893</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <T> Optional<T> opte() {
-<a class="jxr_linenumber" name="L894" href="#L894">894</a> <strong class="jxr_keyword">return</strong> Optional.empty();
+<a class="jxr_linenumber" name="L893" href="#L893">893</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> neic(String s1, String s2) {
+<a class="jxr_linenumber" name="L894" href="#L894">894</a> <strong class="jxr_keyword">return</strong> ! eqic(s1, s2);
<a class="jxr_linenumber" name="L895" href="#L895">895</a> }
<a class="jxr_linenumber" name="L896" href="#L896">896</a>
<a class="jxr_linenumber" name="L897" href="#L897">897</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L898" href="#L898">898</a> <em class="jxr_javadoccomment"> * Prints all the specified lines to System.out.</em>
+<a class="jxr_linenumber" name="L898" href="#L898">898</a> <em class="jxr_javadoccomment"> * Returns a null list.</em>
<a class="jxr_linenumber" name="L899" href="#L899">899</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L900" href="#L900">900</a> <em class="jxr_javadoccomment"> * @param lines The lines to print.</em>
-<a class="jxr_linenumber" name="L901" href="#L901">901</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L902" href="#L902">902</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">void</strong> printLines(String[] lines) {
-<a class="jxr_linenumber" name="L903" href="#L903">903</a> <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">var</strong> i = 0; i < lines.length; i++)
-<a class="jxr_linenumber" name="L904" href="#L904">904</a> System.out.println(String.format(<span class="jxr_string">"%4s:"</span> + lines[i], i + 1)); <em class="jxr_comment">// NOSONAR - NOT DEBUG</em>
-<a class="jxr_linenumber" name="L905" href="#L905">905</a> }
-<a class="jxr_linenumber" name="L906" href="#L906">906</a>
-<a class="jxr_linenumber" name="L907" href="#L907">907</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L908" href="#L908">908</a> <em class="jxr_javadoccomment"> * Shortcut for calling {@link StringUtils#readable(Object)}.</em>
-<a class="jxr_linenumber" name="L909" href="#L909">909</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L910" href="#L910">910</a> <em class="jxr_javadoccomment"> * <p>Converts an arbitrary object to a readable string format suitable for debugging and testing.</em>
-<a class="jxr_linenumber" name="L911" href="#L911">911</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L912" href="#L912">912</a> <em class="jxr_javadoccomment"> * @param o The object to convert to readable format. Can be <jk>null</jk>.</em>
-<a class="jxr_linenumber" name="L913" href="#L913">913</a> <em class="jxr_javadoccomment"> * @return A readable string representation of the object, or <jk>null</jk> if the input was <jk>null</jk>.</em>
-<a class="jxr_linenumber" name="L914" href="#L914">914</a> <em class="jxr_javadoccomment"> * @see StringUtils#readable(Object)</em>
-<a class="jxr_linenumber" name="L915" href="#L915">915</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L916" href="#L916">916</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> String r(Object o) {
-<a class="jxr_linenumber" name="L917" href="#L917">917</a> <strong class="jxr_keyword">return</strong> StringUtils.readable(o);
-<a class="jxr_linenumber" name="L918" href="#L918">918</a> }
-<a class="jxr_linenumber" name="L919" href="#L919">919</a>
-<a class="jxr_linenumber" name="L920" href="#L920">920</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L921" href="#L921">921</a> <em class="jxr_javadoccomment"> * Shortcut for converting an object to a string.</em>
-<a class="jxr_linenumber" name="L922" href="#L922">922</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L923" href="#L923">923</a> <em class="jxr_javadoccomment"> * @param val The object to convert.</em>
-<a class="jxr_linenumber" name="L924" href="#L924">924</a> <em class="jxr_javadoccomment"> * @return The string representation of the object, or <jk>null</jk> if the object is <jk>null</jk>.</em>
-<a class="jxr_linenumber" name="L925" href="#L925">925</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L926" href="#L926">926</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> String s(Object val) {
-<a class="jxr_linenumber" name="L927" href="#L927">927</a> <strong class="jxr_keyword">return</strong> val == <strong class="jxr_keyword">null</strong> ? <strong class="jxr_keyword">null</strong> : val.toString();
-<a class="jxr_linenumber" name="L928" href="#L928">928</a> }
-<a class="jxr_linenumber" name="L929" href="#L929">929</a>
-<a class="jxr_linenumber" name="L930" href="#L930">930</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L931" href="#L931">931</a> <em class="jxr_javadoccomment"> * Runs a snippet of code and encapsulates any throwable inside a {@link RuntimeException}.</em>
-<a class="jxr_linenumber" name="L932" href="#L932">932</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L933" href="#L933">933</a> <em class="jxr_javadoccomment"> * @param snippet The snippet of code to run.</em>
-<a class="jxr_linenumber" name="L934" href="#L934">934</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L935" href="#L935">935</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">void</strong> safe(<a name="Snippet" href="../../../../../org/apache/juneau/common/function/Snippet.html#Snippet">Snippet</a> snippet) {
-<a class="jxr_linenumber" name="L936" href="#L936">936</a> <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="L937" href="#L937">937</a> snippet.run();
-<a class="jxr_linenumber" name="L938" href="#L938">938</a> } <strong class="jxr_keyword">catch</strong> (RuntimeException t) {
-<a class="jxr_linenumber" name="L939" href="#L939">939</a> <strong class="jxr_keyword">throw</strong> t;
-<a class="jxr_linenumber" name="L940" href="#L940">940</a> } <strong class="jxr_keyword">catch</strong> (Throwable t) {
-<a class="jxr_linenumber" name="L941" href="#L941">941</a> <strong class="jxr_keyword">throw</strong> ThrowableUtils.asRuntimeException(t);
-<a class="jxr_linenumber" name="L942" href="#L942">942</a> }
-<a class="jxr_linenumber" name="L943" href="#L943">943</a> }
-<a class="jxr_linenumber" name="L944" href="#L944">944</a>
-<a class="jxr_linenumber" name="L945" href="#L945">945</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L946" href="#L946">946</a> <em class="jxr_javadoccomment"> * Used to wrap code that returns a value but throws an exception.</em>
-<a class="jxr_linenumber" name="L947" href="#L947">947</a> <em class="jxr_javadoccomment"> * Useful in cases where you're trying to execute code in a fluent method call</em>
-<a class="jxr_linenumber" name="L948" href="#L948">948</a> <em class="jxr_javadoccomment"> * or are trying to eliminate untestable catch blocks in code.</em>
-<a class="jxr_linenumber" name="L949" href="#L949">949</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L950" href="#L950">950</a> <em class="jxr_javadoccomment"> * @param <T> The return type.</em>
-<a class="jxr_linenumber" name="L951" href="#L951">951</a> <em class="jxr_javadoccomment"> * @param s The supplier that may throw an exception.</em>
-<a class="jxr_linenumber" name="L952" href="#L952">952</a> <em class="jxr_javadoccomment"> * @return The result of the supplier execution.</em>
-<a class="jxr_linenumber" name="L953" href="#L953">953</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L954" href="#L954">954</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <T> T safe(ThrowingSupplier<T> s) {
-<a class="jxr_linenumber" name="L955" href="#L955">955</a> <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="L956" href="#L956">956</a> <strong class="jxr_keyword">return</strong> s.get();
-<a class="jxr_linenumber" name="L957" href="#L957">957</a> } <strong class="jxr_keyword">catch</strong> (RuntimeException e) {
-<a class="jxr_linenumber" name="L958" href="#L958">958</a> <strong class="jxr_keyword">throw</strong> e;
-<a class="jxr_linenumber" name="L959" href="#L959">959</a> } <strong class="jxr_keyword">catch</strong> (Exception e) {
-<a class="jxr_linenumber" name="L960" href="#L960">960</a> <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> RuntimeException(e);
-<a class="jxr_linenumber" name="L961" href="#L961">961</a> }
-<a class="jxr_linenumber" name="L962" href="#L962">962</a> }
-<a class="jxr_linenumber" name="L963" href="#L963">963</a>
-<a class="jxr_linenumber" name="L964" href="#L964">964</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L965" href="#L965">965</a> <em class="jxr_javadoccomment"> * Allows you to wrap a supplier that throws an exception so that it can be used in a fluent interface.</em>
-<a class="jxr_linenumber" name="L966" href="#L966">966</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L967" href="#L967">967</a> <em class="jxr_javadoccomment"> * @param <T> The supplier type.</em>
-<a class="jxr_linenumber" name="L968" href="#L968">968</a> <em class="jxr_javadoccomment"> * @param supplier The supplier throwing an exception.</em>
-<a class="jxr_linenumber" name="L969" href="#L969">969</a> <em class="jxr_javadoccomment"> * @return The supplied result.</em>
-<a class="jxr_linenumber" name="L970" href="#L970">970</a> <em class="jxr_javadoccomment"> * @throws RuntimeException if supplier threw an exception.</em>
-<a class="jxr_linenumber" name="L971" href="#L971">971</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L972" href="#L972">972</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <T> T safeSupplier(ThrowableUtils.SupplierWithThrowable<T> supplier) {
-<a class="jxr_linenumber" name="L973" href="#L973">973</a> <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="L974" href="#L974">974</a> <strong class="jxr_keyword">return</strong> supplier.get();
-<a class="jxr_linenumber" name="L975" href="#L975">975</a> } <strong class="jxr_keyword">catch</strong> (RuntimeException t) {
-<a class="jxr_linenumber" name="L976" href="#L976">976</a> <strong class="jxr_keyword">throw</strong> t;
-<a class="jxr_linenumber" name="L977" href="#L977">977</a> } <strong class="jxr_keyword">catch</strong> (Throwable t) {
-<a class="jxr_linenumber" name="L978" href="#L978">978</a> <strong class="jxr_keyword">throw</strong> ThrowableUtils.asRuntimeException(t);
-<a class="jxr_linenumber" name="L979" href="#L979">979</a> }
-<a class="jxr_linenumber" name="L980" href="#L980">980</a> }
-<a class="jxr_linenumber" name="L981" href="#L981">981</a>
-<a class="jxr_linenumber" name="L982" href="#L982">982</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L983" href="#L983">983</a> <em class="jxr_javadoccomment"> * Safely converts an object to its string representation, handling any exceptions that may occur.</em>
-<a class="jxr_linenumber" name="L984" href="#L984">984</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L985" href="#L985">985</a> <em class="jxr_javadoccomment"> * <p>This method provides a fail-safe way to call {@code toString()} on any object, ensuring that</em>
-<a class="jxr_linenumber" name="L986" href="#L986">986</a> <em class="jxr_javadoccomment"> * exceptions thrown by problematic {@code toString()} implementations don't propagate up the call stack.</em>
-<a class="jxr_linenumber" name="L987" href="#L987">987</a> <em class="jxr_javadoccomment"> * Instead, it returns a descriptive error message containing the exception type and message.</p></em>
-<a class="jxr_linenumber" name="L988" href="#L988">988</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L989" href="#L989">989</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Exception Handling:</h5></em>
-<a class="jxr_linenumber" name="L990" href="#L990">990</a> <em class="jxr_javadoccomment"> * <p>If the object's {@code toString()} method throws any {@code Throwable}, this method catches it</em>
-<a class="jxr_linenumber" name="L991" href="#L991">991</a> <em class="jxr_javadoccomment"> * and returns a formatted string in the form: {@code "<ExceptionType>: <exception message>"}.</p></em>
-<a class="jxr_linenumber" name="L992" href="#L992">992</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L993" href="#L993">993</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Examples:</h5></em>
-<a class="jxr_linenumber" name="L994" href="#L994">994</a> <em class="jxr_javadoccomment"> * <p class='bjava'></em>
-<a class="jxr_linenumber" name="L995" href="#L995">995</a> <em class="jxr_javadoccomment"> * <jc>// Normal case - returns object's toString() result</jc></em>
-<a class="jxr_linenumber" name="L996" href="#L996">996</a> <em class="jxr_javadoccomment"> * String <jv>result</jv> = <jsm>safeToString</jsm>(<js>"Hello"</js>);</em>
-<a class="jxr_linenumber" name="L997" href="#L997">997</a> <em class="jxr_javadoccomment"> * <jc>// result = "Hello"</jc></em>
-<a class="jxr_linenumber" name="L998" href="#L998">998</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L999" href="#L999">999</a> <em class="jxr_javadoccomment"> * <jc>// Exception case - returns formatted error message</jc></em>
-<a class="jxr_linenumber" name="L1000" href="#L1000">1000</a> <em class="jxr_javadoccomment"> * Object <jv>problematic</jv> = <jk>new</jk> Object() {</em>
-<a class="jxr_linenumber" name="L1001" href="#L1001">1001</a> <em class="jxr_javadoccomment"> * <ja>@Override</ja></em>
-<a class="jxr_linenumber" name="L1002" href="#L1002">1002</a> <em class="jxr_javadoccomment"> * <jk>public</jk> String toString() {</em>
-<a class="jxr_linenumber" name="L1003" href="#L1003">1003</a> <em class="jxr_javadoccomment"> * <jk>throw new</jk> RuntimeException(<js>"Cannot convert"</js>);</em>
-<a class="jxr_linenumber" name="L1004" href="#L1004">1004</a> <em class="jxr_javadoccomment"> * }</em>
-<a class="jxr_linenumber" name="L1005" href="#L1005">1005</a> <em class="jxr_javadoccomment"> * };</em>
-<a class="jxr_linenumber" name="L1006" href="#L1006">1006</a> <em class="jxr_javadoccomment"> * String <jv>result</jv> = <jsm>safeToString</jsm>(<jv>problematic</jv>);</em>
-<a class="jxr_linenumber" name="L1007" href="#L1007">1007</a> <em class="jxr_javadoccomment"> * <jc>// result = "RuntimeException: Cannot convert"</jc></em>
-<a class="jxr_linenumber" name="L1008" href="#L1008">1008</a> <em class="jxr_javadoccomment"> * </p></em>
-<a class="jxr_linenumber" name="L1009" href="#L1009">1009</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L1010" href="#L1010">1010</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Use Cases:</h5></em>
-<a class="jxr_linenumber" name="L1011" href="#L1011">1011</a> <em class="jxr_javadoccomment"> * <ul></em>
-<a class="jxr_linenumber" name="L1012" href="#L1012">1012</a> <em class="jxr_javadoccomment"> * <li><b>Object stringification in converters:</b> Safe conversion of arbitrary objects to strings</li></em>
-<a class="jxr_linenumber" name="L1013" href="#L1013">1013</a> <em class="jxr_javadoccomment"> * <li><b>Debugging and logging:</b> Ensures log statements never fail due to toString() exceptions</li></em>
-<a class="jxr_linenumber" name="L1014" href="#L1014">1014</a> <em class="jxr_javadoccomment"> * <li><b>Error handling:</b> Graceful degradation when objects have problematic string representations</li></em>
-<a class="jxr_linenumber" name="L1015" href="#L1015">1015</a> <em class="jxr_javadoccomment"> * <li><b>Third-party object integration:</b> Safe handling of objects from external libraries</li></em>
-<a class="jxr_linenumber" name="L1016" href="#L1016">1016</a> <em class="jxr_javadoccomment"> * </ul></em>
-<a class="jxr_linenumber" name="L1017" href="#L1017">1017</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L1018" href="#L1018">1018</a> <em class="jxr_javadoccomment"> * @param o The object to convert to a string. May be any object including <jk>null</jk>.</em>
-<a class="jxr_linenumber" name="L1019" href="#L1019">1019</a> <em class="jxr_javadoccomment"> * @return The string representation of the object, or a formatted error message if toString() throws an exception.</em>
-<a class="jxr_linenumber" name="L1020" href="#L1020">1020</a> <em class="jxr_javadoccomment"> * Returns <js>"null"</js> if the object is <jk>null</jk>.</em>
-<a class="jxr_linenumber" name="L1021" href="#L1021">1021</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L1022" href="#L1022">1022</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> String safeToString(Object o) {
-<a class="jxr_linenumber" name="L1023" href="#L1023">1023</a> <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="L1024" href="#L1024">1024</a> <strong class="jxr_keyword">return</strong> o.toString();
-<a class="jxr_linenumber" name="L1025" href="#L1025">1025</a> } <strong class="jxr_keyword">catch</strong> (Throwable t) { <em class="jxr_comment">// NOSONAR</em>
-<a class="jxr_linenumber" name="L1026" href="#L1026">1026</a> <strong class="jxr_keyword">return</strong> scn(t) + <span class="jxr_string">": "</span> + t.getMessage();
-<a class="jxr_linenumber" name="L1027" href="#L1027">1027</a> }
-<a class="jxr_linenumber" name="L1028" href="#L1028">1028</a> }
-<a class="jxr_linenumber" name="L1029" href="#L1029">1029</a>
-<a class="jxr_linenumber" name="L1030" href="#L1030">1030</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L1031" href="#L1031">1031</a> <em class="jxr_javadoccomment"> * Helper method for creating StringBuilder objects.</em>
-<a class="jxr_linenumber" name="L1032" href="#L1032">1032</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L1033" href="#L1033">1033</a> <em class="jxr_javadoccomment"> * @param value The string value to wrap in a StringBuilder.</em>
-<a class="jxr_linenumber" name="L1034" href="#L1034">1034</a> <em class="jxr_javadoccomment"> * @return A new StringBuilder containing the specified value.</em>
-<a class="jxr_linenumber" name="L1035" href="#L1035">1035</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L1036" href="#L1036">1036</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> StringBuilder sb(String value) {
-<a class="jxr_linenumber" name="L1037" href="#L1037">1037</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> StringBuilder(value);
-<a class="jxr_linenumber" name="L1038" href="#L1038">1038</a> }
-<a class="jxr_linenumber" name="L1039" href="#L1039">1039</a>
-<a class="jxr_linenumber" name="L1040" href="#L1040">1040</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L1041" href="#L1041">1041</a> <em class="jxr_javadoccomment"> * Shortcut for creating a modifiable set out of an array of values.</em>
-<a class="jxr_linenumber" name="L1042" href="#L1042">1042</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L1043" href="#L1043">1043</a> <em class="jxr_javadoccomment"> * @param <T> The element type.</em>
-<a class="jxr_linenumber" name="L1044" href="#L1044">1044</a> <em class="jxr_javadoccomment"> * @param values The values to add to the set.</em>
-<a class="jxr_linenumber" name="L1045" href="#L1045">1045</a> <em class="jxr_javadoccomment"> * @return A modifiable LinkedHashSet containing the specified values.</em>
-<a class="jxr_linenumber" name="L1046" href="#L1046">1046</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L1047" href="#L1047">1047</a> @SafeVarargs
-<a class="jxr_linenumber" name="L1048" href="#L1048">1048</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <T> LinkedHashSet<T> set(T...values) { <em class="jxr_comment">// NOSONAR</em>
-<a class="jxr_linenumber" name="L1049" href="#L1049">1049</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> LinkedHashSet<>(Arrays.asList(values));
-<a class="jxr_linenumber" name="L1050" href="#L1050">1050</a> }
-<a class="jxr_linenumber" name="L1051" href="#L1051">1051</a>
-<a class="jxr_linenumber" name="L1052" href="#L1052">1052</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L1053" href="#L1053">1053</a> <em class="jxr_javadoccomment"> * Converts various collection-like objects to a {@link List}.</em>
+<a class="jxr_linenumber" name="L900" href="#L900">900</a> <em class="jxr_javadoccomment"> * @param <T> The element type.</em>
+<a class="jxr_linenumber" name="L901" href="#L901">901</a> <em class="jxr_javadoccomment"> * @param type The element type class.</em>
+<a class="jxr_linenumber" name="L902" href="#L902">902</a> <em class="jxr_javadoccomment"> * @return <jk>null</jk>.</em>
+<a class="jxr_linenumber" name="L903" href="#L903">903</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L904" href="#L904">904</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <T> List<T> nlist(Class<T> type) {
+<a class="jxr_linenumber" name="L905" href="#L905">905</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="L906" href="#L906">906</a> }
+<a class="jxr_linenumber" name="L907" href="#L907">907</a>
+<a class="jxr_linenumber" name="L908" href="#L908">908</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L909" href="#L909">909</a> <em class="jxr_javadoccomment"> * Returns a null map.</em>
+<a class="jxr_linenumber" name="L910" href="#L910">910</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L911" href="#L911">911</a> <em class="jxr_javadoccomment"> * @param <K> The key type.</em>
+<a class="jxr_linenumber" name="L912" href="#L912">912</a> <em class="jxr_javadoccomment"> * @param <V> The value type.</em>
+<a class="jxr_linenumber" name="L913" href="#L913">913</a> <em class="jxr_javadoccomment"> * @param keyType The key type class.</em>
+<a class="jxr_linenumber" name="L914" href="#L914">914</a> <em class="jxr_javadoccomment"> * @param valueType The value type class.</em>
+<a class="jxr_linenumber" name="L915" href="#L915">915</a> <em class="jxr_javadoccomment"> * @return <jk>null</jk>.</em>
+<a class="jxr_linenumber" name="L916" href="#L916">916</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L917" href="#L917">917</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <K,V> Map<K,V> nmap(Class<K> keyType, Class<V> valueType) {
+<a class="jxr_linenumber" name="L918" href="#L918">918</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="L919" href="#L919">919</a> }
+<a class="jxr_linenumber" name="L920" href="#L920">920</a>
+<a class="jxr_linenumber" name="L921" href="#L921">921</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L922" href="#L922">922</a> <em class="jxr_javadoccomment"> * Shortcut for calling {@link Optional#ofNullable(Object)}.</em>
+<a class="jxr_linenumber" name="L923" href="#L923">923</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L924" href="#L924">924</a> <em class="jxr_javadoccomment"> * @param <T> The object type.</em>
+<a class="jxr_linenumber" name="L925" href="#L925">925</a> <em class="jxr_javadoccomment"> * @param t The object to wrap in an Optional.</em>
+<a class="jxr_linenumber" name="L926" href="#L926">926</a> <em class="jxr_javadoccomment"> * @return An Optional containing the specified object, or empty if <jk>null</jk>.</em>
+<a class="jxr_linenumber" name="L927" href="#L927">927</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L928" href="#L928">928</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <T> Optional<T> opt(T t) {
+<a class="jxr_linenumber" name="L929" href="#L929">929</a> <strong class="jxr_keyword">return</strong> Optional.ofNullable(t);
+<a class="jxr_linenumber" name="L930" href="#L930">930</a> }
+<a class="jxr_linenumber" name="L931" href="#L931">931</a>
+<a class="jxr_linenumber" name="L932" href="#L932">932</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L933" href="#L933">933</a> <em class="jxr_javadoccomment"> * Returns an empty Optional.</em>
+<a class="jxr_linenumber" name="L934" href="#L934">934</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L935" href="#L935">935</a> <em class="jxr_javadoccomment"> * @param <T> The object type.</em>
+<a class="jxr_linenumber" name="L936" href="#L936">936</a> <em class="jxr_javadoccomment"> * @return An empty Optional.</em>
+<a class="jxr_linenumber" name="L937" href="#L937">937</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L938" href="#L938">938</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <T> Optional<T> opte() {
+<a class="jxr_linenumber" name="L939" href="#L939">939</a> <strong class="jxr_keyword">return</strong> Optional.empty();
+<a class="jxr_linenumber" name="L940" href="#L940">940</a> }
+<a class="jxr_linenumber" name="L941" href="#L941">941</a>
+<a class="jxr_linenumber" name="L942" href="#L942">942</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L943" href="#L943">943</a> <em class="jxr_javadoccomment"> * Prints all the specified lines to System.out.</em>
+<a class="jxr_linenumber" name="L944" href="#L944">944</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L945" href="#L945">945</a> <em class="jxr_javadoccomment"> * @param lines The lines to print.</em>
+<a class="jxr_linenumber" name="L946" href="#L946">946</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L947" href="#L947">947</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">void</strong> printLines(String[] lines) {
+<a class="jxr_linenumber" name="L948" href="#L948">948</a> <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">var</strong> i = 0; i < lines.length; i++)
+<a class="jxr_linenumber" name="L949" href="#L949">949</a> System.out.println(String.format(<span class="jxr_string">"%4s:"</span> + lines[i], i + 1)); <em class="jxr_comment">// NOSONAR - NOT DEBUG</em>
+<a class="jxr_linenumber" name="L950" href="#L950">950</a> }
+<a class="jxr_linenumber" name="L951" href="#L951">951</a>
+<a class="jxr_linenumber" name="L952" href="#L952">952</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L953" href="#L953">953</a> <em class="jxr_javadoccomment"> * Shortcut for calling {@link StringUtils#readable(Object)}.</em>
+<a class="jxr_linenumber" name="L954" href="#L954">954</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L955" href="#L955">955</a> <em class="jxr_javadoccomment"> * <p>Converts an arbitrary object to a readable string format suitable for debugging and testing.</em>
+<a class="jxr_linenumber" name="L956" href="#L956">956</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L957" href="#L957">957</a> <em class="jxr_javadoccomment"> * @param o The object to convert to readable format. Can be <jk>null</jk>.</em>
+<a class="jxr_linenumber" name="L958" href="#L958">958</a> <em class="jxr_javadoccomment"> * @return A readable string representation of the object, or <jk>null</jk> if the input was <jk>null</jk>.</em>
+<a class="jxr_linenumber" name="L959" href="#L959">959</a> <em class="jxr_javadoccomment"> * @see StringUtils#readable(Object)</em>
+<a class="jxr_linenumber" name="L960" href="#L960">960</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L961" href="#L961">961</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> String r(Object o) {
+<a class="jxr_linenumber" name="L962" href="#L962">962</a> <strong class="jxr_keyword">return</strong> StringUtils.readable(o);
+<a class="jxr_linenumber" name="L963" href="#L963">963</a> }
+<a class="jxr_linenumber" name="L964" href="#L964">964</a>
+<a class="jxr_linenumber" name="L965" href="#L965">965</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L966" href="#L966">966</a> <em class="jxr_javadoccomment"> * Shortcut for converting an object to a string.</em>
+<a class="jxr_linenumber" name="L967" href="#L967">967</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L968" href="#L968">968</a> <em class="jxr_javadoccomment"> * @param val The object to convert.</em>
+<a class="jxr_linenumber" name="L969" href="#L969">969</a> <em class="jxr_javadoccomment"> * @return The string representation of the object, or <jk>null</jk> if the object is <jk>null</jk>.</em>
+<a class="jxr_linenumber" name="L970" href="#L970">970</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L971" href="#L971">971</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> String s(Object val) {
+<a class="jxr_linenumber" name="L972" href="#L972">972</a> <strong class="jxr_keyword">return</strong> val == <strong class="jxr_keyword">null</strong> ? <strong class="jxr_keyword">null</strong> : val.toString();
+<a class="jxr_linenumber" name="L973" href="#L973">973</a> }
+<a class="jxr_linenumber" name="L974" href="#L974">974</a>
+<a class="jxr_linenumber" name="L975" href="#L975">975</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L976" href="#L976">976</a> <em class="jxr_javadoccomment"> * Runs a snippet of code and encapsulates any throwable inside a {@link RuntimeException}.</em>
+<a class="jxr_linenumber" name="L977" href="#L977">977</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L978" href="#L978">978</a> <em class="jxr_javadoccomment"> * @param snippet The snippet of code to run.</em>
+<a class="jxr_linenumber" name="L979" href="#L979">979</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L980" href="#L980">980</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">void</strong> safe(<a name="Snippet" href="../../../../../org/apache/juneau/common/function/Snippet.html#Snippet">Snippet</a> snippet) {
+<a class="jxr_linenumber" name="L981" href="#L981">981</a> <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="L982" href="#L982">982</a> snippet.run();
+<a class="jxr_linenumber" name="L983" href="#L983">983</a> } <strong class="jxr_keyword">catch</strong> (RuntimeException t) {
+<a class="jxr_linenumber" name="L984" href="#L984">984</a> <strong class="jxr_keyword">throw</strong> t;
+<a class="jxr_linenumber" name="L985" href="#L985">985</a> } <strong class="jxr_keyword">catch</strong> (Throwable t) {
+<a class="jxr_linenumber" name="L986" href="#L986">986</a> <strong class="jxr_keyword">throw</strong> ThrowableUtils.asRuntimeException(t);
+<a class="jxr_linenumber" name="L987" href="#L987">987</a> }
+<a class="jxr_linenumber" name="L988" href="#L988">988</a> }
+<a class="jxr_linenumber" name="L989" href="#L989">989</a>
+<a class="jxr_linenumber" name="L990" href="#L990">990</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L991" href="#L991">991</a> <em class="jxr_javadoccomment"> * Used to wrap code that returns a value but throws an exception.</em>
+<a class="jxr_linenumber" name="L992" href="#L992">992</a> <em class="jxr_javadoccomment"> * Useful in cases where you're trying to execute code in a fluent method call</em>
+<a class="jxr_linenumber" name="L993" href="#L993">993</a> <em class="jxr_javadoccomment"> * or are trying to eliminate untestable catch blocks in code.</em>
+<a class="jxr_linenumber" name="L994" href="#L994">994</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L995" href="#L995">995</a> <em class="jxr_javadoccomment"> * @param <T> The return type.</em>
+<a class="jxr_linenumber" name="L996" href="#L996">996</a> <em class="jxr_javadoccomment"> * @param s The supplier that may throw an exception.</em>
+<a class="jxr_linenumber" name="L997" href="#L997">997</a> <em class="jxr_javadoccomment"> * @return The result of the supplier execution.</em>
+<a class="jxr_linenumber" name="L998" href="#L998">998</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L999" href="#L999">999</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <T> T safe(ThrowingSupplier<T> s) {
+<a class="jxr_linenumber" name="L1000" href="#L1000">1000</a> <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="L1001" href="#L1001">1001</a> <strong class="jxr_keyword">return</strong> s.get();
+<a class="jxr_linenumber" name="L1002" href="#L1002">1002</a> } <strong class="jxr_keyword">catch</strong> (RuntimeException e) {
+<a class="jxr_linenumber" name="L1003" href="#L1003">1003</a> <strong class="jxr_keyword">throw</strong> e;
+<a class="jxr_linenumber" name="L1004" href="#L1004">1004</a> } <strong class="jxr_keyword">catch</strong> (Exception e) {
+<a class="jxr_linenumber" name="L1005" href="#L1005">1005</a> <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> RuntimeException(e);
+<a class="jxr_linenumber" name="L1006" href="#L1006">1006</a> }
+<a class="jxr_linenumber" name="L1007" href="#L1007">1007</a> }
+<a class="jxr_linenumber" name="L1008" href="#L1008">1008</a>
+<a class="jxr_linenumber" name="L1009" href="#L1009">1009</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L1010" href="#L1010">1010</a> <em class="jxr_javadoccomment"> * Allows you to wrap a supplier that throws an exception so that it can be used in a fluent interface.</em>
+<a class="jxr_linenumber" name="L1011" href="#L1011">1011</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L1012" href="#L1012">1012</a> <em class="jxr_javadoccomment"> * @param <T> The supplier type.</em>
+<a class="jxr_linenumber" name="L1013" href="#L1013">1013</a> <em class="jxr_javadoccomment"> * @param supplier The supplier throwing an exception.</em>
+<a class="jxr_linenumber" name="L1014" href="#L1014">1014</a> <em class="jxr_javadoccomment"> * @return The supplied result.</em>
+<a class="jxr_linenumber" name="L1015" href="#L1015">1015</a> <em class="jxr_javadoccomment"> * @throws RuntimeException if supplier threw an exception.</em>
+<a class="jxr_linenumber" name="L1016" href="#L1016">1016</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L1017" href="#L1017">1017</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <T> T safeSupplier(ThrowableUtils.SupplierWithThrowable<T> supplier) {
+<a class="jxr_linenumber" name="L1018" href="#L1018">1018</a> <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="L1019" href="#L1019">1019</a> <strong class="jxr_keyword">return</strong> supplier.get();
+<a class="jxr_linenumber" name="L1020" href="#L1020">1020</a> } <strong class="jxr_keyword">catch</strong> (RuntimeException t) {
+<a class="jxr_linenumber" name="L1021" href="#L1021">1021</a> <strong class="jxr_keyword">throw</strong> t;
+<a class="jxr_linenumber" name="L1022" href="#L1022">1022</a> } <strong class="jxr_keyword">catch</strong> (Throwable t) {
+<a class="jxr_linenumber" name="L1023" href="#L1023">1023</a> <strong class="jxr_keyword">throw</strong> ThrowableUtils.asRuntimeException(t);
+<a class="jxr_linenumber" name="L1024" href="#L1024">1024</a> }
+<a class="jxr_linenumber" name="L1025" href="#L1025">1025</a> }
+<a class="jxr_linenumber" name="L1026" href="#L1026">1026</a>
+<a class="jxr_linenumber" name="L1027" href="#L1027">1027</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L1028" href="#L1028">1028</a> <em class="jxr_javadoccomment"> * Safely converts an object to its string representation, handling any exceptions that may occur.</em>
+<a class="jxr_linenumber" name="L1029" href="#L1029">1029</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L1030" href="#L1030">1030</a> <em class="jxr_javadoccomment"> * <p>This method provides a fail-safe way to call {@code toString()} on any object, ensuring that</em>
+<a class="jxr_linenumber" name="L1031" href="#L1031">1031</a> <em class="jxr_javadoccomment"> * exceptions thrown by problematic {@code toString()} implementations don't propagate up the call stack.</em>
+<a class="jxr_linenumber" name="L1032" href="#L1032">1032</a> <em class="jxr_javadoccomment"> * Instead, it returns a descriptive error message containing the exception type and message.</p></em>
+<a class="jxr_linenumber" name="L1033" href="#L1033">1033</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L1034" href="#L1034">1034</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Exception Handling:</h5></em>
+<a class="jxr_linenumber" name="L1035" href="#L1035">1035</a> <em class="jxr_javadoccomment"> * <p>If the object's {@code toString()} method throws any {@code Throwable}, this method catches it</em>
+<a class="jxr_linenumber" name="L1036" href="#L1036">1036</a> <em class="jxr_javadoccomment"> * and returns a formatted string in the form: {@code "<ExceptionType>: <exception message>"}.</p></em>
+<a class="jxr_linenumber" name="L1037" href="#L1037">1037</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L1038" href="#L1038">1038</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Examples:</h5></em>
+<a class="jxr_linenumber" name="L1039" href="#L1039">1039</a> <em class="jxr_javadoccomment"> * <p class='bjava'></em>
+<a class="jxr_linenumber" name="L1040" href="#L1040">1040</a> <em class="jxr_javadoccomment"> * <jc>// Normal case - returns object's toString() result</jc></em>
+<a class="jxr_linenumber" name="L1041" href="#L1041">1041</a> <em class="jxr_javadoccomment"> * String <jv>result</jv> = <jsm>safeToString</jsm>(<js>"Hello"</js>);</em>
+<a class="jxr_linenumber" name="L1042" href="#L1042">1042</a> <em class="jxr_javadoccomment"> * <jc>// result = "Hello"</jc></em>
+<a class="jxr_linenumber" name="L1043" href="#L1043">1043</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L1044" href="#L1044">1044</a> <em class="jxr_javadoccomment"> * <jc>// Exception case - returns formatted error message</jc></em>
+<a class="jxr_linenumber" name="L1045" href="#L1045">1045</a> <em class="jxr_javadoccomment"> * Object <jv>problematic</jv> = <jk>new</jk> Object() {</em>
+<a class="jxr_linenumber" name="L1046" href="#L1046">1046</a> <em class="jxr_javadoccomment"> * <ja>@Override</ja></em>
+<a class="jxr_linenumber" name="L1047" href="#L1047">1047</a> <em class="jxr_javadoccomment"> * <jk>public</jk> String toString() {</em>
+<a class="jxr_linenumber" name="L1048" href="#L1048">1048</a> <em class="jxr_javadoccomment"> * <jk>throw new</jk> RuntimeException(<js>"Cannot convert"</js>);</em>
+<a class="jxr_linenumber" name="L1049" href="#L1049">1049</a> <em class="jxr_javadoccomment"> * }</em>
+<a class="jxr_linenumber" name="L1050" href="#L1050">1050</a> <em class="jxr_javadoccomment"> * };</em>
+<a class="jxr_linenumber" name="L1051" href="#L1051">1051</a> <em class="jxr_javadoccomment"> * String <jv>result</jv> = <jsm>safeToString</jsm>(<jv>problematic</jv>);</em>
+<a class="jxr_linenumber" name="L1052" href="#L1052">1052</a> <em class="jxr_javadoccomment"> * <jc>// result = "RuntimeException: Cannot convert"</jc></em>
+<a class="jxr_linenumber" name="L1053" href="#L1053">1053</a> <em class="jxr_javadoccomment"> * </p></em>
<a class="jxr_linenumber" name="L1054" href="#L1054">1054</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L1055" href="#L1055">1055</a> <em class="jxr_javadoccomment"> * <p>This utility method enables testing of any collection-like object by converting it to a List that can be</em>
-<a class="jxr_linenumber" name="L1056" href="#L1056">1056</a> <em class="jxr_javadoccomment"> * passed to methods such as TestUtils.assertList().</p></em>
-<a class="jxr_linenumber" name="L1057" href="#L1057">1057</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L1058" href="#L1058">1058</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Supported Input Types:</h5></em>
-<a class="jxr_linenumber" name="L1059" href="#L1059">1059</a> <em class="jxr_javadoccomment"> * <ul></em>
-<a class="jxr_linenumber" name="L1060" href="#L1060">1060</a> <em class="jxr_javadoccomment"> * <li><b>List:</b> Returns the input unchanged</li></em>
-<a class="jxr_linenumber" name="L1061" href="#L1061">1061</a> <em class="jxr_javadoccomment"> * <li><b>Iterable:</b> Any collection, set, queue, etc. (converted to List preserving order)</li></em>
-<a class="jxr_linenumber" name="L1062" href="#L1062">1062</a> <em class="jxr_javadoccomment"> * <li><b>Iterator:</b> Converts iterator contents to List</li></em>
-<a class="jxr_linenumber" name="L1063" href="#L1063">1063</a> <em class="jxr_javadoccomment"> * <li><b>Enumeration:</b> Converts enumeration contents to List</li></em>
-<a class="jxr_linenumber" name="L1064" href="#L1064">1064</a> <em class="jxr_javadoccomment"> * <li><b>Stream:</b> Converts stream contents to List (stream is consumed)</li></em>
-<a class="jxr_linenumber" name="L1065" href="#L1065">1065</a> <em class="jxr_javadoccomment"> * <li><b>Map:</b> Converts map entries to List of Map.Entry objects</li></em>
-<a class="jxr_linenumber" name="L1066" href="#L1066">1066</a> <em class="jxr_javadoccomment"> * <li><b>Array:</b> Converts any array type (including primitive arrays) to List</li></em>
-<a class="jxr_linenumber" name="L1067" href="#L1067">1067</a> <em class="jxr_javadoccomment"> * </ul></em>
-<a class="jxr_linenumber" name="L1068" href="#L1068">1068</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L1069" href="#L1069">1069</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Usage Examples:</h5></em>
-<a class="jxr_linenumber" name="L1070" href="#L1070">1070</a> <em class="jxr_javadoccomment"> * <p class='bjava'></em>
-<a class="jxr_linenumber" name="L1071" href="#L1071">1071</a> <em class="jxr_javadoccomment"> * <jc>// Test a Set</jc></em>
-<a class="jxr_linenumber" name="L1072" href="#L1072">1072</a> <em class="jxr_javadoccomment"> * Set&lt;String&gt; <jv>mySet</jv> = Set.of(<js>"a"</js>, <js>"b"</js>, <js>"c"</js>);</em>
-<a class="jxr_linenumber" name="L1073" href="#L1073">1073</a> <em class="jxr_javadoccomment"> * assertList(toList(<jv>mySet</jv>), <js>"a"</js>, <js>"b"</js>, <js>"c"</js>);</em>
-<a class="jxr_linenumber" name="L1074" href="#L1074">1074</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L1075" href="#L1075">1075</a> <em class="jxr_javadoccomment"> * <jc>// Test an array</jc></em>
-<a class="jxr_linenumber" name="L1076" href="#L1076">1076</a> <em class="jxr_javadoccomment"> * String[] <jv>myArray</jv> = {<js>"x"</js>, <js>"y"</js>, <js>"z"</js>};</em>
-<a class="jxr_linenumber" name="L1077" href="#L1077">1077</a> <em class="jxr_javadoccomment"> * assertList(toList(<jv>myArray</jv>), <js>"x"</js>, <js>"y"</js>, <js>"z"</js>);</em>
-<a class="jxr_linenumber" name="L1078" href="#L1078">1078</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L1079" href="#L1079">1079</a> <em class="jxr_javadoccomment"> * <jc>// Test a primitive array</jc></em>
-<a class="jxr_linenumber" name="L1080" href="#L1080">1080</a> <em class="jxr_javadoccomment"> * <jk>int</jk>[] <jv>numbers</jv> = {1, 2, 3};</em>
-<a class="jxr_linenumber" name="L1081" href="#L1081">1081</a> <em class="jxr_javadoccomment"> * assertList(toList(<jv>numbers</jv>), <js>"1"</js>, <js>"2"</js>, <js>"3"</js>);</em>
-<a class="jxr_linenumber" name="L1082" href="#L1082">1082</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L1083" href="#L1083">1083</a> <em class="jxr_javadoccomment"> * <jc>// Test a Stream</jc></em>
-<a class="jxr_linenumber" name="L1084" href="#L1084">1084</a> <em class="jxr_javadoccomment"> * Stream&lt;String&gt; <jv>myStream</jv> = Stream.of(<js>"foo"</js>, <js>"bar"</js>);</em>
-<a class="jxr_linenumber" name="L1085" href="#L1085">1085</a> <em class="jxr_javadoccomment"> * assertList(toList(<jv>myStream</jv>), <js>"foo"</js>, <js>"bar"</js>);</em>
-<a class="jxr_linenumber" name="L1086" href="#L1086">1086</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L1087" href="#L1087">1087</a> <em class="jxr_javadoccomment"> * <jc>// Test a Map (converted to entries)</jc></em>
-<a class="jxr_linenumber" name="L1088" href="#L1088">1088</a> <em class="jxr_javadoccomment"> * Map&lt;String,Integer&gt; <jv>myMap</jv> = Map.of(<js>"a"</js>, 1, <js>"b"</js>, 2);</em>
-<a class="jxr_linenumber" name="L1089" href="#L1089">1089</a> <em class="jxr_javadoccomment"> * assertList(toList(<jv>myMap</jv>), <js>"a=1"</js>, <js>"b=2"</js>);</em>
-<a class="jxr_linenumber" name="L1090" href="#L1090">1090</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L1091" href="#L1091">1091</a> <em class="jxr_javadoccomment"> * <jc>// Test any Iterable collection</jc></em>
-<a class="jxr_linenumber" name="L1092" href="#L1092">1092</a> <em class="jxr_javadoccomment"> * Queue&lt;String&gt; <jv>myQueue</jv> = new LinkedList&lt;&gt;(List.of(<js>"first"</js>, <js>"second"</js>));</em>
-<a class="jxr_linenumber" name="L1093" href="#L1093">1093</a> <em class="jxr_javadoccomment"> * assertList(toList(<jv>myQueue</jv>), <js>"first"</js>, <js>"second"</js>);</em>
-<a class="jxr_linenumber" name="L1094" href="#L1094">1094</a> <em class="jxr_javadoccomment"> * </p></em>
-<a class="jxr_linenumber" name="L1095" href="#L1095">1095</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L1096" href="#L1096">1096</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Integration with Testing:</h5></em>
-<a class="jxr_linenumber" name="L1097" href="#L1097">1097</a> <em class="jxr_javadoccomment"> * <p>This method is specifically designed to work with testing frameworks to provide</em>
-<a class="jxr_linenumber" name="L1098" href="#L1098">1098</a> <em class="jxr_javadoccomment"> * a unified testing approach for all collection-like types. Instead of having separate assertion methods</em>
-<a class="jxr_linenumber" name="L1099" href="#L1099">1099</a> <em class="jxr_javadoccomment"> * for arrays, sets, and other collections, you can convert them all to Lists and use standard</em>
-<a class="jxr_linenumber" name="L1100" href="#L1100">1100</a> <em class="jxr_javadoccomment"> * list assertion methods.</p></em>
-<a class="jxr_linenumber" name="L1101" href="#L1101">1101</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L1102" href="#L1102">1102</a> <em class="jxr_javadoccomment"> * @param o The object to convert to a List. Must not be null and must be a supported collection-like type.</em>
-<a class="jxr_linenumber" name="L1103" href="#L1103">1103</a> <em class="jxr_javadoccomment"> * @return A {@link List} containing the elements from the input object.</em>
-<a class="jxr_linenumber" name="L1104" href="#L1104">1104</a> <em class="jxr_javadoccomment"> * @throws IllegalArgumentException if the input object cannot be converted to a List.</em>
-<a class="jxr_linenumber" name="L1105" href="#L1105">1105</a> <em class="jxr_javadoccomment"> * @see #arrayToList(Object)</em>
-<a class="jxr_linenumber" name="L1106" href="#L1106">1106</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L1107" href="#L1107">1107</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> List<?> toList(Object o) { <em class="jxr_comment">// NOSONAR</em>
-<a class="jxr_linenumber" name="L1108" href="#L1108">1108</a> AssertionUtils.assertArgNotNull(<span class="jxr_string">"o"</span>, o);
-<a class="jxr_linenumber" name="L1109" href="#L1109">1109</a> <strong class="jxr_keyword">if</strong> (o instanceof List<?> o2)
-<a class="jxr_linenumber" name="L1110" href="#L1110">1110</a> <strong class="jxr_keyword">return</strong> o2;
-<a class="jxr_linenumber" name="L1111" href="#L1111">1111</a> <strong class="jxr_keyword">if</strong> (o instanceof Iterable<?> o2)
-<a class="jxr_linenumber" name="L1112" href="#L1112">1112</a> <strong class="jxr_keyword">return</strong> StreamSupport.stream(o2.spliterator(), false).toList();
-<a class="jxr_linenumber" name="L1113" href="#L1113">1113</a> <strong class="jxr_keyword">if</strong> (o instanceof Iterator<?> o2)
-<a class="jxr_linenumber" name="L1114" href="#L1114">1114</a> <strong class="jxr_keyword">return</strong> StreamSupport.stream(Spliterators.spliteratorUnknownSize(o2, 0), false).toList();
-<a class="jxr_linenumber" name="L1115" href="#L1115">1115</a> <strong class="jxr_keyword">if</strong> (o instanceof Enumeration<?> o2)
-<a class="jxr_linenumber" name="L1116" href="#L1116">1116</a> <strong class="jxr_keyword">return</strong> Collections.list(o2);
-<a class="jxr_linenumber" name="L1117" href="#L1117">1117</a> <strong class="jxr_keyword">if</strong> (o instanceof Stream<?> o2)
-<a class="jxr_linenumber" name="L1118" href="#L1118">1118</a> <strong class="jxr_keyword">return</strong> o2.toList();
-<a class="jxr_linenumber" name="L1119" href="#L1119">1119</a> <strong class="jxr_keyword">if</strong> (o instanceof Map<?,?> o2)
-<a class="jxr_linenumber" name="L1120" href="#L1120">1120</a> <strong class="jxr_keyword">return</strong> toList(o2.entrySet());
-<a class="jxr_linenumber" name="L1121" href="#L1121">1121</a> <strong class="jxr_keyword">if</strong> (o instanceof Optional<?> o2)
-<a class="jxr_linenumber" name="L1122" href="#L1122">1122</a> <strong class="jxr_keyword">return</strong> o2.isEmpty() ? Collections.emptyList() : Collections.singletonList(o2.get());
-<a class="jxr_linenumber" name="L1123" href="#L1123">1123</a> <strong class="jxr_keyword">if</strong> (isArray(o))
-<a class="jxr_linenumber" name="L1124" href="#L1124">1124</a> <strong class="jxr_keyword">return</strong> arrayToList(o);
-<a class="jxr_linenumber" name="L1125" href="#L1125">1125</a> <strong class="jxr_keyword">throw</strong> ThrowableUtils.runtimeException(<span class="jxr_string">"Could not convert object of type {0} to a list"</span>, cn(o));
-<a class="jxr_linenumber" name="L1126" href="#L1126">1126</a> }
-<a class="jxr_linenumber" name="L1127" href="#L1127">1127</a>
-<a class="jxr_linenumber" name="L1128" href="#L1128">1128</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L1129" href="#L1129">1129</a> <em class="jxr_javadoccomment"> * Converts an array to a stream of objects.</em>
-<a class="jxr_linenumber" name="L1130" href="#L1130">1130</a> <em class="jxr_javadoccomment"> * @param array The array to convert.</em>
-<a class="jxr_linenumber" name="L1131" href="#L1131">1131</a> <em class="jxr_javadoccomment"> * @return A new stream.</em>
-<a class="jxr_linenumber" name="L1132" href="#L1132">1132</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L1133" href="#L1133">1133</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> Stream<Object> toStream(Object array) {
-<a class="jxr_linenumber" name="L1134" href="#L1134">1134</a> AssertionUtils.assertArg(isArray(array), <span class="jxr_string">"Arg was not an array. Type: {0}"</span>, array.getClass().getName());
-<a class="jxr_linenumber" name="L1135" href="#L1135">1135</a> <strong class="jxr_keyword">var</strong> length = Array.getLength(array);
-<a class="jxr_linenumber" name="L1136" href="#L1136">1136</a> <strong class="jxr_keyword">return</strong> IntStream.range(0, length).mapToObj(i -> Array.get(array, i));
-<a class="jxr_linenumber" name="L1137" href="#L1137">1137</a> }
-<a class="jxr_linenumber" name="L1138" href="#L1138">1138</a>
-<a class="jxr_linenumber" name="L1139" href="#L1139">1139</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L1140" href="#L1140">1140</a> <em class="jxr_javadoccomment"> * Traverses all elements in the specified object and executes a consumer for it.</em>
-<a class="jxr_linenumber" name="L1141" href="#L1141">1141</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L1142" href="#L1142">1142</a> <em class="jxr_javadoccomment"> * @param <T> The element type.</em>
-<a class="jxr_linenumber" name="L1143" href="#L1143">1143</a> <em class="jxr_javadoccomment"> * @param o The object to traverse.</em>
-<a class="jxr_linenumber" name="L1144" href="#L1144">1144</a> <em class="jxr_javadoccomment"> * @param c The consumer of the objects.</em>
-<a class="jxr_linenumber" name="L1145" href="#L1145">1145</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L1146" href="#L1146">1146</a> @SuppressWarnings(<span class="jxr_string">"unchecked"</span>)
-<a class="jxr_linenumber" name="L1147" href="#L1147">1147</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <T> <strong class="jxr_keyword">void</strong> traverse(Object o, Consumer<T> c) {
-<a class="jxr_linenumber" name="L1148" href="#L1148">1148</a> <strong class="jxr_keyword">if</strong> (o == <strong class="jxr_keyword">null</strong>)
-<a class="jxr_linenumber" name="L1149" href="#L1149">1149</a> <strong class="jxr_keyword">return</strong>;
-<a class="jxr_linenumber" name="L1150" href="#L1150">1150</a> <strong class="jxr_keyword">if</strong> (o instanceof Iterable<?> o2)
-<a class="jxr_linenumber" name="L1151" href="#L1151">1151</a> o2.forEach(x -> traverse(x, c));
-<a class="jxr_linenumber" name="L1152" href="#L1152">1152</a> <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (o instanceof Stream<?> o2)
-<a class="jxr_linenumber" name="L1153" href="#L1153">1153</a> o2.forEach(x -> traverse(x, c));
-<a class="jxr_linenumber" name="L1154" href="#L1154">1154</a> <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (isArray(o))
-<a class="jxr_linenumber" name="L1155" href="#L1155">1155</a> toStream(o).forEach(x -> traverse(x, c));
-<a class="jxr_linenumber" name="L1156" href="#L1156">1156</a> <strong class="jxr_keyword">else</strong>
-<a class="jxr_linenumber" name="L1157" href="#L1157">1157</a> c.accept((T)o);
-<a class="jxr_linenumber" name="L1158" href="#L1158">1158</a> }
-<a class="jxr_linenumber" name="L1159" href="#L1159">1159</a>
-<a class="jxr_linenumber" name="L1160" href="#L1160">1160</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L1161" href="#L1161">1161</a> <em class="jxr_javadoccomment"> * Creates an unmodifiable view of the specified list.</em>
-<a class="jxr_linenumber" name="L1162" href="#L1162">1162</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L1163" href="#L1163">1163</a> <em class="jxr_javadoccomment"> * <p>This is a null-safe wrapper around {@link Collections#unmodifiableList(List)}.</p></em>
-<a class="jxr_linenumber" name="L1164" href="#L1164">1164</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L1165" href="#L1165">1165</a> <em class="jxr_javadoccomment"> * @param <T> The element type.</em>
-<a class="jxr_linenumber" name="L1166" href="#L1166">1166</a> <em class="jxr_javadoccomment"> * @param value The list to make unmodifiable. Can be null.</em>
-<a class="jxr_linenumber" name="L1167" href="#L1167">1167</a> <em class="jxr_javadoccomment"> * @return An unmodifiable view of the list, or null if the input was null.</em>
-<a class="jxr_linenumber" name="L1168" href="#L1168">1168</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L1169" href="#L1169">1169</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <T> List<T> u(List<? <strong class="jxr_keyword">extends</strong> T> value) {
-<a class="jxr_linenumber" name="L1170" href="#L1170">1170</a> <strong class="jxr_keyword">return</strong> value == <strong class="jxr_keyword">null</strong> ? <strong class="jxr_keyword">null</strong> : Collections.unmodifiableList(value);
+<a class="jxr_linenumber" name="L1055" href="#L1055">1055</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Use Cases:</h5></em>
+<a class="jxr_linenumber" name="L1056" href="#L1056">1056</a> <em class="jxr_javadoccomment"> * <ul></em>
+<a class="jxr_linenumber" name="L1057" href="#L1057">1057</a> <em class="jxr_javadoccomment"> * <li><b>Object stringification in converters:</b> Safe conversion of arbitrary objects to strings</li></em>
+<a class="jxr_linenumber" name="L1058" href="#L1058">1058</a> <em class="jxr_javadoccomment"> * <li><b>Debugging and logging:</b> Ensures log statements never fail due to toString() exceptions</li></em>
+<a class="jxr_linenumber" name="L1059" href="#L1059">1059</a> <em class="jxr_javadoccomment"> * <li><b>Error handling:</b> Graceful degradation when objects have problematic string representations</li></em>
+<a class="jxr_linenumber" name="L1060" href="#L1060">1060</a> <em class="jxr_javadoccomment"> * <li><b>Third-party object integration:</b> Safe handling of objects from external libraries</li></em>
+<a class="jxr_linenumber" name="L1061" href="#L1061">1061</a> <em class="jxr_javadoccomment"> * </ul></em>
+<a class="jxr_linenumber" name="L1062" href="#L1062">1062</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L1063" href="#L1063">1063</a> <em class="jxr_javadoccomment"> * @param o The object to convert to a string. May be any object including <jk>null</jk>.</em>
+<a class="jxr_linenumber" name="L1064" href="#L1064">1064</a> <em class="jxr_javadoccomment"> * @return The string representation of the object, or a formatted error message if toString() throws an exception.</em>
+<a class="jxr_linenumber" name="L1065" href="#L1065">1065</a> <em class="jxr_javadoccomment"> * Returns <js>"null"</js> if the object is <jk>null</jk>.</em>
+<a class="jxr_linenumber" name="L1066" href="#L1066">1066</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L1067" href="#L1067">1067</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> String safeToString(Object o) {
+<a class="jxr_linenumber" name="L1068" href="#L1068">1068</a> <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="L1069" href="#L1069">1069</a> <strong class="jxr_keyword">return</strong> o.toString();
+<a class="jxr_linenumber" name="L1070" href="#L1070">1070</a> } <strong class="jxr_keyword">catch</strong> (Throwable t) { <em class="jxr_comment">// NOSONAR</em>
+<a class="jxr_linenumber" name="L1071" href="#L1071">1071</a> <strong class="jxr_keyword">return</strong> scn(t) + <span class="jxr_string">": "</span> + t.getMessage();
+<a class="jxr_linenumber" name="L1072" href="#L1072">1072</a> }
+<a class="jxr_linenumber" name="L1073" href="#L1073">1073</a> }
+<a class="jxr_linenumber" name="L1074" href="#L1074">1074</a>
+<a class="jxr_linenumber" name="L1075" href="#L1075">1075</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L1076" href="#L1076">1076</a> <em class="jxr_javadoccomment"> * Helper method for creating StringBuilder objects.</em>
+<a class="jxr_linenumber" name="L1077" href="#L1077">1077</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L1078" href="#L1078">1078</a> <em class="jxr_javadoccomment"> * @param value The string value to wrap in a StringBuilder.</em>
+<a class="jxr_linenumber" name="L1079" href="#L1079">1079</a> <em class="jxr_javadoccomment"> * @return A new StringBuilder containing the specified value.</em>
+<a class="jxr_linenumber" name="L1080" href="#L1080">1080</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L1081" href="#L1081">1081</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> StringBuilder sb(String value) {
+<a class="jxr_linenumber" name="L1082" href="#L1082">1082</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> StringBuilder(value);
+<a class="jxr_linenumber" name="L1083" href="#L1083">1083</a> }
+<a class="jxr_linenumber" name="L1084" href="#L1084">1084</a>
+<a class="jxr_linenumber" name="L1085" href="#L1085">1085</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L1086" href="#L1086">1086</a> <em class="jxr_javadoccomment"> * Shortcut for creating a modifiable set out of an array of values.</em>
+<a class="jxr_linenumber" name="L1087" href="#L1087">1087</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L1088" href="#L1088">1088</a> <em class="jxr_javadoccomment"> * @param <T> The element type.</em>
+<a class="jxr_linenumber" name="L1089" href="#L1089">1089</a> <em class="jxr_javadoccomment"> * @param values The values to add to the set.</em>
+<a class="jxr_linenumber" name="L1090" href="#L1090">1090</a> <em class="jxr_javadoccomment"> * @return A modifiable LinkedHashSet containing the specified values.</em>
+<a class="jxr_linenumber" name="L1091" href="#L1091">1091</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L1092" href="#L1092">1092</a> @SafeVarargs
+<a class="jxr_linenumber" name="L1093" href="#L1093">1093</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <T> LinkedHashSet<T> set(T...values) { <em class="jxr_comment">// NOSONAR</em>
+<a class="jxr_linenumber" name="L1094" href="#L1094">1094</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> LinkedHashSet<>(Arrays.asList(values));
+<a class="jxr_linenumber" name="L1095" href="#L1095">1095</a> }
+<a class="jxr_linenumber" name="L1096" href="#L1096">1096</a>
+<a class="jxr_linenumber" name="L1097" href="#L1097">1097</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L1098" href="#L1098">1098</a> <em class="jxr_javadoccomment"> * Converts various collection-like objects to a {@link List}.</em>
+<a class="jxr_linenumber" name="L1099" href="#L1099">1099</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L1100" href="#L1100">1100</a> <em class="jxr_javadoccomment"> * <p>This utility method enables testing of any collection-like object by converting it to a List that can be</em>
+<a class="jxr_linenumber" name="L1101" href="#L1101">1101</a> <em class="jxr_javadoccomment"> * passed to methods such as TestUtils.assertList().</p></em>
+<a class="jxr_linenumber" name="L1102" href="#L1102">1102</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L1103" href="#L1103">1103</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Supported Input Types:</h5></em>
+<a class="jxr_linenumber" name="L1104" href="#L1104">1104</a> <em class="jxr_javadoccomment"> * <ul></em>
+<a class="jxr_linenumber" name="L1105" href="#L1105">1105</a> <em class="jxr_javadoccomment"> * <li><b>List:</b> Returns the input unchanged</li></em>
+<a class="jxr_linenumber" name="L1106" href="#L1106">1106</a> <em class="jxr_javadoccomment"> * <li><b>Iterable:</b> Any collection, set, queue, etc. (converted to List preserving order)</li></em>
+<a class="jxr_linenumber" name="L1107" href="#L1107">1107</a> <em class="jxr_javadoccomment"> * <li><b>Iterator:</b> Converts iterator contents to List</li></em>
+<a class="jxr_linenumber" name="L1108" href="#L1108">1108</a> <em class="jxr_javadoccomment"> * <li><b>Enumeration:</b> Converts enumeration contents to List</li></em>
+<a class="jxr_linenumber" name="L1109" href="#L1109">1109</a> <em class="jxr_javadoccomment"> * <li><b>Stream:</b> Converts stream contents to List (stream is consumed)</li></em>
+<a class="jxr_linenumber" name="L1110" href="#L1110">1110</a> <em class="jxr_javadoccomment"> * <li><b>Map:</b> Converts map entries to List of Map.Entry objects</li></em>
+<a class="jxr_linenumber" name="L1111" href="#L1111">1111</a> <em class="jxr_javadoccomment"> * <li><b>Array:</b> Converts any array type (including primitive arrays) to List</li></em>
+<a class="jxr_linenumber" name="L1112" href="#L1112">1112</a> <em class="jxr_javadoccomment"> * </ul></em>
+<a class="jxr_linenumber" name="L1113" href="#L1113">1113</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L1114" href="#L1114">1114</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Usage Examples:</h5></em>
+<a class="jxr_linenumber" name="L1115" href="#L1115">1115</a> <em class="jxr_javadoccomment"> * <p class='bjava'></em>
+<a class="jxr_linenumber" name="L1116" href="#L1116">1116</a> <em class="jxr_javadoccomment"> * <jc>// Test a Set</jc></em>
+<a class="jxr_linenumber" name="L1117" href="#L1117">1117</a> <em class="jxr_javadoccomment"> * Set&lt;String&gt; <jv>mySet</jv> = Set.of(<js>"a"</js>, <js>"b"</js>, <js>"c"</js>);</em>
+<a class="jxr_linenumber" name="L1118" href="#L1118">1118</a> <em class="jxr_javadoccomment"> * assertList(toList(<jv>mySet</jv>), <js>"a"</js>, <js>"b"</js>, <js>"c"</js>);</em>
+<a class="jxr_linenumber" name="L1119" href="#L1119">1119</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L1120" href="#L1120">1120</a> <em class="jxr_javadoccomment"> * <jc>// Test an array</jc></em>
+<a class="jxr_linenumber" name="L1121" href="#L1121">1121</a> <em class="jxr_javadoccomment"> * String[] <jv>myArray</jv> = {<js>"x"</js>, <js>"y"</js>, <js>"z"</js>};</em>
+<a class="jxr_linenumber" name="L1122" href="#L1122">1122</a> <em class="jxr_javadoccomment"> * assertList(toList(<jv>myArray</jv>), <js>"x"</js>, <js>"y"</js>, <js>"z"</js>);</em>
+<a class="jxr_linenumber" name="L1123" href="#L1123">1123</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L1124" href="#L1124">1124</a> <em class="jxr_javadoccomment"> * <jc>// Test a primitive array</jc></em>
+<a class="jxr_linenumber" name="L1125" href="#L1125">1125</a> <em class="jxr_javadoccomment"> * <jk>int</jk>[] <jv>numbers</jv> = {1, 2, 3};</em>
+<a class="jxr_linenumber" name="L1126" href="#L1126">1126</a> <em class="jxr_javadoccomment"> * assertList(toList(<jv>numbers</jv>), <js>"1"</js>, <js>"2"</js>, <js>"3"</js>);</em>
+<a class="jxr_linenumber" name="L1127" href="#L1127">1127</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L1128" href="#L1128">1128</a> <em class="jxr_javadoccomment"> * <jc>// Test a Stream</jc></em>
+<a class="jxr_linenumber" name="L1129" href="#L1129">1129</a> <em class="jxr_javadoccomment"> * Stream&lt;String&gt; <jv>myStream</jv> = Stream.of(<js>"foo"</js>, <js>"bar"</js>);</em>
+<a class="jxr_linenumber" name="L1130" href="#L1130">1130</a> <em class="jxr_javadoccomment"> * assertList(toList(<jv>myStream</jv>), <js>"foo"</js>, <js>"bar"</js>);</em>
+<a class="jxr_linenumber" name="L1131" href="#L1131">1131</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L1132" href="#L1132">1132</a> <em class="jxr_javadoccomment"> * <jc>// Test a Map (converted to entries)</jc></em>
+<a class="jxr_linenumber" name="L1133" href="#L1133">1133</a> <em class="jxr_javadoccomment"> * Map&lt;String,Integer&gt; <jv>myMap</jv> = Map.of(<js>"a"</js>, 1, <js>"b"</js>, 2);</em>
+<a class="jxr_linenumber" name="L1134" href="#L1134">1134</a> <em class="jxr_javadoccomment"> * assertList(toList(<jv>myMap</jv>), <js>"a=1"</js>, <js>"b=2"</js>);</em>
+<a class="jxr_linenumber" name="L1135" href="#L1135">1135</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L1136" href="#L1136">1136</a> <em class="jxr_javadoccomment"> * <jc>// Test any Iterable collection</jc></em>
+<a class="jxr_linenumber" name="L1137" href="#L1137">1137</a> <em class="jxr_javadoccomment"> * Queue&lt;String&gt; <jv>myQueue</jv> = new LinkedList&lt;&gt;(List.of(<js>"first"</js>, <js>"second"</js>));</em>
+<a class="jxr_linenumber" name="L1138" href="#L1138">1138</a> <em class="jxr_javadoccomment"> * assertList(toList(<jv>myQueue</jv>), <js>"first"</js>, <js>"second"</js>);</em>
+<a class="jxr_linenumber" name="L1139" href="#L1139">1139</a> <em class="jxr_javadoccomment"> * </p></em>
+<a class="jxr_linenumber" name="L1140" href="#L1140">1140</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L1141" href="#L1141">1141</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Integration with Testing:</h5></em>
+<a class="jxr_linenumber" name="L1142" href="#L1142">1142</a> <em class="jxr_javadoccomment"> * <p>This method is specifically designed to work with testing frameworks to provide</em>
+<a class="jxr_linenumber" name="L1143" href="#L1143">1143</a> <em class="jxr_javadoccomment"> * a unified testing approach for all collection-like types. Instead of having separate assertion methods</em>
+<a class="jxr_linenumber" name="L1144" href="#L1144">1144</a> <em class="jxr_javadoccomment"> * for arrays, sets, and other collections, you can convert them all to Lists and use standard</em>
+<a class="jxr_linenumber" name="L1145" href="#L1145">1145</a> <em class="jxr_javadoccomment"> * list assertion methods.</p></em>
+<a class="jxr_linenumber" name="L1146" href="#L1146">1146</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L1147" href="#L1147">1147</a> <em class="jxr_javadoccomment"> * @param o The object to convert to a List. Must not be null and must be a supported collection-like type.</em>
+<a class="jxr_linenumber" name="L1148" href="#L1148">1148</a> <em class="jxr_javadoccomment"> * @return A {@link List} containing the elements from the input object.</em>
+<a class="jxr_linenumber" name="L1149" href="#L1149">1149</a> <em class="jxr_javadoccomment"> * @throws IllegalArgumentException if the input object cannot be converted to a List.</em>
+<a class="jxr_linenumber" name="L1150" href="#L1150">1150</a> <em class="jxr_javadoccomment"> * @see #arrayToList(Object)</em>
+<a class="jxr_linenumber" name="L1151" href="#L1151">1151</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L1152" href="#L1152">1152</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> List<?> toList(Object o) { <em class="jxr_comment">// NOSONAR</em>
+<a class="jxr_linenumber" name="L1153" href="#L1153">1153</a> AssertionUtils.assertArgNotNull(<span class="jxr_string">"o"</span>, o);
+<a class="jxr_linenumber" name="L1154" href="#L1154">1154</a> <strong class="jxr_keyword">if</strong> (o instanceof List<?> o2)
+<a class="jxr_linenumber" name="L1155" href="#L1155">1155</a> <strong class="jxr_keyword">return</strong> o2;
+<a class="jxr_linenumber" name="L1156" href="#L1156">1156</a> <strong class="jxr_keyword">if</strong> (o instanceof Iterable<?> o2)
+<a class="jxr_linenumber" name="L1157" href="#L1157">1157</a> <strong class="jxr_keyword">return</strong> StreamSupport.stream(o2.spliterator(), false).toList();
+<a class="jxr_linenumber" name="L1158" href="#L1158">1158</a> <strong class="jxr_keyword">if</strong> (o instanceof Iterator<?> o2)
+<a class="jxr_linenumber" name="L1159" href="#L1159">1159</a> <strong class="jxr_keyword">return</strong> StreamSupport.stream(Spliterators.spliteratorUnknownSize(o2, 0), false).toList();
+<a class="jxr_linenumber" name="L1160" href="#L1160">1160</a> <strong class="jxr_keyword">if</strong> (o instanceof Enumeration<?> o2)
+<a class="jxr_linenumber" name="L1161" href="#L1161">1161</a> <strong class="jxr_keyword">return</strong> Collections.list(o2);
+<a class="jxr_linenumber" name="L1162" href="#L1162">1162</a> <strong class="jxr_keyword">if</strong> (o instanceof Stream<?> o2)
+<a class="jxr_linenumber" name="L1163" href="#L1163">1163</a> <strong class="jxr_keyword">return</strong> o2.toList();
+<a class="jxr_linenumber" name="L1164" href="#L1164">1164</a> <strong class="jxr_keyword">if</strong> (o instanceof Map<?,?> o2)
+<a class="jxr_linenumber" name="L1165" href="#L1165">1165</a> <strong class="jxr_keyword">return</strong> toList(o2.entrySet());
+<a class="jxr_linenumber" name="L1166" href="#L1166">1166</a> <strong class="jxr_keyword">if</strong> (o instanceof Optional<?> o2)
+<a class="jxr_linenumber" name="L1167" href="#L1167">1167</a> <strong class="jxr_keyword">return</strong> o2.isEmpty() ? Collections.emptyList() : Collections.singletonList(o2.get());
+<a class="jxr_linenumber" name="L1168" href="#L1168">1168</a> <strong class="jxr_keyword">if</strong> (isArray(o))
+<a class="jxr_linenumber" name="L1169" href="#L1169">1169</a> <strong class="jxr_keyword">return</strong> arrayToList(o);
+<a class="jxr_linenumber" name="L1170" href="#L1170">1170</a> <strong class="jxr_keyword">throw</strong> ThrowableUtils.runtimeException(<span class="jxr_string">"Could not convert object of type {0} to a list"</span>, cn(o));
<a class="jxr_linenumber" name="L1171" href="#L1171">1171</a> }
<a class="jxr_linenumber" name="L1172" href="#L1172">1172</a>
<a class="jxr_linenumber" name="L1173" href="#L1173">1173</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L1174" href="#L1174">1174</a> <em class="jxr_javadoccomment"> * Creates an unmodifiable view of the specified map.</em>
-<a class="jxr_linenumber" name="L1175" href="#L1175">1175</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L1176" href="#L1176">1176</a> <em class="jxr_javadoccomment"> * <p>This is a null-safe wrapper around {@link Collections#unmodifiableMap(Map)}.</p></em>
-<a class="jxr_linenumber" name="L1177" href="#L1177">1177</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L1178" href="#L1178">1178</a> <em class="jxr_javadoccomment"> * @param <K> The key type.</em>
-<a class="jxr_linenumber" name="L1179" href="#L1179">1179</a> <em class="jxr_javadoccomment"> * @param <V> The value type.</em>
-<a class="jxr_linenumber" name="L1180" href="#L1180">1180</a> <em class="jxr_javadoccomment"> * @param value The map to make unmodifiable. Can be null.</em>
-<a class="jxr_linenumber" name="L1181" href="#L1181">1181</a> <em class="jxr_javadoccomment"> * @return An unmodifiable view of the map, or null if the input was null.</em>
-<a class="jxr_linenumber" name="L1182" href="#L1182">1182</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L1183" href="#L1183">1183</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <K,V> Map<K,V> u(Map<? <strong class="jxr_keyword">extends</strong> K,? <strong class="jxr_keyword">extends</strong> V> value) {
-<a class="jxr_linenumber" name="L1184" href="#L1184">1184</a> <strong class="jxr_keyword">return</strong> value == <strong class="jxr_keyword">null</strong> ? <strong class="jxr_keyword">null</strong> : Collections.unmodifiableMap(value);
-<a class="jxr_linenumber" name="L1185" href="#L1185">1185</a> }
-<a class="jxr_linenumber" name="L1186" href="#L1186">1186</a>
-<a class="jxr_linenumber" name="L1187" href="#L1187">1187</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L1188" href="#L1188">1188</a> <em class="jxr_javadoccomment"> * Creates an unmodifiable view of the specified set.</em>
-<a class="jxr_linenumber" name="L1189" href="#L1189">1189</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L1190" href="#L1190">1190</a> <em class="jxr_javadoccomment"> * <p>This is a null-safe wrapper around {@link Collections#unmodifiableSet(Set)}.</p></em>
-<a class="jxr_linenumber" name="L1191" href="#L1191">1191</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L1192" href="#L1192">1192</a> <em class="jxr_javadoccomment"> * @param <T> The element type.</em>
-<a class="jxr_linenumber" name="L1193" href="#L1193">1193</a> <em class="jxr_javadoccomment"> * @param value The set to make unmodifiable. Can be null.</em>
-<a class="jxr_linenumber" name="L1194" href="#L1194">1194</a> <em class="jxr_javadoccomment"> * @return An unmodifiable view of the set, or null if the input was null.</em>
-<a class="jxr_linenumber" name="L1195" href="#L1195">1195</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L1196" href="#L1196">1196</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <T> Set<T> u(Set<? <strong class="jxr_keyword">extends</strong> T> value) {
-<a class="jxr_linenumber" name="L1197" href="#L1197">1197</a> <strong class="jxr_keyword">return</strong> value == <strong class="jxr_keyword">null</strong> ? <strong class="jxr_keyword">null</strong> : Collections.unmodifiableSet(value);
-<a class="jxr_linenumber" name="L1198" href="#L1198">1198</a> }
-<a class="jxr_linenumber" name="L1199" href="#L1199">1199</a>
-<a class="jxr_linenumber" name="L1200" href="#L1200">1200</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L1201" href="#L1201">1201</a> <em class="jxr_javadoccomment"> * Converts a property name to an environment variable name.</em>
-<a class="jxr_linenumber" name="L1202" href="#L1202">1202</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L1203" href="#L1203">1203</a> <em class="jxr_javadoccomment"> * @param name The property name to convert.</em>
-<a class="jxr_linenumber" name="L1204" href="#L1204">1204</a> <em class="jxr_javadoccomment"> * @return The environment variable name (uppercase with dots replaced by underscores).</em>
-<a class="jxr_linenumber" name="L1205" href="#L1205">1205</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L1206" href="#L1206">1206</a> <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> String envName(String name) {
-<a class="jxr_linenumber" name="L1207" href="#L1207">1207</a> <strong class="jxr_keyword">return</strong> PROPERTY_TO_ENV.computeIfAbsent(name, x -> x.toUpperCase().replace(<span class="jxr_string">"."</span>, <span class="jxr_string">"_"</span>));
-<a class="jxr_linenumber" name="L1208" href="#L1208">1208</a> }
-<a class="jxr_linenumber" name="L1209" href="#L1209">1209</a>
-<a class="jxr_linenumber" name="L1210" href="#L1210">1210</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L1211" href="#L1211">1211</a> <em class="jxr_javadoccomment"> * Converts a string to the specified type using registered conversion functions.</em>
-<a class="jxr_linenumber" name="L1212" href="#L1212">1212</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L1213" href="#L1213">1213</a> <em class="jxr_javadoccomment"> * @param <T> The target type.</em>
-<a class="jxr_linenumber" name="L1214" href="#L1214">1214</a> <em class="jxr_javadoccomment"> * @param s The string to convert.</em>
-<a class="jxr_linenumber" name="L1215" href="#L1215">1215</a> <em class="jxr_javadoccomment"> * @param def The default value (used to determine the target type).</em>
-<a class="jxr_linenumber" name="L1216" href="#L1216">1216</a> <em class="jxr_javadoccomment"> * @return The converted value, or <jk>null</jk> if the string or default is <jk>null</jk>.</em>
-<a class="jxr_linenumber" name="L1217" href="#L1217">1217</a> <em class="jxr_javadoccomment"> * @throws RuntimeException If the type is not supported for conversion.</em>
-<a class="jxr_linenumber" name="L1218" href="#L1218">1218</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L1219" href="#L1219">1219</a> @SuppressWarnings({ <span class="jxr_string">"unchecked"</span>, <span class="jxr_string">"rawtypes"</span> })
-<a class="jxr_linenumber" name="L1220" href="#L1220">1220</a> <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <T> T toType(String s, T def) {
-<a class="jxr_linenumber" name="L1221" href="#L1221">1221</a> <strong class="jxr_keyword">if</strong> (s == <strong class="jxr_keyword">null</strong> || def == <strong class="jxr_keyword">null</strong>)
-<a class="jxr_linenumber" name="L1222" href="#L1222">1222</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="L1223" href="#L1223">1223</a> <strong class="jxr_keyword">var</strong> c = (Class<T>)def.getClass();
-<a class="jxr_linenumber" name="L1224" href="#L1224">1224</a> <strong class="jxr_keyword">if</strong> (c == String.<strong class="jxr_keyword">class</strong>)
-<a class="jxr_linenumber" name="L1225" href="#L1225">1225</a> <strong class="jxr_keyword">return</strong> (T)s;
-<a class="jxr_linenumber" name="L1226" href="#L1226">1226</a> <strong class="jxr_keyword">if</strong> (c.isEnum())
-<a class="jxr_linenumber" name="L1227" href="#L1227">1227</a> <strong class="jxr_keyword">return</strong> (T)Enum.valueOf((Class<? <strong class="jxr_keyword">extends</strong> Enum>)c, s);
-<a class="jxr_linenumber" name="L1228" href="#L1228">1228</a> <strong class="jxr_keyword">var</strong> f = (Function<String,T>)ENV_FUNCTIONS.get(c);
-<a class="jxr_linenumber" name="L1229" href="#L1229">1229</a> <strong class="jxr_keyword">if</strong> (f == <strong class="jxr_keyword">null</strong>)
-<a class="jxr_linenumber" name="L1230" href="#L1230">1230</a> <strong class="jxr_keyword">throw</strong> ThrowableUtils.runtimeException(<span class="jxr_string">"Invalid env type: {0}"</span>, c);
-<a class="jxr_linenumber" name="L1231" href="#L1231">1231</a> <strong class="jxr_keyword">return</strong> f.apply(s);
-<a class="jxr_linenumber" name="L1232" href="#L1232">1232</a> }
-<a class="jxr_linenumber" name="L1233" href="#L1233">1233</a>
-<a class="jxr_linenumber" name="L1234" href="#L1234">1234</a> <em class="jxr_javadoccomment">/** Constructor - This class is meant to be subclasses. */</em>
-<a class="jxr_linenumber" name="L1235" href="#L1235">1235</a> <strong class="jxr_keyword">protected</strong> <a name="Utils" href="../../../../../org/apache/juneau/common/utils/Utils.html#Utils">Utils</a>() {}
-<a class="jxr_linenumber" name="L1236" href="#L1236">1236</a>
-<a class="jxr_linenumber" name="L1237" href="#L1237">1237</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L1238" href="#L1238">1238</a> <em class="jxr_javadoccomment"> * If the specified object is a {@link Supplier} or {@link Value}, returns the inner value, otherwise the same value.</em>
-<a class="jxr_linenumber" name="L1239" href="#L1239">1239</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L1240" href="#L1240">1240</a> <em class="jxr_javadoccomment"> * @param o The object to unwrap.</em>
-<a class="jxr_linenumber" name="L1241" href="#L1241">1241</a> <em class="jxr_javadoccomment"> * @return The unwrapped object.</em>
-<a class="jxr_linenumber" name="L1242" href="#L1242">1242</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L1243" href="#L1243">1243</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> Object unwrap(Object o) {
-<a class="jxr_linenumber" name="L1244" href="#L1244">1244</a> <strong class="jxr_keyword">if</strong> (o instanceof Supplier)
-<a class="jxr_linenumber" name="L1245" href="#L1245">1245</a> o = unwrap(((Supplier<?>)o).get());
-<a class="jxr_linenumber" name="L1246" href="#L1246">1246</a> <strong class="jxr_keyword">if</strong> (o instanceof <a name="Value" href="../../../../../org/apache/juneau/common/collections/Value.html#Value">Value</a>)
-<a class="jxr_linenumber" name="L1247" href="#L1247">1247</a> o = unwrap(((Value<?>)o).get());
-<a class="jxr_linenumber" name="L1248" href="#L1248">1248</a> <strong class="jxr_keyword">if</strong> (o instanceof Optional)
-<a class="jxr_linenumber" name="L1249" href="#L1249">1249</a> o = unwrap(((Optional<?>)o).orElse(<strong class="jxr_keyword">null</strong>));
-<a class="jxr_linenumber" name="L1250" href="#L1250">1250</a> <strong class="jxr_keyword">return</strong> o;
-<a class="jxr_linenumber" name="L1251" href="#L1251">1251</a> }
-<a class="jxr_linenumber" name="L1252" href="#L1252">1252</a>
-<a class="jxr_linenumber" name="L1253" href="#L1253">1253</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L1254" href="#L1254">1254</a> <em class="jxr_javadoccomment"> * Shortcut for calling {@link ClassUtils#className(Object)}.</em>
-<a class="jxr_linenumber" name="L1255" href="#L1255">1255</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L1256" href="#L1256">1256</a> <em class="jxr_javadoccomment"> * @param value The object to get the class name for.</em>
-<a class="jxr_linenumber" name="L1257" href="#L1257">1257</a> <em class="jxr_javadoccomment"> * @return The name of the class or <jk>null</jk> if the value was null.</em>
-<a class="jxr_linenumber" name="L1258" href="#L1258">1258</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L1259" href="#L1259">1259</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> String cn(Object value) {
-<a class="jxr_linenumber" name="L1260" href="#L1260">1260</a> <strong class="jxr_keyword">return</strong> ClassUtils.className(value);
-<a class="jxr_linenumber" name="L1261" href="#L1261">1261</a> }
-<a class="jxr_linenumber" name="L1262" href="#L1262">1262</a>
-<a class="jxr_linenumber" name="L1263" href="#L1263">1263</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L1264" href="#L1264">1264</a> <em class="jxr_javadoccomment"> * Shortcut for calling {@link ClassUtils#simpleClassName(Object)}.</em>
-<a class="jxr_linenumber" name="L1265" href="#L1265">1265</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L1266" href="#L1266">1266</a> <em class="jxr_javadoccomment"> * @param value The object to get the simple class name for.</em>
-<a class="jxr_linenumber" name="L1267" href="#L1267">1267</a> <em class="jxr_javadoccomment"> * @return The simple name of the class or <jk>null</jk> if the value was null.</em>
-<a class="jxr_linenumber" name="L1268" href="#L1268">1268</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L1269" href="#L1269">1269</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> String scn(Object value) {
-<a class="jxr_linenumber" name="L1270" href="#L1270">1270</a> <strong class="jxr_keyword">return</strong> ClassUtils.simpleClassName(value);
-<a class="jxr_linenumber" name="L1271" href="#L1271">1271</a> }
-<a class="jxr_linenumber" name="L1272" href="#L1272">1272</a>
-<a class="jxr_linenumber" name="L1273" href="#L1273">1273</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L1274" href="#L1274">1274</a> <em class="jxr_javadoccomment"> * Converts an object to a boolean.</em>
-<a class="jxr_linenumber" name="L1275" href="#L1275">1275</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L1276" href="#L1276">1276</a> <em class="jxr_javadoccomment"> * @param val The object to convert.</em>
-<a class="jxr_linenumber" name="L1277" href="#L1277">1277</a> <em class="jxr_javadoccomment"> * @return The boolean value, or <jk>false</jk> if the value was <jk>null</jk>.</em>
-<a class="jxr_linenumber" name="L1278" href="#L1278">1278</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L1279" href="#L1279">1279</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> b(Object val) {
-<a class="jxr_linenumber" name="L1280" href="#L1280">1280</a> <strong class="jxr_keyword">return</strong> opt(val).map(Object::toString).map(Boolean::valueOf).orElse(false);
-<a class="jxr_linenumber" name="L1281" href="#L1281">1281</a> }
-<a class="jxr_linenumber" name="L1282" href="#L1282">1282</a>
-<a class="jxr_linenumber" name="L1283" href="#L1283">1283</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L1284" href="#L1284">1284</a> <em class="jxr_javadoccomment"> * Returns <jk>true</jk> if the specified number is inclusively between the two values.</em>
-<a class="jxr_linenumber" name="L1285" href="#L1285">1285</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L1286" href="#L1286">1286</a> <em class="jxr_javadoccomment"> * @param n The number to check.</em>
-<a class="jxr_linenumber" name="L1287" href="#L1287">1287</a> <em class="jxr_javadoccomment"> * @param lower The lower bound (inclusive).</em>
-<a class="jxr_linenumber" name="L1288" href="#L1288">1288</a> <em class="jxr_javadoccomment"> * @param higher The upper bound (inclusive).</em>
-<a class="jxr_linenumber" name="L1289" href="#L1289">1289</a> <em class="jxr_javadoccomment"> * @return <jk>true</jk> if the number is between the bounds.</em>
-<a class="jxr_linenumber" name="L1290" href="#L1290">1290</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L1291" href="#L1291">1291</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> isBetween(<strong class="jxr_keyword">int</strong> n, <strong class="jxr_keyword">int</strong> lower, <strong class="jxr_keyword">int</strong> higher) {
-<a class="jxr_linenumber" name="L1292" href="#L1292">1292</a> <strong class="jxr_keyword">return</strong> n >= lower && n <= higher;
-<a class="jxr_linenumber" name="L1293" href="#L1293">1293</a> }
-<a class="jxr_linenumber" name="L1294" href="#L1294">1294</a>
-<a class="jxr_linenumber" name="L1295" href="#L1295">1295</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L1296" href="#L1296">1296</a> <em class="jxr_javadoccomment"> * Same as {@link Integer#parseInt(String)} but removes any underscore characters first.</em>
-<a class="jxr_linenumber" name="L1297" href="#L1297">1297</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L1298" href="#L1298">1298</a> <em class="jxr_javadoccomment"> * <p>Allows for better readability of numeric literals (e.g., <js>"1_000_000"</js>).</em>
-<a class="jxr_linenumber" name="L1299" href="#L1299">1299</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L1300" href="#L1300">1300</a> <em class="jxr_javadoccomment"> * @param value The string to parse.</em>
-<a class="jxr_linenumber" name="L1301" href="#L1301">1301</a> <em class="jxr_javadoccomment"> * @return The parsed integer value.</em>
-<a class="jxr_linenumber" name="L1302" href="#L1302">1302</a> <em class="jxr_javadoccomment"> * @throws NumberFormatException If the string cannot be parsed.</em>
-<a class="jxr_linenumber" name="L1303" href="#L1303">1303</a> <em class="jxr_javadoccomment"> * @throws NullPointerException If the string is <jk>null</jk>.</em>
-<a class="jxr_linenumber" name="L1304" href="#L1304">1304</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L1305" href="#L1305">1305</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">int</strong> parseInt(String value) {
-<a class="jxr_linenumber" name="L1306" href="#L1306">1306</a> <strong class="jxr_keyword">return</strong> Integer.parseInt(removeUnderscores(value));
-<a class="jxr_linenumber" name="L1307" href="#L1307">1307</a> }
-<a class="jxr_linenumber" name="L1308" href="#L1308">1308</a>
-<a class="jxr_linenumber" name="L1309" href="#L1309">1309</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L1310" href="#L1310">1310</a> <em class="jxr_javadoccomment"> * Same as {@link Long#parseLong(String)} but removes any underscore characters first.</em>
-<a class="jxr_linenumber" name="L1311" href="#L1311">1311</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L1312" href="#L1312">1312</a> <em class="jxr_javadoccomment"> * <p>Allows for better readability of numeric literals (e.g., <js>"1_000_000"</js>).</em>
-<a class="jxr_linenumber" name="L1313" href="#L1313">1313</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L1314" href="#L1314">1314</a> <em class="jxr_javadoccomment"> * @param value The string to parse.</em>
-<a class="jxr_linenumber" name="L1315" href="#L1315">1315</a> <em class="jxr_javadoccomment"> * @return The parsed long value.</em>
-<a class="jxr_linenumber" name="L1316" href="#L1316">1316</a> <em class="jxr_javadoccomment"> * @throws NumberFormatException If the string cannot be parsed.</em>
-<a class="jxr_linenumber" name="L1317" href="#L1317">1317</a> <em class="jxr_javadoccomment"> * @throws NullPointerException If the string is <jk>null</jk>.</em>
-<a class="jxr_linenumber" name="L1318" href="#L1318">1318</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L1319" href="#L1319">1319</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">long</strong> parseLong(String value) {
-<a class="jxr_linenumber" name="L1320" href="#L1320">1320</a> <strong class="jxr_keyword">return</strong> Long.parseLong(removeUnderscores(value));
-<a class="jxr_linenumber" name="L1321" href="#L1321">1321</a> }
-<a class="jxr_linenumber" name="L1322" href="#L1322">1322</a>
-<a class="jxr_linenumber" name="L1323" href="#L1323">1323</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L1324" href="#L1324">1324</a> <em class="jxr_javadoccomment"> * Same as {@link Float#parseFloat(String)} but removes any underscore characters first.</em>
-<a class="jxr_linenumber" name="L1325" href="#L1325">1325</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L1326" href="#L1326">1326</a> <em class="jxr_javadoccomment"> * <p>Allows for better readability of numeric literals (e.g., <js>"1_000.5"</js>).</em>
-<a class="jxr_linenumber" name="L1327" href="#L1327">1327</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L1328" href="#L1328">1328</a> <em class="jxr_javadoccomment"> * @param value The string to parse.</em>
-<a class="jxr_linenumber" name="L1329" href="#L1329">1329</a> <em class="jxr_javadoccomment"> * @return The parsed float value.</em>
-<a class="jxr_linenumber" name="L1330" href="#L1330">1330</a> <em class="jxr_javadoccomment"> * @throws NumberFormatException If the string cannot be parsed.</em>
-<a class="jxr_linenumber" name="L1331" href="#L1331">1331</a> <em class="jxr_javadoccomment"> * @throws NullPointerException If the string is <jk>null</jk>.</em>
-<a class="jxr_linenumber" name="L1332" href="#L1332">1332</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L1333" href="#L1333">1333</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">float</strong> parseFloat(String value) {
-<a class="jxr_linenumber" name="L1334" href="#L1334">1334</a> <strong class="jxr_keyword">return</strong> Float.parseFloat(removeUnderscores(value));
-<a class="jxr_linenumber" name="L1335" href="#L1335">1335</a> }
-<a class="jxr_linenumber" name="L1336" href="#L1336">1336</a>
-<a class="jxr_linenumber" name="L1337" href="#L1337">1337</a> <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> String removeUnderscores(String value) {
-<a class="jxr_linenumber" name="L1338" href="#L1338">1338</a> <strong class="jxr_keyword">if</strong> (value == <strong class="jxr_keyword">null</strong>)
-<a class="jxr_linenumber" name="L1339" href="#L1339">1339</a> <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> NullPointerException(<span class="jxr_string">"Trying to parse null string."</span>);
-<a class="jxr_linenumber" name="L1340" href="#L1340">1340</a> <strong class="jxr_keyword">return</strong> StringUtils.notContains(value, '_') ? value : value.replace(<span class="jxr_string">"_"</span>, <span class="jxr_string">""</span>);
-<a class="jxr_linenumber" name="L1341" href="#L1341">1341</a> }
-<a class="jxr_linenumber" name="L1342" href="#L1342">1342</a>
-<a class="jxr_linenumber" name="L1343" href="#L1343">1343</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L1344" href="#L1344">1344</a> <em class="jxr_javadoccomment"> * Shortcut for calling {@link StringUtils#stringSupplier(Supplier)}.</em>
-<a class="jxr_linenumber" name="L1345" href="#L1345">1345</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L1346" href="#L1346">1346</a> <em class="jxr_javadoccomment"> * @param s The supplier.</em>
-<a class="jxr_linenumber" name="L1347" href="#L1347">1347</a> <em class="jxr_javadoccomment"> * @return A string supplier that calls {@link #r(Object)} on the supplied value.</em>
-<a class="jxr_linenumber" name="L1348" href="#L1348">1348</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L1349" href="#L1349">1349</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> Supplier<String> ss(Supplier<?> s) {
-<a class="jxr_linenumber" name="L1350" href="#L1350">1350</a> <strong class="jxr_keyword">return</strong> StringUtils.stringSupplier(s);
-<a class="jxr_linenumber" name="L1351" href="#L1351">1351</a> }
-<a class="jxr_linenumber" name="L1352" href="#L1352">1352</a> }
+<a class="jxr_linenumber" name="L1174" href="#L1174">1174</a> <em class="jxr_javadoccomment"> * Converts an array to a stream of objects.</em>
+<a class="jxr_linenumber" name="L1175" href="#L1175">1175</a> <em class="jxr_javadoccomment"> * @param array The array to convert.</em>
+<a class="jxr_linenumber" name="L1176" href="#L1176">1176</a> <em class="jxr_javadoccomment"> * @return A new stream.</em>
+<a class="jxr_linenumber" name="L1177" href="#L1177">1177</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L1178" href="#L1178">1178</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> Stream<Object> toStream(Object array) {
+<a class="jxr_linenumber" name="L1179" href="#L1179">1179</a> AssertionUtils.assertArg(isArray(array), <span class="jxr_string">"Arg was not an array. Type: {0}"</span>, array.getClass().getName());
+<a class="jxr_linenumber" name="L1180" href="#L1180">1180</a> <strong class="jxr_keyword">var</strong> length = Array.getLength(array);
+<a class="jxr_linenumber" name="L1181" href="#L1181">1181</a> <strong class="jxr_keyword">return</strong> IntStream.range(0, length).mapToObj(i -> Array.get(array, i));
+<a class="jxr_linenumber" name="L1182" href="#L1182">1182</a> }
+<a class="jxr_linenumber" name="L1183" href="#L1183">1183</a>
+<a class="jxr_linenumber" name="L1184" href="#L1184">1184</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L1185" href="#L1185">1185</a> <em class="jxr_javadoccomment"> * Traverses all elements in the specified object and executes a consumer for it.</em>
+<a class="jxr_linenumber" name="L1186" href="#L1186">1186</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L1187" href="#L1187">1187</a> <em class="jxr_javadoccomment"> * @param <T> The element type.</em>
+<a class="jxr_linenumber" name="L1188" href="#L1188">1188</a> <em class="jxr_javadoccomment"> * @param o The object to traverse.</em>
+<a class="jxr_linenumber" name="L1189" href="#L1189">1189</a> <em class="jxr_javadoccomment"> * @param c The consumer of the objects.</em>
+<a class="jxr_linenumber" name="L1190" href="#L1190">1190</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L1191" href="#L1191">1191</a> @SuppressWarnings(<span class="jxr_string">"unchecked"</span>)
+<a class="jxr_linenumber" name="L1192" href="#L1192">1192</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <T> <strong class="jxr_keyword">void</strong> traverse(Object o, Consumer<T> c) {
+<a class="jxr_linenumber" name="L1193" href="#L1193">1193</a> <strong class="jxr_keyword">if</strong> (o == <strong class="jxr_keyword">null</strong>)
+<a class="jxr_linenumber" name="L1194" href="#L1194">1194</a> <strong class="jxr_keyword">return</strong>;
+<a class="jxr_linenumber" name="L1195" href="#L1195">1195</a> <strong class="jxr_keyword">if</strong> (o instanceof Iterable<?> o2)
+<a class="jxr_linenumber" name="L1196" href="#L1196">1196</a> o2.forEach(x -> traverse(x, c));
+<a class="jxr_linenumber" name="L1197" href="#L1197">1197</a> <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (o instanceof Stream<?> o2)
+<a class="jxr_linenumber" name="L1198" href="#L1198">1198</a> o2.forEach(x -> traverse(x, c));
+<a class="jxr_linenumber" name="L1199" href="#L1199">1199</a> <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (isArray(o))
+<a class="jxr_linenumber" name="L1200" href="#L1200">1200</a> toStream(o).forEach(x -> traverse(x, c));
+<a class="jxr_linenumber" name="L1201" href="#L1201">1201</a> <strong class="jxr_keyword">else</strong>
+<a class="jxr_linenumber" name="L1202" href="#L1202">1202</a> c.accept((T)o);
+<a class="jxr_linenumber" name="L1203" href="#L1203">1203</a> }
+<a class="jxr_linenumber" name="L1204" href="#L1204">1204</a>
+<a class="jxr_linenumber" name="L1205" href="#L1205">1205</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L1206" href="#L1206">1206</a> <em class="jxr_javadoccomment"> * Creates an unmodifiable view of the specified list.</em>
+<a class="jxr_linenumber" name="L1207" href="#L1207">1207</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L1208" href="#L1208">1208</a> <em class="jxr_javadoccomment"> * <p>This is a null-safe wrapper around {@link Collections#unmodifiableList(List)}.</p></em>
+<a class="jxr_linenumber" name="L1209" href="#L1209">1209</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L1210" href="#L1210">1210</a> <em class="jxr_javadoccomment"> * @param <T> The element type.</em>
+<a class="jxr_linenumber" name="L1211" href="#L1211">1211</a> <em class="jxr_javadoccomment"> * @param value The list to make unmodifiable. Can be null.</em>
+<a class="jxr_linenumber" name="L1212" href="#L1212">1212</a> <em class="jxr_javadoccomment"> * @return An unmodifiable view of the list, or null if the input was null.</em>
+<a class="jxr_linenumber" name="L1213" href="#L1213">1213</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L1214" href="#L1214">1214</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <T> List<T> u(List<? <strong class="jxr_keyword">extends</strong> T> value) {
+<a class="jxr_linenumber" name="L1215" href="#L1215">1215</a> <strong class="jxr_keyword">return</strong> value == <strong class="jxr_keyword">null</strong> ? <strong class="jxr_keyword">null</strong> : Collections.unmodifiableList(value);
+<a class="jxr_linenumber" name="L1216" href="#L1216">1216</a> }
+<a class="jxr_linenumber" name="L1217" href="#L1217">1217</a>
+<a class="jxr_linenumber" name="L1218" href="#L1218">1218</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L1219" href="#L1219">1219</a> <em class="jxr_javadoccomment"> * Creates an unmodifiable view of the specified map.</em>
+<a class="jxr_linenumber" name="L1220" href="#L1220">1220</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L1221" href="#L1221">1221</a> <em class="jxr_javadoccomment"> * <p>This is a null-safe wrapper around {@link Collections#unmodifiableMap(Map)}.</p></em>
+<a class="jxr_linenumber" name="L1222" href="#L1222">1222</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L1223" href="#L1223">1223</a> <em class="jxr_javadoccomment"> * @param <K> The key type.</em>
+<a class="jxr_linenumber" name="L1224" href="#L1224">1224</a> <em class="jxr_javadoccomment"> * @param <V> The value type.</em>
+<a class="jxr_linenumber" name="L1225" href="#L1225">1225</a> <em class="jxr_javadoccomment"> * @param value The map to make unmodifiable. Can be null.</em>
+<a class="jxr_linenumber" name="L1226" href="#L1226">1226</a> <em class="jxr_javadoccomment"> * @return An unmodifiable view of the map, or null if the input was null.</em>
+<a class="jxr_linenumber" name="L1227" href="#L1227">1227</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L1228" href="#L1228">1228</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <K,V> Map<K,V> u(Map<? <strong class="jxr_keyword">extends</strong> K,? <strong class="jxr_keyword">extends</strong> V> value) {
+<a class="jxr_linenumber" name="L1229" href="#L1229">1229</a> <strong class="jxr_keyword">return</strong> value == <strong class="jxr_keyword">null</strong> ? <strong class="jxr_keyword">null</strong> : Collections.unmodifiableMap(value);
+<a class="jxr_linenumber" name="L1230" href="#L1230">1230</a> }
+<a class="jxr_linenumber" name="L1231" href="#L1231">1231</a>
+<a class="jxr_linenumber" name="L1232" href="#L1232">1232</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L1233" href="#L1233">1233</a> <em class="jxr_javadoccomment"> * Creates an unmodifiable view of the specified set.</em>
+<a class="jxr_linenumber" name="L1234" href="#L1234">1234</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L1235" href="#L1235">1235</a> <em class="jxr_javadoccomment"> * <p>This is a null-safe wrapper around {@link Collections#unmodifiableSet(Set)}.</p></em>
+<a class="jxr_linenumber" name="L1236" href="#L1236">1236</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L1237" href="#L1237">1237</a> <em class="jxr_javadoccomment"> * @param <T> The element type.</em>
+<a class="jxr_linenumber" name="L1238" href="#L1238">1238</a> <em class="jxr_javadoccomment"> * @param value The set to make unmodifiable. Can be null.</em>
+<a class="jxr_linenumber" name="L1239" href="#L1239">1239</a> <em class="jxr_javadoccomment"> * @return An unmodifiable view of the set, or null if the input was null.</em>
+<a class="jxr_linenumber" name="L1240" href="#L1240">1240</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L1241" href="#L1241">1241</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <T> Set<T> u(Set<? <strong class="jxr_keyword">extends</strong> T> value) {
+<a class="jxr_linenumber" name="L1242" href="#L1242">1242</a> <strong class="jxr_keyword">return</strong> value == <strong class="jxr_keyword">null</strong> ? <strong class="jxr_keyword">null</strong> : Collections.unmodifiableSet(value);
+<a class="jxr_linenumber" name="L1243" href="#L1243">1243</a> }
+<a class="jxr_linenumber" name="L1244" href="#L1244">1244</a>
+<a class="jxr_linenumber" name="L1245" href="#L1245">1245</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L1246" href="#L1246">1246</a> <em class="jxr_javadoccomment"> * Converts a property name to an environment variable name.</em>
+<a class="jxr_linenumber" name="L1247" href="#L1247">1247</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L1248" href="#L1248">1248</a> <em class="jxr_javadoccomment"> * @param name The property name to convert.</em>
+<a class="jxr_linenumber" name="L1249" href="#L1249">1249</a> <em class="jxr_javadoccomment"> * @return The environment variable name (uppercase with dots replaced by underscores).</em>
+<a class="jxr_linenumber" name="L1250" href="#L1250">1250</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L1251" href="#L1251">1251</a> <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> String envName(String name) {
+<a class="jxr_linenumber" name="L1252" href="#L1252">1252</a> <strong class="jxr_keyword">return</strong> PROPERTY_TO_ENV.computeIfAbsent(name, x -> x.toUpperCase().replace(<span class="jxr_string">"."</span>, <span class="jxr_string">"_"</span>));
+<a class="jxr_linenumber" name="L1253" href="#L1253">1253</a> }
+<a class="jxr_linenumber" name="L1254" href="#L1254">1254</a>
+<a class="jxr_linenumber" name="L1255" href="#L1255">1255</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L1256" href="#L1256">1256</a> <em class="jxr_javadoccomment"> * Converts a string to the specified type using registered conversion functions.</em>
+<a class="jxr_linenumber" name="L1257" href="#L1257">1257</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L1258" href="#L1258">1258</a> <em class="jxr_javadoccomment"> * @param <T> The target type.</em>
+<a class="jxr_linenumber" name="L1259" href="#L1259">1259</a> <em class="jxr_javadoccomment"> * @param s The string to convert.</em>
+<a class="jxr_linenumber" name="L1260" href="#L1260">1260</a> <em class="jxr_javadoccomment"> * @param def The default value (used to determine the target type).</em>
+<a class="jxr_linenumber" name="L1261" href="#L1261">1261</a> <em class="jxr_javadoccomment"> * @return The converted value, or <jk>null</jk> if the string or default is <jk>null</jk>.</em>
+<a class="jxr_linenumber" name="L1262" href="#L1262">1262</a> <em class="jxr_javadoccomment"> * @throws RuntimeException If the type is not supported for conversion.</em>
+<a class="jxr_linenumber" name="L1263" href="#L1263">1263</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L1264" href="#L1264">1264</a> @SuppressWarnings({ <span class="jxr_string">"unchecked"</span>, <span class="jxr_string">"rawtypes"</span> })
+<a class="jxr_linenumber" name="L1265" href="#L1265">1265</a> <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <T> T toType(String s, T def) {
+<a class="jxr_linenumber" name="L1266" href="#L1266">1266</a> <strong class="jxr_keyword">if</strong> (s == <strong class="jxr_keyword">null</strong> || def == <strong class="jxr_keyword">null</strong>)
+<a class="jxr_linenumber" name="L1267" href="#L1267">1267</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="L1268" href="#L1268">1268</a> <strong class="jxr_keyword">var</strong> c = (Class<T>)def.getClass();
+<a class="jxr_linenumber" name="L1269" href="#L1269">1269</a> <strong class="jxr_keyword">if</strong> (c == String.<strong class="jxr_keyword">class</strong>)
+<a class="jxr_linenumber" name="L1270" href="#L1270">1270</a> <strong class="jxr_keyword">return</strong> (T)s;
+<a class="jxr_linenumber" name="L1271" href="#L1271">1271</a> <strong class="jxr_keyword">if</strong> (c.isEnum())
+<a class="jxr_linenumber" name="L1272" href="#L1272">1272</a> <strong class="jxr_keyword">return</strong> (T)Enum.valueOf((Class<? <strong class="jxr_keyword">extends</strong> Enum>)c, s);
+<a class="jxr_linenumber" name="L1273" href="#L1273">1273</a> <strong class="jxr_keyword">var</strong> f = (Function<String,T>)ENV_FUNCTIONS.get(c);
+<a class="jxr_linenumber" name="L1274" href="#L1274">1274</a> <strong class="jxr_keyword">if</strong> (f == <strong class="jxr_keyword">null</strong>)
+<a class="jxr_linenumber" name="L1275" href="#L1275">1275</a> <strong class="jxr_keyword">throw</strong> ThrowableUtils.runtimeException(<span class="jxr_string">"Invalid env type: {0}"</span>, c);
+<a class="jxr_linenumber" name="L1276" href="#L1276">1276</a> <strong class="jxr_keyword">return</strong> f.apply(s);
+<a class="jxr_linenumber" name="L1277" href="#L1277">1277</a> }
+<a class="jxr_linenumber" name="L1278" href="#L1278">1278</a>
+<a class="jxr_linenumber" name="L1279" href="#L1279">1279</a> <em class="jxr_javadoccomment">/** Constructor - This class is meant to be subclasses. */</em>
+<a class="jxr_linenumber" name="L1280" href="#L1280">1280</a> <strong class="jxr_keyword">protected</strong> <a name="Utils" href="../../../../../org/apache/juneau/common/utils/Utils.html#Utils">Utils</a>() {}
+<a class="jxr_linenumber" name="L1281" href="#L1281">1281</a>
+<a class="jxr_linenumber" name="L1282" href="#L1282">1282</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L1283" href="#L1283">1283</a> <em class="jxr_javadoccomment"> * If the specified object is a {@link Supplier} or {@link Value}, returns the inner value, otherwise the same value.</em>
+<a class="jxr_linenumber" name="L1284" href="#L1284">1284</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L1285" href="#L1285">1285</a> <em class="jxr_javadoccomment"> * @param o The object to unwrap.</em>
+<a class="jxr_linenumber" name="L1286" href="#L1286">1286</a> <em class="jxr_javadoccomment"> * @return The unwrapped object.</em>
+<a class="jxr_linenumber" name="L1287" href="#L1287">1287</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L1288" href="#L1288">1288</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> Object unwrap(Object o) {
+<a class="jxr_linenumber" name="L1289" href="#L1289">1289</a> <strong class="jxr_keyword">if</strong> (o instanceof Supplier)
+<a class="jxr_linenumber" name="L1290" href="#L1290">1290</a> o = unwrap(((Supplier<?>)o).get());
+<a class="jxr_linenumber" name="L1291" href="#L1291">1291</a> <strong class="jxr_keyword">if</strong> (o instanceof <a name="Value" href="../../../../../org/apache/juneau/common/collections/Value.html#Value">Value</a>)
+<a class="jxr_linenumber" name="L1292" href="#L1292">1292</a> o = unwrap(((Value<?>)o).get());
+<a class="jxr_linenumber" name="L1293" href="#L1293">1293</a> <strong class="jxr_keyword">if</strong> (o instanceof Optional)
+<a class="jxr_linenumber" name="L1294" href="#L1294">1294</a> o = unwrap(((Optional<?>)o).orElse(<strong class="jxr_keyword">null</strong>));
+<a class="jxr_linenumber" name="L1295" href="#L1295">1295</a> <strong class="jxr_keyword">return</strong> o;
+<a class="jxr_linenumber" name="L1296" href="#L1296">1296</a> }
+<a class="jxr_linenumber" name="L1297" href="#L1297">1297</a>
+<a class="jxr_linenumber" name="L1298" href="#L1298">1298</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L1299" href="#L1299">1299</a> <em class="jxr_javadoccomment"> * Shortcut for calling {@link ClassUtils#className(Object)}.</em>
+<a class="jxr_linenumber" name="L1300" href="#L1300">1300</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L1301" href="#L1301">1301</a> <em class="jxr_javadoccomment"> * @param value The object to get the class name for.</em>
+<a class="jxr_linenumber" name="L1302" href="#L1302">1302</a> <em class="jxr_javadoccomment"> * @return The name of the class or <jk>null</jk> if the value was null.</em>
+<a class="jxr_linenumber" name="L1303" href="#L1303">1303</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L1304" href="#L1304">1304</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> String cn(Object value) {
+<a class="jxr_linenumber" name="L1305" href="#L1305">1305</a> <strong class="jxr_keyword">return</strong> ClassUtils.className(value);
+<a class="jxr_linenumber" name="L1306" href="#L1306">1306</a> }
+<a class="jxr_linenumber" name="L1307" href="#L1307">1307</a>
+<a class="jxr_linenumber" name="L1308" href="#L1308">1308</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L1309" href="#L1309">1309</a> <em class="jxr_javadoccomment"> * Shortcut for calling {@link ClassUtils#simpleClassName(Object)}.</em>
+<a class="jxr_linenumber" name="L1310" href="#L1310">1310</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L1311" href="#L1311">1311</a> <em class="jxr_javadoccomment"> * @param value The object to get the simple class name for.</em>
+<a class="jxr_linenumber" name="L1312" href="#L1312">1312</a> <em class="jxr_javadoccomment"> * @return The simple name of the class or <jk>null</jk> if the value was null.</em>
+<a class="jxr_linenumber" name="L1313" href="#L1313">1313</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L1314" href="#L1314">1314</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> String scn(Object value) {
+<a class="jxr_linenumber" name="L1315" href="#L1315">1315</a> <strong class="jxr_keyword">return</strong> ClassUtils.simpleClassName(value);
+<a class="jxr_linenumber" name="L1316" href="#L1316">1316</a> }
+<a class="jxr_linenumber" name="L1317" href="#L1317">1317</a>
+<a class="jxr_linenumber" name="L1318" href="#L1318">1318</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L1319" href="#L1319">1319</a> <em class="jxr_javadoccomment"> * Converts an object to a boolean.</em>
+<a class="jxr_linenumber" name="L1320" href="#L1320">1320</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L1321" href="#L1321">1321</a> <em class="jxr_javadoccomment"> * @param val The object to convert.</em>
+<a class="jxr_linenumber" name="L1322" href="#L1322">1322</a> <em class="jxr_javadoccomment"> * @return The boolean value, or <jk>false</jk> if the value was <jk>null</jk>.</em>
+<a class="jxr_linenumber" name="L1323" href="#L1323">1323</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L1324" href="#L1324">1324</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> b(Object val) {
+<a class="jxr_linenumber" name="L1325" href="#L1325">1325</a> <strong class="jxr_keyword">return</strong> opt(val).map(Object::toString).map(Boolean::valueOf).orElse(false);
+<a class="jxr_linenumber" name="L1326" href="#L1326">1326</a> }
+<a class="jxr_linenumber" name="L1327" href="#L1327">1327</a>
+<a class="jxr_linenumber" name="L1328" href="#L1328">1328</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L1329" href="#L1329">1329</a> <em class="jxr_javadoccomment"> * Returns <jk>true</jk> if the specified number is inclusively between the two values.</em>
+<a class="jxr_linenumber" name="L1330" href="#L1330">1330</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L1331" href="#L1331">1331</a> <em class="jxr_javadoccomment"> * @param n The number to check.</em>
+<a class="jxr_linenumber" name="L1332" href="#L1332">1332</a> <em class="jxr_javadoccomment"> * @param lower The lower bound (inclusive).</em>
+<a class="jxr_linenumber" name="L1333" href="#L1333">1333</a> <em class="jxr_javadoccomment"> * @param higher The upper bound (inclusive).</em>
+<a class="jxr_linenumber" name="L1334" href="#L1334">1334</a> <em class="jxr_javadoccomment"> * @return <jk>true</jk> if the number is between the bounds.</em>
+<a class="jxr_linenumber" name="L1335" href="#L1335">1335</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L1336" href="#L1336">1336</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> isBetween(<strong class="jxr_keyword">int</strong> n, <strong class="jxr_keyword">int</strong> lower, <strong class="jxr_keyword">int</strong> higher) {
+<a class="jxr_linenumber" name="L1337" href="#L1337">1337</a> <strong class="jxr_keyword">return</strong> n >= lower && n <= higher;
+<a class="jxr_linenumber" name="L1338" href="#L1338">1338</a> }
+<a class="jxr_linenumber" name="L1339" href="#L1339">1339</a>
+<a class="jxr_linenumber" name="L1340" href="#L1340">1340</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L1341" href="#L1341">1341</a> <em class="jxr_javadoccomment"> * Same as {@link Integer#parseInt(String)} but removes any underscore characters first.</em>
+<a class="jxr_linenumber" name="L1342" href="#L1342">1342</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L1343" href="#L1343">1343</a> <em class="jxr_javadoccomment"> * <p>Allows for better readability of numeric literals (e.g., <js>"1_000_000"</js>).</em>
+<a class="jxr_linenumber" name="L1344" href="#L1344">1344</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L1345" href="#L1345">1345</a> <em class="jxr_javadoccomment"> * @param value The string to parse.</em>
+<a class="jxr_linenumber" name="L1346" href="#L1346">1346</a> <em class="jxr_javadoccomment"> * @return The parsed integer value.</em>
+<a class="jxr_linenumber" name="L1347" href="#L1347">1347</a> <em class="jxr_javadoccomment"> * @throws NumberFormatException If the string cannot be parsed.</em>
+<a class="jxr_linenumber" name="L1348" href="#L1348">1348</a> <em class="jxr_javadoccomment"> * @throws NullPointerException If the string is <jk>null</jk>.</em>
+<a class="jxr_linenumber" name="L1349" href="#L1349">1349</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L1350" href="#L1350">1350</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">int</strong> parseInt(String value) {
+<a class="jxr_linenumber" name="L1351" href="#L1351">1351</a> <strong class="jxr_keyword">return</strong> Integer.parseInt(removeUnderscores(value));
+<a class="jxr_linenumber" name="L1352" href="#L1352">1352</a> }
+<a class="jxr_linenumber" name="L1353" href="#L1353">1353</a>
+<a class="jxr_linenumber" name="L1354" href="#L1354">1354</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L1355" href="#L1355">1355</a> <em class="jxr_javadoccomment"> * Same as {@link Long#parseLong(String)} but removes any underscore characters first.</em>
+<a class="jxr_linenumber" name="L1356" href="#L1356">1356</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L1357" href="#L1357">1357</a> <em class="jxr_javadoccomment"> * <p>Allows for better readability of numeric literals (e.g., <js>"1_000_000"</js>).</em>
+<a class="jxr_linenumber" name="L1358" href="#L1358">1358</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L1359" href="#L1359">1359</a> <em class="jxr_javadoccomment"> * @param value The string to parse.</em>
+<a class="jxr_linenumber" name="L1360" href="#L1360">1360</a> <em class="jxr_javadoccomment"> * @return The parsed long value.</em>
+<a class="jxr_linenumber" name="L1361" href="#L1361">1361</a> <em class="jxr_javadoccomment"> * @throws NumberFormatException If the string cannot be parsed.</em>
+<a class="jxr_linenumber" name="L1362" href="#L1362">1362</a> <em class="jxr_javadoccomment"> * @throws NullPointerException If the string is <jk>null</jk>.</em>
+<a class="jxr_linenumber" name="L1363" href="#L1363">1363</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L1364" href="#L1364">1364</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">long</strong> parseLong(String value) {
+<a class="jxr_linenumber" name="L1365" href="#L1365">1365</a> <strong class="jxr_keyword">return</strong> Long.parseLong(removeUnderscores(value));
+<a class="jxr_linenumber" name="L1366" href="#L1366">1366</a> }
+<a class="jxr_linenumber" name="L1367" href="#L1367">1367</a>
+<a class="jxr_linenumber" name="L1368" href="#L1368">1368</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L1369" href="#L1369">1369</a> <em class="jxr_javadoccomment"> * Same as {@link Float#parseFloat(String)} but removes any underscore characters first.</em>
+<a class="jxr_linenumber" name="L1370" href="#L1370">1370</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L1371" href="#L1371">1371</a> <em class="jxr_javadoccomment"> * <p>Allows for better readability of numeric literals (e.g., <js>"1_000.5"</js>).</em>
+<a class="jxr_linenumber" name="L1372" href="#L1372">1372</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L1373" href="#L1373">1373</a> <em class="jxr_javadoccomment"> * @param value The string to parse.</em>
+<a class="jxr_linenumber" name="L1374" href="#L1374">1374</a> <em class="jxr_javadoccomment"> * @return The parsed float value.</em>
+<a class="jxr_linenumber" name="L1375" href="#L1375">1375</a> <em class="jxr_javadoccomment"> * @throws NumberFormatException If the string cannot be parsed.</em>
+<a class="jxr_linenumber" name="L1376" href="#L1376">1376</a> <em class="jxr_javadoccomment"> * @throws NullPointerException If the string is <jk>null</jk>.</em>
+<a class="jxr_linenumber" name="L1377" href="#L1377">1377</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L1378" href="#L1378">1378</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">float</strong> parseFloat(String value) {
+<a class="jxr_linenumber" name="L1379" href="#L1379">1379</a> <strong class="jxr_keyword">return</strong> Float.parseFloat(removeUnderscores(value));
+<a class="jxr_linenumber" name="L1380" href="#L1380">1380</a> }
+<a class="jxr_linenumber" name="L1381" href="#L1381">1381</a>
+<a class="jxr_linenumber" name="L1382" href="#L1382">1382</a> <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> String removeUnderscores(String value) {
+<a class="jxr_linenumber" name="L1383" href="#L1383">1383</a> <strong class="jxr_keyword">if</strong> (value == <strong class="jxr_keyword">null</strong>)
+<a class="jxr_linenumber" name="L1384" href="#L1384">1384</a> <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> NullPointerException(<span class="jxr_string">"Trying to parse null string."</span>);
+<a class="jxr_linenumber" name="L1385" href="#L1385">1385</a> <strong class="jxr_keyword">return</strong> StringUtils.notContains(value, '_') ? value : value.replace(<span class="jxr_string">"_"</span>, <span class="jxr_string">""</span>);
+<a class="jxr_linenumber" name="L1386" href="#L1386">1386</a> }
+<a class="jxr_linenumber" name="L1387" href="#L1387">1387</a>
+<a class="jxr_linenumber" name="L1388" href="#L1388">1388</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L1389" href="#L1389">1389</a> <em class="jxr_javadoccomment"> * Shortcut for calling {@link StringUtils#stringSupplier(Supplier)}.</em>
+<a class="jxr_linenumber" name="L1390" href="#L1390">1390</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L1391" href="#L1391">1391</a> <em class="jxr_javadoccomment"> * @param s The supplier.</em>
+<a class="jxr_linenumber" name="L1392" href="#L1392">1392</a> <em class="jxr_javadoccomment"> * @return A string supplier that calls {@link #r(Object)} on the supplied value.</em>
+<a class="jxr_linenumber" name="L1393" href="#L1393">1393</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L1394" href="#L1394">1394</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> Supplier<String> ss(Supplier<?> s) {
+<a class="jxr_linenumber" name="L1395" href="#L1395">1395</a> <strong class="jxr_keyword">return</strong> StringUtils.stringSupplier(s);
+<a class="jxr_linenumber" name="L1396" href="#L1396">1396</a> }
+<a class="jxr_linenumber" name="L1397" href="#L1397">1397</a> }
</pre>
<hr/>
<div id="footer">© 2016–2025 <a href="https://www.apache.org/">The Apache Software Foundation</a></div>
diff --git a/site/xref/org/apache/juneau/cp/FileFinder.html b/site/xref/org/apache/juneau/cp/FileFinder.html
index f93f6823a6..e97bcf5a08 100644
--- a/site/xref/org/apache/juneau/cp/FileFinder.html
+++ b/site/xref/org/apache/juneau/cp/FileFinder.html
@@ -150,12 +150,12 @@
<a class="jxr_linenumber" name="L142" href="#L142">142</a> <em class="jxr_javadoccomment">/**</em>
<a class="jxr_linenumber" name="L143" href="#L143">143</a> <em class="jxr_javadoccomment"> * Adds a file system directory to the lookup paths.</em>
<a class="jxr_linenumber" name="L144" href="#L144">144</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L145" href="#L145">145</a> <em class="jxr_javadoccomment"> * @param path The path relative to the working directory. Must not be <jk>null</jk></em>
+<a class="jxr_linenumber" name="L145" href="#L145">145</a> <em class="jxr_javadoccomment"> * @param value The path relative to the working directory. Must not be <jk>null</jk></em>
<a class="jxr_linenumber" name="L146" href="#L146">146</a> <em class="jxr_javadoccomment"> * @return This object.</em>
<a class="jxr_linenumber" name="L147" href="#L147">147</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L148" href="#L148">148</a> <strong class="jxr_keyword">public</strong> Builder dir(String path) {
-<a class="jxr_linenumber" name="L149" href="#L149">149</a> assertArgNotNull(<span class="jxr_string">"path"</span>, path);
-<a class="jxr_linenumber" name="L150" href="#L150">150</a> <strong class="jxr_keyword">return</strong> path(Paths.get(<span class="jxr_string">"."</span>).resolve(path));
+<a class="jxr_linenumber" name="L148" href="#L148">148</a> <strong class="jxr_keyword">public</strong> Builder dir(String value) {
+<a class="jxr_linenumber" name="L149" href="#L149">149</a> assertArgNotNull(<span class="jxr_string">"value"</span>, value);
+<a class="jxr_linenumber" name="L150" href="#L150">150</a> <strong class="jxr_keyword">return</strong> path(Paths.get(<span class="jxr_string">"."</span>).resolve(value));
<a class="jxr_linenumber" name="L151" href="#L151">151</a> }
<a class="jxr_linenumber" name="L152" href="#L152">152</a>
<a class="jxr_linenumber" name="L153" href="#L153">153</a> <em class="jxr_javadoccomment">/**</em>
@@ -193,11 +193,11 @@
<a class="jxr_linenumber" name="L185" href="#L185">185</a> <em class="jxr_javadoccomment">/**</em>
<a class="jxr_linenumber" name="L186" href="#L186">186</a> <em class="jxr_javadoccomment"> * Adds a file system directory to the lookup paths.</em>
<a class="jxr_linenumber" name="L187" href="#L187">187</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L188" href="#L188">188</a> <em class="jxr_javadoccomment"> * @param path The directory path.</em>
+<a class="jxr_linenumber" name="L188" href="#L188">188</a> <em class="jxr_javadoccomment"> * @param value The directory path.</em>
<a class="jxr_linenumber" name="L189" href="#L189">189</a> <em class="jxr_javadoccomment"> * @return This object.</em>
<a class="jxr_linenumber" name="L190" href="#L190">190</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L191" href="#L191">191</a> <strong class="jxr_keyword">public</strong> Builder path(Path path) {
-<a class="jxr_linenumber" name="L192" href="#L192">192</a> roots.add(<strong class="jxr_keyword">new</strong> <a name="LocalDir" href="../../../../org/apache/juneau/cp/LocalDir.html#LocalDir">LocalDir</a>(path));
+<a class="jxr_linenumber" name="L191" href="#L191">191</a> <strong class="jxr_keyword">public</strong> Builder path(Path value) {
+<a class="jxr_linenumber" name="L192" href="#L192">192</a> roots.add(<strong class="jxr_keyword">new</strong> <a name="LocalDir" href="../../../../org/apache/juneau/cp/LocalDir.html#LocalDir">LocalDir</a>(value));
<a class="jxr_linenumber" name="L193" href="#L193">193</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>;
<a class="jxr_linenumber" name="L194" href="#L194">194</a> }
<a class="jxr_linenumber" name="L195" href="#L195">195</a>
diff --git a/site/xref/org/apache/juneau/cp/Messages.html b/site/xref/org/apache/juneau/cp/Messages.html
index f839ad3cd9..5830e9c9ff 100644
--- a/site/xref/org/apache/juneau/cp/Messages.html
+++ b/site/xref/org/apache/juneau/cp/Messages.html
@@ -182,26 +182,26 @@
<a class="jxr_linenumber" name="L174" href="#L174">174</a> <em class="jxr_javadoccomment">/**</em>
<a class="jxr_linenumber" name="L175" href="#L175">175</a> <em class="jxr_javadoccomment"> * Specifies the locale.</em>
<a class="jxr_linenumber" name="L176" href="#L176">176</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L177" href="#L177">177</a> <em class="jxr_javadoccomment"> * @param locale</em>
+<a class="jxr_linenumber" name="L177" href="#L177">177</a> <em class="jxr_javadoccomment"> * @param value</em>
<a class="jxr_linenumber" name="L178" href="#L178">178</a> <em class="jxr_javadoccomment"> * The locale.</em>
<a class="jxr_linenumber" name="L179" href="#L179">179</a> <em class="jxr_javadoccomment"> * If <jk>null</jk>, the default locale is used.</em>
<a class="jxr_linenumber" name="L180" href="#L180">180</a> <em class="jxr_javadoccomment"> * @return This object.</em>
<a class="jxr_linenumber" name="L181" href="#L181">181</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L182" href="#L182">182</a> <strong class="jxr_keyword">public</strong> Builder locale(Locale locale) {
-<a class="jxr_linenumber" name="L183" href="#L183">183</a> <strong class="jxr_keyword">this</strong>.locale = locale == <strong class="jxr_keyword">null</strong> ? Locale.getDefault() : locale;
+<a class="jxr_linenumber" name="L182" href="#L182">182</a> <strong class="jxr_keyword">public</strong> Builder locale(Locale value) {
+<a class="jxr_linenumber" name="L183" href="#L183">183</a> <strong class="jxr_keyword">this</strong>.locale = value == <strong class="jxr_keyword">null</strong> ? Locale.getDefault() : value;
<a class="jxr_linenumber" name="L184" href="#L184">184</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>;
<a class="jxr_linenumber" name="L185" href="#L185">185</a> }
<a class="jxr_linenumber" name="L186" href="#L186">186</a>
<a class="jxr_linenumber" name="L187" href="#L187">187</a> <em class="jxr_javadoccomment">/**</em>
<a class="jxr_linenumber" name="L188" href="#L188">188</a> <em class="jxr_javadoccomment"> * Specifies the locale.</em>
<a class="jxr_linenumber" name="L189" href="#L189">189</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L190" href="#L190">190</a> <em class="jxr_javadoccomment"> * @param locale</em>
+<a class="jxr_linenumber" name="L190" href="#L190">190</a> <em class="jxr_javadoccomment"> * @param value</em>
<a class="jxr_linenumber" name="L191" href="#L191">191</a> <em class="jxr_javadoccomment"> * The locale.</em>
<a class="jxr_linenumber" name="L192" href="#L192">192</a> <em class="jxr_javadoccomment"> * If <jk>null</jk>, the default locale is used.</em>
<a class="jxr_linenumber" name="L193" href="#L193">193</a> <em class="jxr_javadoccomment"> * @return This object.</em>
<a class="jxr_linenumber" name="L194" href="#L194">194</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L195" href="#L195">195</a> <strong class="jxr_keyword">public</strong> Builder locale(String locale) {
-<a class="jxr_linenumber" name="L196" href="#L196">196</a> <strong class="jxr_keyword">return</strong> locale(locale == <strong class="jxr_keyword">null</strong> ? <strong class="jxr_keyword">null</strong> : Locale.forLanguageTag(locale));
+<a class="jxr_linenumber" name="L195" href="#L195">195</a> <strong class="jxr_keyword">public</strong> Builder locale(String value) {
+<a class="jxr_linenumber" name="L196" href="#L196">196</a> <strong class="jxr_keyword">return</strong> locale(value == <strong class="jxr_keyword">null</strong> ? <strong class="jxr_keyword">null</strong> : Locale.forLanguageTag(value));
<a class="jxr_linenumber" name="L197" href="#L197">197</a> }
<a class="jxr_linenumber" name="L198" href="#L198">198</a>
<a class="jxr_linenumber" name="L199" href="#L199">199</a> <em class="jxr_javadoccomment">/**</em>
@@ -230,24 +230,24 @@
<a class="jxr_linenumber" name="L222" href="#L222">222</a> <em class="jxr_javadoccomment">/**</em>
<a class="jxr_linenumber" name="L223" href="#L223">223</a> <em class="jxr_javadoccomment"> * Specifies the bundle name (e.g. <js>"Messages"</js>).</em>
<a class="jxr_linenumber" name="L224" href="#L224">224</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L225" href="#L225">225</a> <em class="jxr_javadoccomment"> * @param name</em>
+<a class="jxr_linenumber" name="L225" href="#L225">225</a> <em class="jxr_javadoccomment"> * @param value</em>
<a class="jxr_linenumber" name="L226" href="#L226">226</a> <em class="jxr_javadoccomment"> * The bundle name.</em>
<a class="jxr_linenumber" name="L227" href="#L227">227</a> <em class="jxr_javadoccomment"> * <br>If <jk>null</jk>, the forClass class name is used.</em>
<a class="jxr_linenumber" name="L228" href="#L228">228</a> <em class="jxr_javadoccomment"> * @return This object.</em>
<a class="jxr_linenumber" name="L229" href="#L229">229</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L230" href="#L230">230</a> <strong class="jxr_keyword">public</strong> Builder name(String name) {
-<a class="jxr_linenumber" name="L231" href="#L231">231</a> <strong class="jxr_keyword">this</strong>.name = isEmpty(name) ? forClass.getSimpleName() : name;
+<a class="jxr_linenumber" name="L230" href="#L230">230</a> <strong class="jxr_keyword">public</strong> Builder name(String value) {
+<a class="jxr_linenumber" name="L231" href="#L231">231</a> <strong class="jxr_keyword">this</strong>.name = isEmpty(value) ? forClass.getSimpleName() : value;
<a class="jxr_linenumber" name="L232" href="#L232">232</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>;
<a class="jxr_linenumber" name="L233" href="#L233">233</a> }
<a class="jxr_linenumber" name="L234" href="#L234">234</a>
<a class="jxr_linenumber" name="L235" href="#L235">235</a> <em class="jxr_javadoccomment">/**</em>
<a class="jxr_linenumber" name="L236" href="#L236">236</a> <em class="jxr_javadoccomment"> * Adds a parent bundle.</em>
<a class="jxr_linenumber" name="L237" href="#L237">237</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L238" href="#L238">238</a> <em class="jxr_javadoccomment"> * @param parent The parent bundle. Can be <jk>null</jk>.</em>
+<a class="jxr_linenumber" name="L238" href="#L238">238</a> <em class="jxr_javadoccomment"> * @param value The parent bundle. Can be <jk>null</jk>.</em>
<a class="jxr_linenumber" name="L239" href="#L239">239</a> <em class="jxr_javadoccomment"> * @return This object.</em>
<a class="jxr_linenumber" name="L240" href="#L240">240</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L241" href="#L241">241</a> <strong class="jxr_keyword">public</strong> Builder parent(<a name="Messages" href="../../../../org/apache/juneau/cp/Messages.html#Messages">Messages</a> parent) {
-<a class="jxr_linenumber" name="L242" href="#L242">242</a> <strong class="jxr_keyword">this</strong>.parent = parent;
+<a class="jxr_linenumber" name="L241" href="#L241">241</a> <strong class="jxr_keyword">public</strong> Builder parent(<a name="Messages" href="../../../../org/apache/juneau/cp/Messages.html#Messages">Messages</a> value) {
+<a class="jxr_linenumber" name="L242" href="#L242">242</a> <strong class="jxr_keyword">this</strong>.parent = value;
<a class="jxr_linenumber" name="L243" href="#L243">243</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>;
<a class="jxr_linenumber" name="L244" href="#L244">244</a> }
<a class="jxr_linenumber" name="L245" href="#L245">245</a>
diff --git a/site/xref/org/apache/juneau/junit/bct/BasicBeanConverter.html b/site/xref/org/apache/juneau/junit/bct/BasicBeanConverter.html
index fe60a3b739..0903057f64 100644
--- a/site/xref/org/apache/juneau/junit/bct/BasicBeanConverter.html
+++ b/site/xref/org/apache/juneau/junit/bct/BasicBeanConverter.html
@@ -27,859 +27,860 @@
<a class="jxr_linenumber" name="L19" href="#L19">19</a> <strong class="jxr_keyword">import</strong> <strong class="jxr_keyword">static</strong> java.util.Optional.*;
<a class="jxr_linenumber" name="L20" href="#L20">20</a> <strong class="jxr_keyword">import</strong> <strong class="jxr_keyword">static</strong> java.util.stream.Collectors.*;
<a class="jxr_linenumber" name="L21" href="#L21">21</a> <strong class="jxr_keyword">import</strong> <strong class="jxr_keyword">static</strong> org.apache.juneau.common.utils.AssertionUtils.*;
-<a class="jxr_linenumber" name="L22" href="#L22">22</a> <strong class="jxr_keyword">import</strong> <strong class="jxr_keyword">static</strong> org.apache.juneau.common.utils.Utils.*;
-<a class="jxr_linenumber" name="L23" href="#L23">23</a>
-<a class="jxr_linenumber" name="L24" href="#L24">24</a> <strong class="jxr_keyword">import</strong> java.io.*;
-<a class="jxr_linenumber" name="L25" href="#L25">25</a> <strong class="jxr_keyword">import</strong> java.lang.reflect.*;
-<a class="jxr_linenumber" name="L26" href="#L26">26</a> <strong class="jxr_keyword">import</strong> java.util.*;
-<a class="jxr_linenumber" name="L27" href="#L27">27</a> <strong class="jxr_keyword">import</strong> java.util.concurrent.*;
-<a class="jxr_linenumber" name="L28" href="#L28">28</a> <strong class="jxr_keyword">import</strong> java.util.function.*;
-<a class="jxr_linenumber" name="L29" href="#L29">29</a> <strong class="jxr_keyword">import</strong> java.util.stream.*;
-<a class="jxr_linenumber" name="L30" href="#L30">30</a>
-<a class="jxr_linenumber" name="L31" href="#L31">31</a> <strong class="jxr_keyword">import</strong> org.apache.juneau.common.utils.*;
-<a class="jxr_linenumber" name="L32" href="#L32">32</a>
-<a class="jxr_linenumber" name="L33" href="#L33">33</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L34" href="#L34">34</a> <em class="jxr_javadoccomment"> * Default implementation of {@link BeanConverter} for Bean-Centric Test (BCT) object conversion.</em>
-<a class="jxr_linenumber" name="L35" href="#L35">35</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L36" href="#L36">36</a> <em class="jxr_javadoccomment"> * <p>This class provides a comprehensive, extensible framework for converting Java objects to strings</em>
-<a class="jxr_linenumber" name="L37" href="#L37">37</a> <em class="jxr_javadoccomment"> * and lists, with sophisticated property access capabilities. It's the core engine behind BCT testing</em>
-<a class="jxr_linenumber" name="L38" href="#L38">38</a> <em class="jxr_javadoccomment"> * assertions, handling complex object introspection and value extraction with high performance through</em>
-<a class="jxr_linenumber" name="L39" href="#L39">39</a> <em class="jxr_javadoccomment"> * intelligent caching and optimized lookup strategies.</p></em>
-<a class="jxr_linenumber" name="L40" href="#L40">40</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L41" href="#L41">41</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Key Features:</h5></em>
-<a class="jxr_linenumber" name="L42" href="#L42">42</a> <em class="jxr_javadoccomment"> * <ul></em>
-<a class="jxr_linenumber" name="L43" href="#L43">43</a> <em class="jxr_javadoccomment"> * <li><b>Extensible Type Handlers:</b> Pluggable stringifiers, listifiers, and swappers for custom types</li></em>
-<a class="jxr_linenumber" name="L44" href="#L44">44</a> <em class="jxr_javadoccomment"> * <li><b>Performance Optimization:</b> ConcurrentHashMap caching for type-to-handler mappings</li></em>
-<a class="jxr_linenumber" name="L45" href="#L45">45</a> <em class="jxr_javadoccomment"> * <li><b>Comprehensive Defaults:</b> Built-in support for all common Java types and structures</li></em>
-<a class="jxr_linenumber" name="L46" href="#L46">46</a> <em class="jxr_javadoccomment"> * <li><b>Configurable Settings:</b> Customizable formatting, delimiters, and display options</li></em>
-<a class="jxr_linenumber" name="L47" href="#L47">47</a> <em class="jxr_javadoccomment"> * <li><b>Thread Safety:</b> Fully thread-safe implementation suitable for concurrent testing</li></em>
-<a class="jxr_linenumber" name="L48" href="#L48">48</a> <em class="jxr_javadoccomment"> * </ul></em>
-<a class="jxr_linenumber" name="L49" href="#L49">49</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L50" href="#L50">50</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Architecture Overview:</h5></em>
-<a class="jxr_linenumber" name="L51" href="#L51">51</a> <em class="jxr_javadoccomment"> * <p>The converter uses four types of pluggable handlers:</p></em>
-<a class="jxr_linenumber" name="L52" href="#L52">52</a> <em class="jxr_javadoccomment"> * <dl></em>
-<a class="jxr_linenumber" name="L53" href="#L53">53</a> <em class="jxr_javadoccomment"> * <dt><b>Stringifiers:</b></dt></em>
-<a class="jxr_linenumber" name="L54" href="#L54">54</a> <em class="jxr_javadoccomment"> * <dd>Convert objects to string representations with custom formatting rules</dd></em>
-<a class="jxr_linenumber" name="L55" href="#L55">55</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L56" href="#L56">56</a> <em class="jxr_javadoccomment"> * <dt><b>Listifiers:</b></dt></em>
-<a class="jxr_linenumber" name="L57" href="#L57">57</a> <em class="jxr_javadoccomment"> * <dd>Convert collection-like objects to List&lt;Object&gt; for uniform iteration</dd></em>
-<a class="jxr_linenumber" name="L58" href="#L58">58</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L59" href="#L59">59</a> <em class="jxr_javadoccomment"> * <dt><b>Swappers:</b></dt></em>
-<a class="jxr_linenumber" name="L60" href="#L60">60</a> <em class="jxr_javadoccomment"> * <dd>Pre-process objects before conversion (unwrap Optional, call Supplier, etc.)</dd></em>
-<a class="jxr_linenumber" name="L61" href="#L61">61</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L62" href="#L62">62</a> <em class="jxr_javadoccomment"> * <dt><b>PropertyExtractors:</b></dt></em>
-<a class="jxr_linenumber" name="L63" href="#L63">63</a> <em class="jxr_javadoccomment"> * <dd>Define custom property access strategies for nested field navigation (e.g., <js>"user.address.city"</js>)</dd></em>
-<a class="jxr_linenumber" name="L64" href="#L64">64</a> <em class="jxr_javadoccomment"> * </dl></em>
-<a class="jxr_linenumber" name="L65" href="#L65">65</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L66" href="#L66">66</a> <em class="jxr_javadoccomment"> * <p>PropertyExtractors use a chain-of-responsibility pattern, where each extractor in the chain</em>
-<a class="jxr_linenumber" name="L67" href="#L67">67</a> <em class="jxr_javadoccomment"> * is tried until one can handle the property access. The framework includes built-in extractors for:</p></em>
-<a class="jxr_linenumber" name="L68" href="#L68">68</a> <em class="jxr_javadoccomment"> * <ul></em>
-<a class="jxr_linenumber" name="L69" href="#L69">69</a> <em class="jxr_javadoccomment"> * <li><b>JavaBean properties:</b> Standard getter methods and public fields</li></em>
-<a class="jxr_linenumber" name="L70" href="#L70">70</a> <em class="jxr_javadoccomment"> * <li><b>Collection/Array access:</b> Numeric indices and size/length properties</li></em>
-<a class="jxr_linenumber" name="L71" href="#L71">71</a> <em class="jxr_javadoccomment"> * <li><b>Map access:</b> Key-based property retrieval and size property</li></em>
-<a class="jxr_linenumber" name="L72" href="#L72">72</a> <em class="jxr_javadoccomment"> * </ul></em>
-<a class="jxr_linenumber" name="L73" href="#L73">73</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L74" href="#L74">74</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Default Type Support:</h5></em>
-<a class="jxr_linenumber" name="L75" href="#L75">75</a> <em class="jxr_javadoccomment"> * <p>Out-of-the-box stringification support includes:</p></em>
-<a class="jxr_linenumber" name="L76" href="#L76">76</a> <em class="jxr_javadoccomment"> * <ul></em>
-<a class="jxr_linenumber" name="L77" href="#L77">77</a> <em class="jxr_javadoccomment"> * <li><b>Collections:</b> List, Set, Queue → <js>"[item1,item2,item3]"</js> format</li></em>
-<a class="jxr_linenumber" name="L78" href="#L78">78</a> <em class="jxr_javadoccomment"> * <li><b>Maps:</b> Map, Properties → <js>"{key1=value1,key2=value2}"</js> format</li></em>
-<a class="jxr_linenumber" name="L79" href="#L79">79</a> <em class="jxr_javadoccomment"> * <li><b>Map Entries:</b> Map.Entry → <js>"key=value"</js> format</li></em>
-<a class="jxr_linenumber" name="L80" href="#L80">80</a> <em class="jxr_javadoccomment"> * <li><b>Arrays:</b> All array types → <js>"[element1,element2]"</js> format</li></em>
-<a class="jxr_linenumber" name="L81" href="#L81">81</a> <em class="jxr_javadoccomment"> * <li><b>Dates:</b> Date, Calendar → ISO-8601 format</li></em>
-<a class="jxr_linenumber" name="L82" href="#L82">82</a> <em class="jxr_javadoccomment"> * <li><b>Files/Streams:</b> File, InputStream, Reader → content as hex or text</li></em>
-<a class="jxr_linenumber" name="L83" href="#L83">83</a> <em class="jxr_javadoccomment"> * <li><b>Reflection:</b> Class, Method, Constructor → human-readable signatures</li></em>
-<a class="jxr_linenumber" name="L84" href="#L84">84</a> <em class="jxr_javadoccomment"> * <li><b>Enums:</b> Enum values → name() format</li></em>
-<a class="jxr_linenumber" name="L85" href="#L85">85</a> <em class="jxr_javadoccomment"> * </ul></em>
-<a class="jxr_linenumber" name="L86" href="#L86">86</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L87" href="#L87">87</a> <em class="jxr_javadoccomment"> * <p>Default listification support includes:</p></em>
-<a class="jxr_linenumber" name="L88" href="#L88">88</a> <em class="jxr_javadoccomment"> * <ul></em>
-<a class="jxr_linenumber" name="L89" href="#L89">89</a> <em class="jxr_javadoccomment"> * <li><b>Collection types:</b> List, Set, Queue, and all subtypes</li></em>
-<a class="jxr_linenumber" name="L90" href="#L90">90</a> <em class="jxr_javadoccomment"> * <li><b>Iterable objects:</b> Any Iterable implementation</li></em>
-<a class="jxr_linenumber" name="L91" href="#L91">91</a> <em class="jxr_javadoccomment"> * <li><b>Iterators:</b> Iterator and Enumeration (consumed to list)</li></em>
-<a class="jxr_linenumber" name="L92" href="#L92">92</a> <em class="jxr_javadoccomment"> * <li><b>Streams:</b> Stream objects (terminated to list)</li></em>
-<a class="jxr_linenumber" name="L93" href="#L93">93</a> <em class="jxr_javadoccomment"> * <li><b>Optional:</b> Empty list or single-element list</li></em>
-<a class="jxr_linenumber" name="L94" href="#L94">94</a> <em class="jxr_javadoccomment"> * <li><b>Maps:</b> Converted to list of Map.Entry objects</li></em>
-<a class="jxr_linenumber" name="L95" href="#L95">95</a> <em class="jxr_javadoccomment"> * </ul></em>
-<a class="jxr_linenumber" name="L96" href="#L96">96</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L97" href="#L97">97</a> <em class="jxr_javadoccomment"> * <p>Default swapping support includes:</p></em>
-<a class="jxr_linenumber" name="L98" href="#L98">98</a> <em class="jxr_javadoccomment"> * <ul></em>
-<a class="jxr_linenumber" name="L99" href="#L99">99</a> <em class="jxr_javadoccomment"> * <li><b>Optional:</b> Unwrapped to contained value or <jk>null</jk></li></em>
-<a class="jxr_linenumber" name="L100" href="#L100">100</a> <em class="jxr_javadoccomment"> * <li><b>Supplier:</b> Called to get supplied value</li></em>
-<a class="jxr_linenumber" name="L101" href="#L101">101</a> <em class="jxr_javadoccomment"> * <li><b>Future:</b> Extracts completed result or returns <js>"&lt;pending&gt;"</js> for incomplete futures (via {@link Swappers#futureSwapper()})</li></em>
-<a class="jxr_linenumber" name="L102" href="#L102">102</a> <em class="jxr_javadoccomment"> * </ul></em>
-<a class="jxr_linenumber" name="L103" href="#L103">103</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L104" href="#L104">104</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Configuration Settings:</h5></em>
-<a class="jxr_linenumber" name="L105" href="#L105">105</a> <em class="jxr_javadoccomment"> * <p>The converter supports extensive customization via settings:</p></em>
-<a class="jxr_linenumber" name="L106" href="#L106">106</a> <em class="jxr_javadoccomment"> * <dl></em>
-<a class="jxr_linenumber" name="L107" href="#L107">107</a> <em class="jxr_javadoccomment"> * <dt><code>nullValue</code></dt></em>
-<a class="jxr_linenumber" name="L108" href="#L108">108</a> <em class="jxr_javadoccomment"> * <dd>String representation for null values (default: <js>"&lt;null&gt;"</js>)</dd></em>
-<a class="jxr_linenumber" name="L109" href="#L109">109</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L110" href="#L110">110</a> <em class="jxr_javadoccomment"> * <dt><code>selfValue</code></dt></em>
-<a class="jxr_linenumber" name="L111" href="#L111">111</a> <em class="jxr_javadoccomment"> * <dd>Special property name that returns the object itself (default: <js>"&lt;self&gt;"</js>)</dd></em>
-<a class="jxr_linenumber" name="L112" href="#L112">112</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L113" href="#L113">113</a> <em class="jxr_javadoccomment"> * <dt><code>emptyValue</code></dt></em>
-<a class="jxr_linenumber" name="L114" href="#L114">114</a> <em class="jxr_javadoccomment"> * <dd>String representation for empty collections (default: <js>"&lt;empty&gt;"</js>)</dd></em>
-<a class="jxr_linenumber" name="L115" href="#L115">115</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L116" href="#L116">116</a> <em class="jxr_javadoccomment"> * <dt><code>fieldSeparator</code></dt></em>
-<a class="jxr_linenumber" name="L117" href="#L117">117</a> <em class="jxr_javadoccomment"> * <dd>Delimiter between collection elements and map entries (default: <js>","</js>)</dd></em>
-<a class="jxr_linenumber" name="L118" href="#L118">118</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L119" href="#L119">119</a> <em class="jxr_javadoccomment"> * <dt><code>collectionPrefix/Suffix</code></dt></em>
-<a class="jxr_linenumber" name="L120" href="#L120">120</a> <em class="jxr_javadoccomment"> * <dd>Brackets around collection content (default: <js>"["</js> and <js>"]"</js>)</dd></em>
-<a class="jxr_linenumber" name="L121" href="#L121">121</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L122" href="#L122">122</a> <em class="jxr_javadoccomment"> * <dt><code>mapPrefix/Suffix</code></dt></em>
-<a class="jxr_linenumber" name="L123" href="#L123">123</a> <em class="jxr_javadoccomment"> * <dd>Brackets around map content (default: <js>"{"</js> and <js>"}"</js>)</dd></em>
-<a class="jxr_linenumber" name="L124" href="#L124">124</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L125" href="#L125">125</a> <em class="jxr_javadoccomment"> * <dt><code>mapEntrySeparator</code></dt></em>
-<a class="jxr_linenumber" name="L126" href="#L126">126</a> <em class="jxr_javadoccomment"> * <dd>Separator between map keys and values (default: <js>"="</js>)</dd></em>
-<a class="jxr_linenumber" name="L127" href="#L127">127</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L128" href="#L128">128</a> <em class="jxr_javadoccomment"> * <dt><code>calendarFormat</code></dt></em>
-<a class="jxr_linenumber" name="L129" href="#L129">129</a> <em class="jxr_javadoccomment"> * <dd>DateTimeFormatter for calendar objects (default: <jsf>ISO_INSTANT</jsf>)</dd></em>
-<a class="jxr_linenumber" name="L130" href="#L130">130</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L131" href="#L131">131</a> <em class="jxr_javadoccomment"> * <dt><code>classNameFormat</code></dt></em>
-<a class="jxr_linenumber" name="L132" href="#L132">132</a> <em class="jxr_javadoccomment"> * <dd>Format for class names: <js>"simple"</js>, <js>"canonical"</js>, or <js>"full"</js> (default: <js>"simple"</js>)</dd></em>
-<a class="jxr_linenumber" name="L133" href="#L133">133</a> <em class="jxr_javadoccomment"> * </dl></em>
-<a class="jxr_linenumber" name="L134" href="#L134">134</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L135" href="#L135">135</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Usage Examples:</h5></em>
-<a class="jxr_linenumber" name="L136" href="#L136">136</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L137" href="#L137">137</a> <em class="jxr_javadoccomment"> * <p><b>Basic Usage with Defaults:</b></p></em>
-<a class="jxr_linenumber" name="L138" href="#L138">138</a> <em class="jxr_javadoccomment"> * <p class='bjava'></em>
-<a class="jxr_linenumber" name="L139" href="#L139">139</a> <em class="jxr_javadoccomment"> * <jc>// Use default converter</jc></em>
-<a class="jxr_linenumber" name="L140" href="#L140">140</a> <em class="jxr_javadoccomment"> * <jk>var</jk> <jv>converter</jv> = BasicBeanConverter.<jsf>DEFAULT</jsf>;</em>
-<a class="jxr_linenumber" name="L141" href="#L141">141</a> <em class="jxr_javadoccomment"> * <jk>var</jk> <jv>result</jv> = <jv>converter</jv>.stringify(<jv>myObject</jv>);</em>
-<a class="jxr_linenumber" name="L142" href="#L142">142</a> <em class="jxr_javadoccomment"> * </p></em>
-<a class="jxr_linenumber" name="L143" href="#L143">143</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L144" href="#L144">144</a> <em class="jxr_javadoccomment"> * <p><b>Custom Configuration:</b></p></em>
-<a class="jxr_linenumber" name="L145" href="#L145">145</a> <em class="jxr_javadoccomment"> * <p class='bjava'></em>
-<a class="jxr_linenumber" name="L146" href="#L146">146</a> <em class="jxr_javadoccomment"> * <jc>// Build custom converter</jc></em>
-<a class="jxr_linenumber" name="L147" href="#L147">147</a> <em class="jxr_javadoccomment"> * <jk>var</jk> <jv>converter</jv> = BasicBeanConverter.<jsm>builder</jsm>()</em>
-<a class="jxr_linenumber" name="L148" href="#L148">148</a> <em class="jxr_javadoccomment"> * .defaultSettings()</em>
-<a class="jxr_linenumber" name="L149" href="#L149">149</a> <em class="jxr_javadoccomment"> * .addSetting(<jsf>SETTING_nullValue</jsf>, <js>"&lt;null&gt;"</js>)</em>
-<a class="jxr_linenumber" name="L150" href="#L150">150</a> <em class="jxr_javadoccomment"> * .addSetting(<jsf>SETTING_fieldSeparator</jsf>, <js>" | "</js>)</em>
-<a class="jxr_linenumber" name="L151" href="#L151">151</a> <em class="jxr_javadoccomment"> * .addStringifier(MyClass.<jk>class</jk>, (<jp>obj</jp>, <jp>conv</jp>) -> <js>"MyClass["</js> + <jp>obj</jp>.getName() + <js>"]"</js>)</em>
-<a class="jxr_linenumber" name="L152" href="#L152">152</a> <em class="jxr_javadoccomment"> * .addListifier(MyIterable.<jk>class</jk>, (<jp>obj</jp>, <jp>conv</jp>) -> <jp>obj</jp>.toList())</em>
-<a class="jxr_linenumber" name="L153" href="#L153">153</a> <em class="jxr_javadoccomment"> * .addSwapper(MyWrapper.<jk>class</jk>, (<jp>obj</jp>, <jp>conv</jp>) -> <jp>obj</jp>.getWrapped())</em>
-<a class="jxr_linenumber" name="L154" href="#L154">154</a> <em class="jxr_javadoccomment"> * .build();</em>
-<a class="jxr_linenumber" name="L155" href="#L155">155</a> <em class="jxr_javadoccomment"> * </p></em>
-<a class="jxr_linenumber" name="L156" href="#L156">156</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L157" href="#L157">157</a> <em class="jxr_javadoccomment"> * <p><b>Complex Property Access:</b></p></em>
-<a class="jxr_linenumber" name="L158" href="#L158">158</a> <em class="jxr_javadoccomment"> * <p class='bjava'></em>
-<a class="jxr_linenumber" name="L159" href="#L159">159</a> <em class="jxr_javadoccomment"> * <jc>// Extract nested properties</jc></em>
-<a class="jxr_linenumber" name="L160" href="#L160">160</a> <em class="jxr_javadoccomment"> * <jk>var</jk> <jv>name</jv> = <jv>converter</jv>.getEntry(<jv>user</jv>, <js>"name"</js>);</em>
-<a class="jxr_linenumber" name="L161" href="#L161">161</a> <em class="jxr_javadoccomment"> * <jk>var</jk> <jv>city</jv> = <jv>converter</jv>.getEntry(<jv>user</jv>, <js>"address.city"</js>);</em>
-<a class="jxr_linenumber" name="L162" href="#L162">162</a> <em class="jxr_javadoccomment"> * <jk>var</jk> <jv>firstOrder</jv> = <jv>converter</jv>.getEntry(<jv>user</jv>, <js>"orders.0.id"</js>);</em>
-<a class="jxr_linenumber" name="L163" href="#L163">163</a> <em class="jxr_javadoccomment"> * <jk>var</jk> <jv>orderCount</jv> = <jv>converter</jv>.getEntry(<jv>user</jv>, <js>"orders.length"</js>);</em>
-<a class="jxr_linenumber" name="L164" href="#L164">164</a> <em class="jxr_javadoccomment"> * </p></em>
-<a class="jxr_linenumber" name="L165" href="#L165">165</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L166" href="#L166">166</a> <em class="jxr_javadoccomment"> * <p><b>Special Property Values:</b></p></em>
-<a class="jxr_linenumber" name="L167" href="#L167">167</a> <em class="jxr_javadoccomment"> * <p class='bjava'></em>
-<a class="jxr_linenumber" name="L168" href="#L168">168</a> <em class="jxr_javadoccomment"> * <jc>// Use special property names</jc></em>
-<a class="jxr_linenumber" name="L169" href="#L169">169</a> <em class="jxr_javadoccomment"> * <jk>var</jk> <jv>userObj</jv> = <jv>converter</jv>.getEntry(<jv>user</jv>, <js>"&lt;self&gt;"</js>); <jc>// Returns the user object itself</jc></em>
-<a class="jxr_linenumber" name="L170" href="#L170">170</a> <em class="jxr_javadoccomment"> * <jk>var</jk> <jv>nullValue</jv> = <jv>converter</jv>.getEntry(<jv>user</jv>, <js>"&lt;null&gt;"</js>); <jc>// Returns null</jc></em>
-<a class="jxr_linenumber" name="L171" href="#L171">171</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L172" href="#L172">172</a> <em class="jxr_javadoccomment"> * <jc>// Custom self value</jc></em>
-<a class="jxr_linenumber" name="L173" href="#L173">173</a> <em class="jxr_javadoccomment"> * <jk>var</jk> <jv>customConverter</jv> = BasicBeanConverter.<jsm>builder</jsm>()</em>
-<a class="jxr_linenumber" name="L174" href="#L174">174</a> <em class="jxr_javadoccomment"> * .defaultSettings()</em>
-<a class="jxr_linenumber" name="L175" href="#L175">175</a> <em class="jxr_javadoccomment"> * .addSetting(<jsf>SETTING_selfValue</jsf>, <js>"this"</js>)</em>
-<a class="jxr_linenumber" name="L176" href="#L176">176</a> <em class="jxr_javadoccomment"> * .build();</em>
-<a class="jxr_linenumber" name="L177" href="#L177">177</a> <em class="jxr_javadoccomment"> * <jk>var</jk> <jv>selfRef</jv> = <jv>customConverter</jv>.getEntry(<jv>user</jv>, <js>"this"</js>); <jc>// Returns user object</jc></em>
-<a class="jxr_linenumber" name="L178" href="#L178">178</a> <em class="jxr_javadoccomment"> * </p></em>
-<a class="jxr_linenumber" name="L179" href="#L179">179</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L180" href="#L180">180</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Performance Characteristics:</h5></em>
-<a class="jxr_linenumber" name="L181" href="#L181">181</a> <em class="jxr_javadoccomment"> * <ul></em>
-<a class="jxr_linenumber" name="L182" href="#L182">182</a> <em class="jxr_javadoccomment"> * <li><b>Handler Lookup:</b> O(1) average case via ConcurrentHashMap caching</li></em>
-<a class="jxr_linenumber" name="L183" href="#L183">183</a> <em class="jxr_javadoccomment"> * <li><b>Type Registration:</b> Handlers checked in reverse registration order (last wins)</li></em>
-<a class="jxr_linenumber" name="L184" href="#L184">184</a> <em class="jxr_javadoccomment"> * <li><b>Inheritance Support:</b> Handlers support class inheritance and interface implementation</li></em>
-<a class="jxr_linenumber" name="L185" href="#L185">185</a> <em class="jxr_javadoccomment"> * <li><b>Thread Safety:</b> Full concurrency support with no locking overhead after initialization</li></em>
-<a class="jxr_linenumber" name="L186" href="#L186">186</a> <em class="jxr_javadoccomment"> * <li><b>Memory Efficiency:</b> Minimal object allocation during normal operation</li></em>
-<a class="jxr_linenumber" name="L187" href="#L187">187</a> <em class="jxr_javadoccomment"> * </ul></em>
-<a class="jxr_linenumber" name="L188" href="#L188">188</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L189" href="#L189">189</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Extension Patterns:</h5></em>
-<a class="jxr_linenumber" name="L190" href="#L190">190</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L191" href="#L191">191</a> <em class="jxr_javadoccomment"> * <p><b>Custom Type Stringification:</b></p></em>
-<a class="jxr_linenumber" name="L192" href="#L192">192</a> <em class="jxr_javadoccomment"> * <p class='bjava'></em>
-<a class="jxr_linenumber" name="L193" href="#L193">193</a> <em class="jxr_javadoccomment"> * <jv>builder</jv>.addStringifier(LocalDateTime.<jk>class</jk>, (<jp>dt</jp>, <jp>conv</jp>) -></em>
-<a class="jxr_linenumber" name="L194" href="#L194">194</a> <em class="jxr_javadoccomment"> * <jp>dt</jp>.format(DateTimeFormatter.<jsf>ISO_LOCAL_DATE_TIME</jsf>));</em>
-<a class="jxr_linenumber" name="L195" href="#L195">195</a> <em class="jxr_javadoccomment"> * </p></em>
-<a class="jxr_linenumber" name="L196" href="#L196">196</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L197" href="#L197">197</a> <em class="jxr_javadoccomment"> * <p><b>Custom Collection Handling:</b></p></em>
-<a class="jxr_linenumber" name="L198" href="#L198">198</a> <em class="jxr_javadoccomment"> * <p class='bjava'></em>
-<a class="jxr_linenumber" name="L199" href="#L199">199</a> <em class="jxr_javadoccomment"> * <jv>builder</jv>.addListifier(MyCustomCollection.<jk>class</jk>, (<jp>coll</jp>, <jp>conv</jp>) -></em>
-<a class="jxr_linenumber" name="L200" href="#L200">200</a> <em class="jxr_javadoccomment"> * <jp>coll</jp>.stream().map(<jp>conv</jp>::swap).toList());</em>
-<a class="jxr_linenumber" name="L201" href="#L201">201</a> <em class="jxr_javadoccomment"> * </p></em>
-<a class="jxr_linenumber" name="L202" href="#L202">202</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L203" href="#L203">203</a> <em class="jxr_javadoccomment"> * <p><b>Custom Object Transformation:</b></p></em>
-<a class="jxr_linenumber" name="L204" href="#L204">204</a> <em class="jxr_javadoccomment"> * <p class='bjava'></em>
-<a class="jxr_linenumber" name="L205" href="#L205">205</a> <em class="jxr_javadoccomment"> * <jv>builder</jv>.addSwapper(LazyValue.<jk>class</jk>, (<jp>lazy</jp>, <jp>conv</jp>) -></em>
-<a class="jxr_linenumber" name="L206" href="#L206">206</a> <em class="jxr_javadoccomment"> * <jp>lazy</jp>.isEvaluated() ? <jp>lazy</jp>.getValue() : "&lt;unevaluated&gt;");</em>
-<a class="jxr_linenumber" name="L207" href="#L207">207</a> <em class="jxr_javadoccomment"> * </p></em>
-<a class="jxr_linenumber" name="L208" href="#L208">208</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L209" href="#L209">209</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Integration with BCT:</h5></em>
-<a class="jxr_linenumber" name="L210" href="#L210">210</a> <em class="jxr_javadoccomment"> * <p>This class is used internally by all BCT assertion methods in {@link BctAssertions}:</p></em>
-<a class="jxr_linenumber" name="L211" href="#L211">211</a> <em class="jxr_javadoccomment"> * <ul></em>
-<a class="jxr_linenumber" name="L212" href="#L212">212</a> <em class="jxr_javadoccomment"> * <li>{@link BctAssertions#assertBean(Object, String, String)} - Uses getEntry() for property access</li></em>
-<a class="jxr_linenumber" name="L213" href="#L213">213</a> <em class="jxr_javadoccomment"> * <li>{@link BctAssertions#assertList(List, Object...)} - Uses stringify() for element comparison</li></em>
-<a class="jxr_linenumber" name="L214" href="#L214">214</a> <em class="jxr_javadoccomment"> * <li>{@link BctAssertions#assertBeans(Collection, String, String...)} - Uses both getEntry() and stringify()</li></em>
-<a class="jxr_linenumber" name="L215" href="#L215">215</a> <em class="jxr_javadoccomment"> * </ul></em>
-<a class="jxr_linenumber" name="L216" href="#L216">216</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L217" href="#L217">217</a> <em class="jxr_javadoccomment"> * @see BeanConverter</em>
-<a class="jxr_linenumber" name="L218" href="#L218">218</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L219" href="#L219">219</a> @SuppressWarnings(<span class="jxr_string">"rawtypes"</span>)
-<a class="jxr_linenumber" name="L220" href="#L220">220</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a name="BasicBeanConverter" href="../../../../../org/apache/juneau/junit/bct/BasicBeanConverter.html#BasicBeanConverter">BasicBeanConverter</a> <strong class="jxr_keyword">implements</strong> <a name="BeanConverter" href="../../../../../org/apache/juneau/junit/bct/BeanConverter.html#BeanConverter">BeanConverter</a> {
-<a class="jxr_linenumber" name="L221" href="#L221">221</a>
-<a class="jxr_linenumber" name="L222" href="#L222">222</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L223" href="#L223">223</a> <em class="jxr_javadoccomment"> * Builder for creating customized BasicBeanConverter instances.</em>
-<a class="jxr_linenumber" name="L224" href="#L224">224</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L225" href="#L225">225</a> <em class="jxr_javadoccomment"> * <p>This builder provides a fluent API for configuring custom type handlers, settings,</em>
-<a class="jxr_linenumber" name="L226" href="#L226">226</a> <em class="jxr_javadoccomment"> * and property extraction logic. The builder supports registration of four main types</em>
-<a class="jxr_linenumber" name="L227" href="#L227">227</a> <em class="jxr_javadoccomment"> * of customizations:</p></em>
-<a class="jxr_linenumber" name="L228" href="#L228">228</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L229" href="#L229">229</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Type Handlers:</h5></em>
-<a class="jxr_linenumber" name="L230" href="#L230">230</a> <em class="jxr_javadoccomment"> * <ul></em>
-<a class="jxr_linenumber" name="L231" href="#L231">231</a> <em class="jxr_javadoccomment"> * <li><b>{@link #addStringifier(Class, Stringifier)}</b> - Custom string conversion logic</li></em>
-<a class="jxr_linenumber" name="L232" href="#L232">232</a> <em class="jxr_javadoccomment"> * <li><b>{@link #addListifier(Class, Listifier)}</b> - Custom list conversion for collection-like objects</li></em>
-<a class="jxr_linenumber" name="L233" href="#L233">233</a> <em class="jxr_javadoccomment"> * <li><b>{@link #addSwapper(Class, Swapper)}</b> - Pre-processing and object transformation</li></em>
-<a class="jxr_linenumber" name="L234" href="#L234">234</a> <em class="jxr_javadoccomment"> * <li><b>{@link #addPropertyExtractor(PropertyExtractor)}</b> - Custom property access strategies</li></em>
-<a class="jxr_linenumber" name="L235" href="#L235">235</a> <em class="jxr_javadoccomment"> * </ul></em>
-<a class="jxr_linenumber" name="L236" href="#L236">236</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L237" href="#L237">237</a> <em class="jxr_javadoccomment"> * <h5 class='section'>PropertyExtractors:</h5></em>
-<a class="jxr_linenumber" name="L238" href="#L238">238</a> <em class="jxr_javadoccomment"> * <p>Property extractors define how the converter accesses object properties during nested</em>
-<a class="jxr_linenumber" name="L239" href="#L239">239</a> <em class="jxr_javadoccomment"> * field access (e.g., {@code "user.address.city"}). The converter uses a chain-of-responsibility</em>
-<a class="jxr_linenumber" name="L240" href="#L240">240</a> <em class="jxr_javadoccomment"> * pattern, trying each registered extractor until one succeeds:</p></em>
-<a class="jxr_linenumber" name="L241" href="#L241">241</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L242" href="#L242">242</a> <em class="jxr_javadoccomment"> * <ul></em>
-<a class="jxr_linenumber" name="L243" href="#L243">243</a> <em class="jxr_javadoccomment"> * <li><b>{@link PropertyExtractors.ObjectPropertyExtractor}</b> - JavaBean-style properties via reflection</li></em>
-<a class="jxr_linenumber" name="L244" href="#L244">244</a> <em class="jxr_javadoccomment"> * <li><b>{@link PropertyExtractors.ListPropertyExtractor}</b> - Numeric indices and size/length for arrays/collections</li></em>
-<a class="jxr_linenumber" name="L245" href="#L245">245</a> <em class="jxr_javadoccomment"> * <li><b>{@link PropertyExtractors.MapPropertyExtractor}</b> - Key-based access for Map objects</li></em>
-<a class="jxr_linenumber" name="L246" href="#L246">246</a> <em class="jxr_javadoccomment"> * </ul></em>
-<a class="jxr_linenumber" name="L247" href="#L247">247</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L248" href="#L248">248</a> <em class="jxr_javadoccomment"> * <p>Custom extractors can be added to handle specialized property access patterns:</p></em>
-<a class="jxr_linenumber" name="L249" href="#L249">249</a> <em class="jxr_javadoccomment"> * <p class='bjava'></em>
-<a class="jxr_linenumber" name="L250" href="#L250">250</a> <em class="jxr_javadoccomment"> * <jk>var</jk> <jv>converter</jv> = BasicBeanConverter.<jsm>builder</jsm>()</em>
-<a class="jxr_linenumber" name="L251" href="#L251">251</a> <em class="jxr_javadoccomment"> * .defaultSettings()</em>
-<a class="jxr_linenumber" name="L252" href="#L252">252</a> <em class="jxr_javadoccomment"> * .addPropertyExtractor(<jk>new</jk> MyCustomExtractor())</em>
-<a class="jxr_linenumber" name="L253" href="#L253">253</a> <em class="jxr_javadoccomment"> * .addPropertyExtractor((<jp>obj</jp>, <jp>prop</jp>) -&gt; {</em>
-<a class="jxr_linenumber" name="L254" href="#L254">254</a> <em class="jxr_javadoccomment"> * <jk>if</jk> (<jp>obj</jp> <jk>instanceof</jk> MySpecialType <jv>special</jv>) {</em>
-<a class="jxr_linenumber" name="L255" href="#L255">255</a> <em class="jxr_javadoccomment"> * <jk>return</jk> <jv>special</jv>.getCustomProperty(<jp>prop</jp>);</em>
-<a class="jxr_linenumber" name="L256" href="#L256">256</a> <em class="jxr_javadoccomment"> * }</em>
-<a class="jxr_linenumber" name="L257" href="#L257">257</a> <em class="jxr_javadoccomment"> * <jk>return</jk> <jk>null</jk>; <jc>// Try next extractor</jc></em>
-<a class="jxr_linenumber" name="L258" href="#L258">258</a> <em class="jxr_javadoccomment"> * })</em>
-<a class="jxr_linenumber" name="L259" href="#L259">259</a> <em class="jxr_javadoccomment"> * .build();</em>
-<a class="jxr_linenumber" name="L260" href="#L260">260</a> <em class="jxr_javadoccomment"> * </p></em>
-<a class="jxr_linenumber" name="L261" href="#L261">261</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L262" href="#L262">262</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Default Configuration:</h5></em>
-<a class="jxr_linenumber" name="L263" href="#L263">263</a> <em class="jxr_javadoccomment"> * <p>The {@link #defaultSettings()} method pre-registers comprehensive type handlers</em>
-<a class="jxr_linenumber" name="L264" href="#L264">264</a> <em class="jxr_javadoccomment"> * and property extractors for common Java types, providing out-of-the-box functionality</em>
-<a class="jxr_linenumber" name="L265" href="#L265">265</a> <em class="jxr_javadoccomment"> * for most use cases while still allowing full customization.</p></em>
-<a class="jxr_linenumber" name="L266" href="#L266">266</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L267" href="#L267">267</a> <em class="jxr_javadoccomment"> * @see PropertyExtractors</em>
-<a class="jxr_linenumber" name="L268" href="#L268">268</a> <em class="jxr_javadoccomment"> * @see PropertyExtractor</em>
-<a class="jxr_linenumber" name="L269" href="#L269">269</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L270" href="#L270">270</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">class</strong> Builder {
-<a class="jxr_linenumber" name="L271" href="#L271">271</a> <strong class="jxr_keyword">private</strong> Map<String,Object> settings = <strong class="jxr_keyword">new</strong> HashMap<>();
-<a class="jxr_linenumber" name="L272" href="#L272">272</a> <strong class="jxr_keyword">private</strong> List<StringifierEntry<?>> stringifiers = <strong class="jxr_keyword">new</strong> ArrayList<>();
-<a class="jxr_linenumber" name="L273" href="#L273">273</a> <strong class="jxr_keyword">private</strong> List<ListifierEntry<?>> listifiers = <strong class="jxr_keyword">new</strong> ArrayList<>();
-<a class="jxr_linenumber" name="L274" href="#L274">274</a> <strong class="jxr_keyword">private</strong> List<SwapperEntry<?>> swappers = <strong class="jxr_keyword">new</strong> ArrayList<>();
-<a class="jxr_linenumber" name="L275" href="#L275">275</a> <strong class="jxr_keyword">private</strong> List<PropertyExtractor> propertyExtractors = <strong class="jxr_keyword">new</strong> ArrayList<>();
-<a class="jxr_linenumber" name="L276" href="#L276">276</a>
-<a class="jxr_linenumber" name="L277" href="#L277">277</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L278" href="#L278">278</a> <em class="jxr_javadoccomment"> * Registers a custom listifier for a specific type.</em>
-<a class="jxr_linenumber" name="L279" href="#L279">279</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L280" href="#L280">280</a> <em class="jxr_javadoccomment"> * <p>Listifiers convert collection-like objects to List&lt;Object&gt;. The BiFunction</em>
-<a class="jxr_linenumber" name="L281" href="#L281">281</a> <em class="jxr_javadoccomment"> * receives the object to convert and the converter instance for recursive calls.</p></em>
-<a class="jxr_linenumber" name="L282" href="#L282">282</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L283" href="#L283">283</a> <em class="jxr_javadoccomment"> * @param <T> The type to handle</em>
-<a class="jxr_linenumber" name="L284" href="#L284">284</a> <em class="jxr_javadoccomment"> * @param c The class to register the listifier for</em>
-<a class="jxr_linenumber" name="L285" href="#L285">285</a> <em class="jxr_javadoccomment"> * @param l The listification function</em>
-<a class="jxr_linenumber" name="L286" href="#L286">286</a> <em class="jxr_javadoccomment"> * @return This builder for method chaining</em>
-<a class="jxr_linenumber" name="L287" href="#L287">287</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L288" href="#L288">288</a> <strong class="jxr_keyword">public</strong> <T> Builder addListifier(Class<T> c, Listifier<T> l) { listifiers.add(<strong class="jxr_keyword">new</strong> ListifierEntry<>(c, l)); <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>; }
-<a class="jxr_linenumber" name="L289" href="#L289">289</a>
-<a class="jxr_linenumber" name="L290" href="#L290">290</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L291" href="#L291">291</a> <em class="jxr_javadoccomment"> * Registers a custom property extractor for specialized property access logic.</em>
-<a class="jxr_linenumber" name="L292" href="#L292">292</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L293" href="#L293">293</a> <em class="jxr_javadoccomment"> * <p>Property extractors enable custom property access patterns beyond standard JavaBean</em>
-<a class="jxr_linenumber" name="L294" href="#L294">294</a> <em class="jxr_javadoccomment"> * conventions. The converter tries extractors in registration order until one returns</em>
-<a class="jxr_linenumber" name="L295" href="#L295">295</a> <em class="jxr_javadoccomment"> * a non-<jk>null</jk> value. This allows for:</p></em>
-<a class="jxr_linenumber" name="L296" href="#L296">296</a> <em class="jxr_javadoccomment"> * <ul></em>
-<a class="jxr_linenumber" name="L297" href="#L297">297</a> <em class="jxr_javadoccomment"> * <li><b>Custom data structures:</b> Special property access for non-standard objects</li></em>
-<a class="jxr_linenumber" name="L298" href="#L298">298</a> <em class="jxr_javadoccomment"> * <li><b>Database entities:</b> Property access via entity-specific methods</li></em>
-<a class="jxr_linenumber" name="L299" href="#L299">299</a> <em class="jxr_javadoccomment"> * <li><b>Dynamic properties:</b> Computed or cached property values</li></em>
-<a class="jxr_linenumber" name="L300" href="#L300">300</a> <em class="jxr_javadoccomment"> * <li><b>Legacy objects:</b> Bridging older APIs with modern property access</li></em>
-<a class="jxr_linenumber" name="L301" href="#L301">301</a> <em class="jxr_javadoccomment"> * </ul></em>
-<a class="jxr_linenumber" name="L302" href="#L302">302</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L303" href="#L303">303</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Implementation Example:</h5></em>
-<a class="jxr_linenumber" name="L304" href="#L304">304</a> <em class="jxr_javadoccomment"> * <p class='bjava'></em>
-<a class="jxr_linenumber" name="L305" href="#L305">305</a> <em class="jxr_javadoccomment"> * <jc>// Custom extractor for a specialized data class</jc></em>
-<a class="jxr_linenumber" name="L306" href="#L306">306</a> <em class="jxr_javadoccomment"> * PropertyExtractor <jv>customExtractor</jv> = (<jp>obj</jp>, <jp>property</jp>) -&gt; {</em>
-<a class="jxr_linenumber" name="L307" href="#L307">307</a> <em class="jxr_javadoccomment"> * <jk>if</jk> (<jp>obj</jp> <jk>instanceof</jk> DatabaseEntity <jv>entity</jv>) {</em>
-<a class="jxr_linenumber" name="L308" href="#L308">308</a> <em class="jxr_javadoccomment"> * <jk>switch</jk> (<jp>property</jp>) {</em>
-<a class="jxr_linenumber" name="L309" href="#L309">309</a> <em class="jxr_javadoccomment"> * <jk>case</jk> <js>"id"</js>: <jk>return</jk> <jv>entity</jv>.getPrimaryKey();</em>
-<a class="jxr_linenumber" name="L310" href="#L310">310</a> <em class="jxr_javadoccomment"> * <jk>case</jk> <js>"displayName"</js>: <jk>return</jk> <jv>entity</jv>.computeDisplayName();</em>
-<a class="jxr_linenumber" name="L311" href="#L311">311</a> <em class="jxr_javadoccomment"> * <jk>case</jk> <js>"metadata"</js>: <jk>return</jk> <jv>entity</jv>.getMetadataAsMap();</em>
-<a class="jxr_linenumber" name="L312" href="#L312">312</a> <em class="jxr_javadoccomment"> * }</em>
-<a class="jxr_linenumber" name="L313" href="#L313">313</a> <em class="jxr_javadoccomment"> * }</em>
-<a class="jxr_linenumber" name="L314" href="#L314">314</a> <em class="jxr_javadoccomment"> * <jk>return</jk> <jk>null</jk>; <jc>// Let next extractor try</jc></em>
-<a class="jxr_linenumber" name="L315" href="#L315">315</a> <em class="jxr_javadoccomment"> * };</em>
-<a class="jxr_linenumber" name="L316" href="#L316">316</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L317" href="#L317">317</a> <em class="jxr_javadoccomment"> * <jk>var</jk> <jv>converter</jv> = BasicBeanConverter.<jsm>builder</jsm>()</em>
-<a class="jxr_linenumber" name="L318" href="#L318">318</a> <em class="jxr_javadoccomment"> * .addPropertyExtractor(<jv>customExtractor</jv>)</em>
-<a class="jxr_linenumber" name="L319" href="#L319">319</a> <em class="jxr_javadoccomment"> * .defaultSettings() <jc>// Adds standard extractors</jc></em>
-<a class="jxr_linenumber" name="L320" href="#L320">320</a> <em class="jxr_javadoccomment"> * .build();</em>
-<a class="jxr_linenumber" name="L321" href="#L321">321</a> <em class="jxr_javadoccomment"> * </p></em>
-<a class="jxr_linenumber" name="L322" href="#L322">322</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L323" href="#L323">323</a> <em class="jxr_javadoccomment"> * <p><b>Execution Order:</b> Custom extractors are tried before the default extractors</em>
-<a class="jxr_linenumber" name="L324" href="#L324">324</a> <em class="jxr_javadoccomment"> * added by {@link #defaultSettings()}, allowing overrides of standard behavior.</p></em>
-<a class="jxr_linenumber" name="L325" href="#L325">325</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L326" href="#L326">326</a> <em class="jxr_javadoccomment"> * @param e The property extractor to register</em>
-<a class="jxr_linenumber" name="L327" href="#L327">327</a> <em class="jxr_javadoccomment"> * @return This builder for method chaining</em>
-<a class="jxr_linenumber" name="L328" href="#L328">328</a> <em class="jxr_javadoccomment"> * @see PropertyExtractor</em>
-<a class="jxr_linenumber" name="L329" href="#L329">329</a> <em class="jxr_javadoccomment"> * @see PropertyExtractors</em>
-<a class="jxr_linenumber" name="L330" href="#L330">330</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L331" href="#L331">331</a> <strong class="jxr_keyword">public</strong> Builder addPropertyExtractor(<a name="PropertyExtractor" href="../../../../../org/apache/juneau/junit/bct/PropertyExtractor.html#PropertyExtractor">PropertyExtractor</a> e) { propertyExtractors.add(e); <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>; }
-<a class="jxr_linenumber" name="L332" href="#L332">332</a>
-<a class="jxr_linenumber" name="L333" href="#L333">333</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L334" href="#L334">334</a> <em class="jxr_javadoccomment"> * Adds a configuration setting to the converter.</em>
-<a class="jxr_linenumber" name="L335" href="#L335">335</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L336" href="#L336">336</a> <em class="jxr_javadoccomment"> * @param key The setting key (use SETTING_* constants)</em>
-<a class="jxr_linenumber" name="L337" href="#L337">337</a> <em class="jxr_javadoccomment"> * @param value The setting value</em>
-<a class="jxr_linenumber" name="L338" href="#L338">338</a> <em class="jxr_javadoccomment"> * @return This builder for method chaining</em>
-<a class="jxr_linenumber" name="L339" href="#L339">339</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L340" href="#L340">340</a> <strong class="jxr_keyword">public</strong> Builder addSetting(String key, Object value) { settings.put(key, value); <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>; }
-<a class="jxr_linenumber" name="L341" href="#L341">341</a>
-<a class="jxr_linenumber" name="L342" href="#L342">342</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L343" href="#L343">343</a> <em class="jxr_javadoccomment"> * Registers a custom stringifier for a specific type.</em>
-<a class="jxr_linenumber" name="L344" href="#L344">344</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L345" href="#L345">345</a> <em class="jxr_javadoccomment"> * <p>Stringifiers convert objects to their string representations. The BiFunction</em>
-<a class="jxr_linenumber" name="L346" href="#L346">346</a> <em class="jxr_javadoccomment"> * receives the object to convert and the converter instance for recursive calls.</p></em>
-<a class="jxr_linenumber" name="L347" href="#L347">347</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L348" href="#L348">348</a> <em class="jxr_javadoccomment"> * @param <T> The type to handle</em>
-<a class="jxr_linenumber" name="L349" href="#L349">349</a> <em class="jxr_javadoccomment"> * @param c The class to register the stringifier for</em>
-<a class="jxr_linenumber" name="L350" href="#L350">350</a> <em class="jxr_javadoccomment"> * @param s The stringification function</em>
-<a class="jxr_linenumber" name="L351" href="#L351">351</a> <em class="jxr_javadoccomment"> * @return This builder for method chaining</em>
-<a class="jxr_linenumber" name="L352" href="#L352">352</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L353" href="#L353">353</a> <strong class="jxr_keyword">public</strong> <T> Builder addStringifier(Class<T> c, Stringifier<T> s) { stringifiers.add(<strong class="jxr_keyword">new</strong> StringifierEntry<>(c, s)); <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>; }
-<a class="jxr_linenumber" name="L354" href="#L354">354</a>
-<a class="jxr_linenumber" name="L355" href="#L355">355</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L356" href="#L356">356</a> <em class="jxr_javadoccomment"> * Registers a custom swapper for a specific type.</em>
-<a class="jxr_linenumber" name="L357" href="#L357">357</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L358" href="#L358">358</a> <em class="jxr_javadoccomment"> * <p>Swappers pre-process objects before conversion. Common uses include</em>
-<a class="jxr_linenumber" name="L359" href="#L359">359</a> <em class="jxr_javadoccomment"> * unwrapping Optional values, calling Supplier methods, or extracting values</em>
-<a class="jxr_linenumber" name="L360" href="#L360">360</a> <em class="jxr_javadoccomment"> * from wrapper objects.</p></em>
-<a class="jxr_linenumber" name="L361" href="#L361">361</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L362" href="#L362">362</a> <em class="jxr_javadoccomment"> * @param <T> The type to handle</em>
-<a class="jxr_linenumber" name="L363" href="#L363">363</a> <em class="jxr_javadoccomment"> * @param c The class to register the swapper for</em>
-<a class="jxr_linenumber" name="L364" href="#L364">364</a> <em class="jxr_javadoccomment"> * @param s The swapping function</em>
-<a class="jxr_linenumber" name="L365" href="#L365">365</a> <em class="jxr_javadoccomment"> * @return This builder for method chaining</em>
-<a class="jxr_linenumber" name="L366" href="#L366">366</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L367" href="#L367">367</a> <strong class="jxr_keyword">public</strong> <T> Builder addSwapper(Class<T> c, Swapper<T> s) { swappers.add(<strong class="jxr_keyword">new</strong> SwapperEntry<>(c, s)); <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>; }
-<a class="jxr_linenumber" name="L368" href="#L368">368</a>
-<a class="jxr_linenumber" name="L369" href="#L369">369</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L370" href="#L370">370</a> <em class="jxr_javadoccomment"> * Builds the configured BasicBeanConverter instance.</em>
-<a class="jxr_linenumber" name="L371" href="#L371">371</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L372" href="#L372">372</a> <em class="jxr_javadoccomment"> * <p>This method creates a new BasicBeanConverter with all registered handlers</em>
-<a class="jxr_linenumber" name="L373" href="#L373">373</a> <em class="jxr_javadoccomment"> * and settings. The builder can be reused to create multiple converters with</em>
-<a class="jxr_linenumber" name="L374" href="#L374">374</a> <em class="jxr_javadoccomment"> * the same configuration.</p></em>
-<a class="jxr_linenumber" name="L375" href="#L375">375</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L376" href="#L376">376</a> <em class="jxr_javadoccomment"> * @return A new BasicBeanConverter instance</em>
-<a class="jxr_linenumber" name="L377" href="#L377">377</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L378" href="#L378">378</a> <strong class="jxr_keyword">public</strong> <a name="BasicBeanConverter" href="../../../../../org/apache/juneau/junit/bct/BasicBeanConverter.html#BasicBeanConverter">BasicBeanConverter</a> build() {
-<a class="jxr_linenumber" name="L379" href="#L379">379</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> <a name="BasicBeanConverter" href="../../../../../org/apache/juneau/junit/bct/BasicBeanConverter.html#BasicBeanConverter">BasicBeanConverter</a>(<strong class="jxr_keyword">this</strong>);
-<a class="jxr_linenumber" name="L380" href="#L380">380</a> }
-<a class="jxr_linenumber" name="L381" href="#L381">381</a>
-<a class="jxr_linenumber" name="L382" href="#L382">382</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L383" href="#L383">383</a> <em class="jxr_javadoccomment"> * Adds default handlers and settings for common Java types.</em>
-<a class="jxr_linenumber" name="L384" href="#L384">384</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L385" href="#L385">385</a> <em class="jxr_javadoccomment"> * <p>This method registers comprehensive support for:</p></em>
-<a class="jxr_linenumber" name="L386" href="#L386">386</a> <em class="jxr_javadoccomment"> * <ul></em>
-<a class="jxr_linenumber" name="L387" href="#L387">387</a> <em class="jxr_javadoccomment"> * <li><b>Collections:</b> List, Set, Collection → bracket format</li></em>
-<a class="jxr_linenumber" name="L388" href="#L388">388</a> <em class="jxr_javadoccomment"> * <li><b>Maps:</b> Map, Properties → brace format with key=value pairs</li></em>
-<a class="jxr_linenumber" name="L389" href="#L389">389</a> <em class="jxr_javadoccomment"> * <li><b>Map Entries:</b> Map.Entry → <js>"key=value"</js> format</li></em>
-<a class="jxr_linenumber" name="L390" href="#L390">390</a> <em class="jxr_javadoccomment"> * <li><b>Dates:</b> Date, Calendar → ISO-8601 format</li></em>
-<a class="jxr_linenumber" name="L391" href="#L391">391</a> <em class="jxr_javadoccomment"> * <li><b>Files/Streams:</b> File, InputStream, Reader → content extraction</li></em>
-<a class="jxr_linenumber" name="L392" href="#L392">392</a> <em class="jxr_javadoccomment"> * <li><b>Arrays:</b> byte[], char[] → hex strings and direct string conversion</li></em>
-<a class="jxr_linenumber" name="L393" href="#L393">393</a> <em class="jxr_javadoccomment"> * <li><b>Reflection:</b> Class, Method, Constructor → readable signatures</li></em>
-<a class="jxr_linenumber" name="L394" href="#L394">394</a> <em class="jxr_javadoccomment"> * <li><b>Enums:</b> All enum types → name() format</li></em>
-<a class="jxr_linenumber" name="L395" href="#L395">395</a> <em class="jxr_javadoccomment"> * <li><b>Iterables:</b> Iterable, Iterator, Enumeration, Stream → list conversion</li></em>
-<a class="jxr_linenumber" name="L396" href="#L396">396</a> <em class="jxr_javadoccomment"> * <li><b>Wrappers:</b> Optional, Supplier → unwrapping/evaluation</li></em>
-<a class="jxr_linenumber" name="L397" href="#L397">397</a> <em class="jxr_javadoccomment"> * </ul></em>
-<a class="jxr_linenumber" name="L398" href="#L398">398</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L399" href="#L399">399</a> <em class="jxr_javadoccomment"> * <p>Default settings configured by this method:</p></em>
-<a class="jxr_linenumber" name="L400" href="#L400">400</a> <em class="jxr_javadoccomment"> * <ul></em>
-<a class="jxr_linenumber" name="L401" href="#L401">401</a> <em class="jxr_javadoccomment"> * <li><code>{@link #SETTING_nullValue}</code> = <js>"&lt;null&gt;"</js> - String representation for null values</li></em>
-<a class="jxr_linenumber" name="L402" href="#L402">402</a> <em class="jxr_javadoccomment"> * <li><code>{@link #SETTING_selfValue}</code> = <js>"&lt;self&gt;"</js> - Special property name for self-reference</li></em>
-<a class="jxr_linenumber" name="L403" href="#L403">403</a> <em class="jxr_javadoccomment"> * <li><code>{@link #SETTING_classNameFormat}</code> = <js>"simple"</js> - Simple class name format</li></em>
-<a class="jxr_linenumber" name="L404" href="#L404">404</a> <em class="jxr_javadoccomment"> * </ul></em>
-<a class="jxr_linenumber" name="L405" href="#L405">405</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L406" href="#L406">406</a> <em class="jxr_javadoccomment"> * <p>Additional settings that can be configured (not set by default):</p></em>
-<a class="jxr_linenumber" name="L407" href="#L407">407</a> <em class="jxr_javadoccomment"> * <ul></em>
-<a class="jxr_linenumber" name="L408" href="#L408">408</a> <em class="jxr_javadoccomment"> * <li><code>{@link #SETTING_fieldSeparator}</code> - Delimiter between collection elements (default: <js>","</js>)</li></em>
-<a class="jxr_linenumber" name="L409" href="#L409">409</a> <em class="jxr_javadoccomment"> * <li><code>{@link #SETTING_collectionPrefix}</code> - Prefix for collection content (default: <js>"["</js>)</li></em>
-<a class="jxr_linenumber" name="L410" href="#L410">410</a> <em class="jxr_javadoccomment"> * <li><code>{@link #SETTING_collectionSuffix}</code> - Suffix for collection content (default: <js>"]"</js>)</li></em>
-<a class="jxr_linenumber" name="L411" href="#L411">411</a> <em class="jxr_javadoccomment"> * <li><code>{@link #SETTING_mapPrefix}</code> - Prefix for map content (default: <js>"{"</js>)</li></em>
-<a class="jxr_linenumber" name="L412" href="#L412">412</a> <em class="jxr_javadoccomment"> * <li><code>{@link #SETTING_mapSuffix}</code> - Suffix for map content (default: <js>"}"</js>)</li></em>
-<a class="jxr_linenumber" name="L413" href="#L413">413</a> <em class="jxr_javadoccomment"> * <li><code>{@link #SETTING_mapEntrySeparator}</code> - Separator between map keys and values (default: <js>"="</js>)</li></em>
-<a class="jxr_linenumber" name="L414" href="#L414">414</a> <em class="jxr_javadoccomment"> * <li><code>{@link #SETTING_calendarFormat}</code> - DateTimeFormatter for calendar objects (default: <jsf>ISO_INSTANT</jsf>)</li></em>
-<a class="jxr_linenumber" name="L415" href="#L415">415</a> <em class="jxr_javadoccomment"> * </ul></em>
-<a class="jxr_linenumber" name="L416" href="#L416">416</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L417" href="#L417">417</a> <em class="jxr_javadoccomment"> * <p><b>Note:</b> This should typically be called after custom handlers to avoid</em>
-<a class="jxr_linenumber" name="L418" href="#L418">418</a> <em class="jxr_javadoccomment"> * overriding your custom configurations, since handlers are processed in reverse order.</p></em>
-<a class="jxr_linenumber" name="L419" href="#L419">419</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L420" href="#L420">420</a> <em class="jxr_javadoccomment"> * @return This builder for method chaining</em>
-<a class="jxr_linenumber" name="L421" href="#L421">421</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L422" href="#L422">422</a> <strong class="jxr_keyword">public</strong> Builder defaultSettings() {
-<a class="jxr_linenumber" name="L423" href="#L423">423</a> addSetting(SETTING_nullValue, <span class="jxr_string">"<null>"</span>);
-<a class="jxr_linenumber" name="L424" href="#L424">424</a> addSetting(SETTING_selfValue, <span class="jxr_string">"<self>"</span>);
-<a class="jxr_linenumber" name="L425" href="#L425">425</a> addSetting(SETTING_classNameFormat, <span class="jxr_string">"simple"</span>);
-<a class="jxr_linenumber" name="L426" href="#L426">426</a>
-<a class="jxr_linenumber" name="L427" href="#L427">427</a> addStringifier(Map.Entry.<strong class="jxr_keyword">class</strong>, Stringifiers.mapEntryStringifier());
-<a class="jxr_linenumber" name="L428" href="#L428">428</a> addStringifier(GregorianCalendar.<strong class="jxr_keyword">class</strong>, Stringifiers.calendarStringifier());
-<a class="jxr_linenumber" name="L429" href="#L429">429</a> addStringifier(Date.<strong class="jxr_keyword">class</strong>, Stringifiers.dateStringifier());
-<a class="jxr_linenumber" name="L430" href="#L430">430</a> addStringifier(InputStream.<strong class="jxr_keyword">class</strong>, Stringifiers.inputStreamStringifier());
-<a class="jxr_linenumber" name="L431" href="#L431">431</a> addStringifier(byte[].<strong class="jxr_keyword">class</strong>, Stringifiers.byteArrayStringifier());
-<a class="jxr_linenumber" name="L432" href="#L432">432</a> addStringifier(<strong class="jxr_keyword">char</strong>[].<strong class="jxr_keyword">class</strong>, Stringifiers.charArrayStringifier());
-<a class="jxr_linenumber" name="L433" href="#L433">433</a> addStringifier(Reader.<strong class="jxr_keyword">class</strong>, Stringifiers.readerStringifier());
-<a class="jxr_linenumber" name="L434" href="#L434">434</a> addStringifier(File.<strong class="jxr_keyword">class</strong>, Stringifiers.fileStringifier());
-<a class="jxr_linenumber" name="L435" href="#L435">435</a> addStringifier(Enum.<strong class="jxr_keyword">class</strong>, Stringifiers.enumStringifier());
-<a class="jxr_linenumber" name="L436" href="#L436">436</a> addStringifier(Class.<strong class="jxr_keyword">class</strong>, Stringifiers.classStringifier());
-<a class="jxr_linenumber" name="L437" href="#L437">437</a> addStringifier(Constructor.<strong class="jxr_keyword">class</strong>, Stringifiers.constructorStringifier());
-<a class="jxr_linenumber" name="L438" href="#L438">438</a> addStringifier(Method.<strong class="jxr_keyword">class</strong>, Stringifiers.methodStringifier());
-<a class="jxr_linenumber" name="L439" href="#L439">439</a> addStringifier(List.<strong class="jxr_keyword">class</strong>, Stringifiers.listStringifier());
-<a class="jxr_linenumber" name="L440" href="#L440">440</a> addStringifier(Map.<strong class="jxr_keyword">class</strong>, Stringifiers.mapStringifier());
-<a class="jxr_linenumber" name="L441" href="#L441">441</a>
-<a class="jxr_linenumber" name="L442" href="#L442">442</a> <em class="jxr_comment">// Note: Listifiers are processed in reverse registration order (last registered wins).</em>
-<a class="jxr_linenumber" name="L443" href="#L443">443</a> <em class="jxr_comment">// Collection must be registered after Iterable so it takes precedence for Sets,</em>
-<a class="jxr_linenumber" name="L444" href="#L444">444</a> <em class="jxr_comment">// ensuring TreeSet conversion for deterministic ordering.</em>
-<a class="jxr_linenumber" name="L445" href="#L445">445</a> addListifier(Iterable.<strong class="jxr_keyword">class</strong>, Listifiers.iterableListifier());
-<a class="jxr_linenumber" name="L446" href="#L446">446</a> addListifier(Collection.<strong class="jxr_keyword">class</strong>, Listifiers.collectionListifier());
-<a class="jxr_linenumber" name="L447" href="#L447">447</a> addListifier(Iterator.<strong class="jxr_keyword">class</strong>, Listifiers.iteratorListifier());
-<a class="jxr_linenumber" name="L448" href="#L448">448</a> addListifier(Enumeration.<strong class="jxr_keyword">class</strong>, Listifiers.enumerationListifier());
-<a class="jxr_linenumber" name="L449" href="#L449">449</a> addListifier(Stream.<strong class="jxr_keyword">class</strong>, Listifiers.streamListifier());
-<a class="jxr_linenumber" name="L450" href="#L450">450</a> addListifier(Map.<strong class="jxr_keyword">class</strong>, Listifiers.mapListifier());
-<a class="jxr_linenumber" name="L451" href="#L451">451</a>
-<a class="jxr_linenumber" name="L452" href="#L452">452</a> addSwapper(Optional.<strong class="jxr_keyword">class</strong>, Swappers.optionalSwapper());
-<a class="jxr_linenumber" name="L453" href="#L453">453</a> addSwapper(Supplier.<strong class="jxr_keyword">class</strong>, Swappers.supplierSwapper());
-<a class="jxr_linenumber" name="L454" href="#L454">454</a> addSwapper(Future.<strong class="jxr_keyword">class</strong>, Swappers.futureSwapper());
-<a class="jxr_linenumber" name="L455" href="#L455">455</a>
-<a class="jxr_linenumber" name="L456" href="#L456">456</a> addPropertyExtractor(<strong class="jxr_keyword">new</strong> PropertyExtractors.ObjectPropertyExtractor());
-<a class="jxr_linenumber" name="L457" href="#L457">457</a> addPropertyExtractor(<strong class="jxr_keyword">new</strong> PropertyExtractors.ListPropertyExtractor());
-<a class="jxr_linenumber" name="L458" href="#L458">458</a> addPropertyExtractor(<strong class="jxr_keyword">new</strong> PropertyExtractors.MapPropertyExtractor());
-<a class="jxr_linenumber" name="L459" href="#L459">459</a>
-<a class="jxr_linenumber" name="L460" href="#L460">460</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>;
-<a class="jxr_linenumber" name="L461" href="#L461">461</a> }
-<a class="jxr_linenumber" name="L462" href="#L462">462</a> }
-<a class="jxr_linenumber" name="L463" href="#L463">463</a>
-<a class="jxr_linenumber" name="L464" href="#L464">464</a> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">class</strong> ListifierEntry<T> {
-<a class="jxr_linenumber" name="L465" href="#L465">465</a> <strong class="jxr_keyword">private</strong> Class<T> forClass;
-<a class="jxr_linenumber" name="L466" href="#L466">466</a> <strong class="jxr_keyword">private</strong> Listifier<T> function;
-<a class="jxr_linenumber" name="L467" href="#L467">467</a>
-<a class="jxr_linenumber" name="L468" href="#L468">468</a> <strong class="jxr_keyword">private</strong> ListifierEntry(Class<T> forClass, Listifier<T> function) {
-<a class="jxr_linenumber" name="L469" href="#L469">469</a> <strong class="jxr_keyword">this</strong>.forClass = forClass;
-<a class="jxr_linenumber" name="L470" href="#L470">470</a> <strong class="jxr_keyword">this</strong>.function = function;
-<a class="jxr_linenumber" name="L471" href="#L471">471</a> }
-<a class="jxr_linenumber" name="L472" href="#L472">472</a> }
-<a class="jxr_linenumber" name="L473" href="#L473">473</a>
-<a class="jxr_linenumber" name="L474" href="#L474">474</a> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">class</strong> StringifierEntry<T> {
-<a class="jxr_linenumber" name="L475" href="#L475">475</a> <strong class="jxr_keyword">private</strong> Class<T> forClass;
-<a class="jxr_linenumber" name="L476" href="#L476">476</a> <strong class="jxr_keyword">private</strong> Stringifier<T> function;
-<a class="jxr_linenumber" name="L477" href="#L477">477</a>
-<a class="jxr_linenumber" name="L478" href="#L478">478</a> @SuppressWarnings(<span class="jxr_string">"unchecked"</span>)
-<a class="jxr_linenumber" name="L479" href="#L479">479</a> <strong class="jxr_keyword">private</strong> StringifierEntry(Class<T> forClass, <a name="Stringifier" href="../../../../../org/apache/juneau/junit/bct/Stringifier.html#Stringifier">Stringifier</a> function) {
-<a class="jxr_linenumber" name="L480" href="#L480">480</a> <strong class="jxr_keyword">this</strong>.forClass = forClass;
-<a class="jxr_linenumber" name="L481" href="#L481">481</a> <strong class="jxr_keyword">this</strong>.function = function;
-<a class="jxr_linenumber" name="L482" href="#L482">482</a> }
-<a class="jxr_linenumber" name="L483" href="#L483">483</a> }
-<a class="jxr_linenumber" name="L484" href="#L484">484</a>
-<a class="jxr_linenumber" name="L485" href="#L485">485</a> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">class</strong> SwapperEntry<T> {
-<a class="jxr_linenumber" name="L486" href="#L486">486</a> <strong class="jxr_keyword">private</strong> Class<T> forClass;
-<a class="jxr_linenumber" name="L487" href="#L487">487</a> <strong class="jxr_keyword">private</strong> Swapper<T> function;
-<a class="jxr_linenumber" name="L488" href="#L488">488</a>
-<a class="jxr_linenumber" name="L489" href="#L489">489</a> <strong class="jxr_keyword">private</strong> SwapperEntry(Class<T> forClass, Swapper<T> function) {
-<a class="jxr_linenumber" name="L490" href="#L490">490</a> <strong class="jxr_keyword">this</strong>.forClass = forClass;
-<a class="jxr_linenumber" name="L491" href="#L491">491</a> <strong class="jxr_keyword">this</strong>.function = function;
-<a class="jxr_linenumber" name="L492" href="#L492">492</a> }
-<a class="jxr_linenumber" name="L493" href="#L493">493</a> }
-<a class="jxr_linenumber" name="L494" href="#L494">494</a>
-<a class="jxr_linenumber" name="L495" href="#L495">495</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L496" href="#L496">496</a> <em class="jxr_javadoccomment"> * Default converter instance with standard settings and handlers.</em>
-<a class="jxr_linenumber" name="L497" href="#L497">497</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L498" href="#L498">498</a> <em class="jxr_javadoccomment"> * <p>This pre-configured instance provides comprehensive support for all common Java types</em>
-<a class="jxr_linenumber" name="L499" href="#L499">499</a> <em class="jxr_javadoccomment"> * with sensible default settings. It's suitable for most BCT testing scenarios and can be</em>
-<a class="jxr_linenumber" name="L500" href="#L500">500</a> <em class="jxr_javadoccomment"> * used directly without building a custom converter.</p></em>
-<a class="jxr_linenumber" name="L501" href="#L501">501</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L502" href="#L502">502</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Included Support:</h5></em>
-<a class="jxr_linenumber" name="L503" href="#L503">503</a> <em class="jxr_javadoccomment"> * <ul></em>
-<a class="jxr_linenumber" name="L504" href="#L504">504</a> <em class="jxr_javadoccomment"> * <li><b>Collections:</b> List, Set, Queue with bracket formatting</li></em>
-<a class="jxr_linenumber" name="L505" href="#L505">505</a> <em class="jxr_javadoccomment"> * <li><b>Maps:</b> Map, Properties with brace formatting</li></em>
-<a class="jxr_linenumber" name="L506" href="#L506">506</a> <em class="jxr_javadoccomment"> * <li><b>Arrays:</b> All array types with bracket formatting</li></em>
-<a class="jxr_linenumber" name="L507" href="#L507">507</a> <em class="jxr_javadoccomment"> * <li><b>Dates:</b> Date, Calendar with ISO-8601 formatting</li></em>
-<a class="jxr_linenumber" name="L508" href="#L508">508</a> <em class="jxr_javadoccomment"> * <li><b>Files/Streams:</b> File, InputStream, Reader content extraction</li></em>
-<a class="jxr_linenumber" name="L509" href="#L509">509</a> <em class="jxr_javadoccomment"> * <li><b>Reflection:</b> Class, Method, Constructor readable signatures</li></em>
-<a class="jxr_linenumber" name="L510" href="#L510">510</a> <em class="jxr_javadoccomment"> * <li><b>Enums:</b> name() representation</li></em>
-<a class="jxr_linenumber" name="L511" href="#L511">511</a> <em class="jxr_javadoccomment"> * <li><b>Wrappers:</b> Optional, Supplier, Future unwrapping</li></em>
-<a class="jxr_linenumber" name="L512" href="#L512">512</a> <em class="jxr_javadoccomment"> * </ul></em>
-<a class="jxr_linenumber" name="L513" href="#L513">513</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L514" href="#L514">514</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Default Settings:</h5></em>
-<a class="jxr_linenumber" name="L515" href="#L515">515</a> <em class="jxr_javadoccomment"> * <ul></em>
-<a class="jxr_linenumber" name="L516" href="#L516">516</a> <em class="jxr_javadoccomment"> * <li><code>nullValue</code> = <js>"&lt;null&gt;"</js></li></em>
-<a class="jxr_linenumber" name="L517" href="#L517">517</a> <em class="jxr_javadoccomment"> * <li><code>selfValue</code> = <js>"&lt;self&gt;"</js></li></em>
-<a class="jxr_linenumber" name="L518" href="#L518">518</a> <em class="jxr_javadoccomment"> * <li><code>classNameFormat</code> = <js>"simple"</js></li></em>
-<a class="jxr_linenumber" name="L519" href="#L519">519</a> <em class="jxr_javadoccomment"> * </ul></em>
-<a class="jxr_linenumber" name="L520" href="#L520">520</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L521" href="#L521">521</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Usage Example:</h5></em>
-<a class="jxr_linenumber" name="L522" href="#L522">522</a> <em class="jxr_javadoccomment"> * <p class='bjava'></em>
-<a class="jxr_linenumber" name="L523" href="#L523">523</a> <em class="jxr_javadoccomment"> * <jc>// Use default converter for assertions</jc></em>
-<a class="jxr_linenumber" name="L524" href="#L524">524</a> <em class="jxr_javadoccomment"> * <jk>var</jk> <jv>result</jv> = BasicBeanConverter.<jsf>DEFAULT</jsf>.stringify(<jv>myObject</jv>);</em>
-<a class="jxr_linenumber" name="L525" href="#L525">525</a> <em class="jxr_javadoccomment"> * <jk>var</jk> <jv>city</jv> = BasicBeanConverter.<jsf>DEFAULT</jsf>.getProperty(<jv>user</jv>, <js>"address.city"</js>);</em>
-<a class="jxr_linenumber" name="L526" href="#L526">526</a> <em class="jxr_javadoccomment"> * </p></em>
-<a class="jxr_linenumber" name="L527" href="#L527">527</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L528" href="#L528">528</a> <em class="jxr_javadoccomment"> * @see #builder()</em>
-<a class="jxr_linenumber" name="L529" href="#L529">529</a> <em class="jxr_javadoccomment"> * @see Builder#defaultSettings()</em>
-<a class="jxr_linenumber" name="L530" href="#L530">530</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L531" href="#L531">531</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <a name="BasicBeanConverter" href="../../../../../org/apache/juneau/junit/bct/BasicBeanConverter.html#BasicBeanConverter">BasicBeanConverter</a> DEFAULT = builder().defaultSettings().build();
-<a class="jxr_linenumber" name="L532" href="#L532">532</a>
-<a class="jxr_linenumber" name="L533" href="#L533">533</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L534" href="#L534">534</a> <em class="jxr_javadoccomment"> * Setting key for the string representation of null values.</em>
-<a class="jxr_linenumber" name="L535" href="#L535">535</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L536" href="#L536">536</a> <em class="jxr_javadoccomment"> * <p>Default value: <js>"&lt;null&gt;"</js></p></em>
-<a class="jxr_linenumber" name="L537" href="#L537">537</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L538" href="#L538">538</a> <em class="jxr_javadoccomment"> * <p>This setting controls how null values are displayed when stringified.</em>
-<a class="jxr_linenumber" name="L539" href="#L539">539</a> <em class="jxr_javadoccomment"> * Used by the converter when encountering null objects during conversion.</p></em>
-<a class="jxr_linenumber" name="L540" href="#L540">540</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L541" href="#L541">541</a> <em class="jxr_javadoccomment"> * @see Builder#addSetting(String, Object)</em>
-<a class="jxr_linenumber" name="L542" href="#L542">542</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L543" href="#L543">543</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> String SETTING_nullValue = <span class="jxr_string">"nullValue"</span>;
-<a class="jxr_linenumber" name="L544" href="#L544">544</a>
-<a class="jxr_linenumber" name="L545" href="#L545">545</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L546" href="#L546">546</a> <em class="jxr_javadoccomment"> * Setting key for the special property name that returns the object itself.</em>
-<a class="jxr_linenumber" name="L547" href="#L547">547</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L548" href="#L548">548</a> <em class="jxr_javadoccomment"> * <p>Default value: <js>"&lt;self&gt;"</js></p></em>
-<a class="jxr_linenumber" name="L549" href="#L549">549</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L550" href="#L550">550</a> <em class="jxr_javadoccomment"> * <p>This setting defines the property name that, when accessed, returns the</em>
-<a class="jxr_linenumber" name="L551" href="#L551">551</a> <em class="jxr_javadoccomment"> * object itself rather than a property of the object. Useful for self-referential</em>
-<a class="jxr_linenumber" name="L552" href="#L552">552</a> <em class="jxr_javadoccomment"> * property access in nested object navigation.</p></em>
-<a class="jxr_linenumber" name="L553" href="#L553">553</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L554" href="#L554">554</a> <em class="jxr_javadoccomment"> * @see Builder#addSetting(String, Object)</em>
-<a class="jxr_linenumber" name="L555" href="#L555">555</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L556" href="#L556">556</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> String SETTING_selfValue = <span class="jxr_string">"selfValue"</span>;
-<a class="jxr_linenumber" name="L557" href="#L557">557</a>
-<a class="jxr_linenumber" name="L558" href="#L558">558</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L559" href="#L559">559</a> <em class="jxr_javadoccomment"> * Setting key for the delimiter between collection elements and map entries.</em>
-<a class="jxr_linenumber" name="L560" href="#L560">560</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L561" href="#L561">561</a> <em class="jxr_javadoccomment"> * <p>Default value: <js>","</js></p></em>
-<a class="jxr_linenumber" name="L562" href="#L562">562</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L563" href="#L563">563</a> <em class="jxr_javadoccomment"> * <p>This setting controls the separator used between elements when converting</em>
-<a class="jxr_linenumber" name="L564" href="#L564">564</a> <em class="jxr_javadoccomment"> * collections, arrays, and maps to string representations.</p></em>
-<a class="jxr_linenumber" name="L565" href="#L565">565</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L566" href="#L566">566</a> <em class="jxr_javadoccomment"> * @see Builder#addSetting(String, Object)</em>
-<a class="jxr_linenumber" name="L567" href="#L567">567</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L568" href="#L568">568</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> String SETTING_fieldSeparator = <span class="jxr_string">"fieldSeparator"</span>;
-<a class="jxr_linenumber" name="L569" href="#L569">569</a>
-<a class="jxr_linenumber" name="L570" href="#L570">570</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L571" href="#L571">571</a> <em class="jxr_javadoccomment"> * Setting key for the prefix character(s) used around collection content.</em>
-<a class="jxr_linenumber" name="L572" href="#L572">572</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L573" href="#L573">573</a> <em class="jxr_javadoccomment"> * <p>Default value: <js>"["</js></p></em>
-<a class="jxr_linenumber" name="L574" href="#L574">574</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L575" href="#L575">575</a> <em class="jxr_javadoccomment"> * <p>This setting defines the opening bracket or prefix used when displaying</em>
-<a class="jxr_linenumber" name="L576" href="#L576">576</a> <em class="jxr_javadoccomment"> * collection and array contents in string format.</p></em>
-<a class="jxr_linenumber" name="L577" href="#L577">577</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L578" href="#L578">578</a> <em class="jxr_javadoccomment"> * @see Builder#addSetting(String, Object)</em>
-<a class="jxr_linenumber" name="L579" href="#L579">579</a> <em class="jxr_javadoccomment"> * @see #SETTING_collectionSuffix</em>
-<a class="jxr_linenumber" name="L580" href="#L580">580</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L581" href="#L581">581</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> String SETTING_collectionPrefix = <span class="jxr_string">"collectionPrefix"</span>;
-<a class="jxr_linenumber" name="L582" href="#L582">582</a>
-<a class="jxr_linenumber" name="L583" href="#L583">583</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L584" href="#L584">584</a> <em class="jxr_javadoccomment"> * Setting key for the suffix character(s) used around collection content.</em>
-<a class="jxr_linenumber" name="L585" href="#L585">585</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L586" href="#L586">586</a> <em class="jxr_javadoccomment"> * <p>Default value: <js>"]"</js></p></em>
-<a class="jxr_linenumber" name="L587" href="#L587">587</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L588" href="#L588">588</a> <em class="jxr_javadoccomment"> * <p>This setting defines the closing bracket or suffix used when displaying</em>
-<a class="jxr_linenumber" name="L589" href="#L589">589</a> <em class="jxr_javadoccomment"> * collection and array contents in string format.</p></em>
-<a class="jxr_linenumber" name="L590" href="#L590">590</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L591" href="#L591">591</a> <em class="jxr_javadoccomment"> * @see Builder#addSetting(String, Object)</em>
-<a class="jxr_linenumber" name="L592" href="#L592">592</a> <em class="jxr_javadoccomment"> * @see #SETTING_collectionPrefix</em>
-<a class="jxr_linenumber" name="L593" href="#L593">593</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L594" href="#L594">594</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> String SETTING_collectionSuffix = <span class="jxr_string">"collectionSuffix"</span>;
-<a class="jxr_linenumber" name="L595" href="#L595">595</a>
-<a class="jxr_linenumber" name="L596" href="#L596">596</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L597" href="#L597">597</a> <em class="jxr_javadoccomment"> * Setting key for the prefix character(s) used around map content.</em>
-<a class="jxr_linenumber" name="L598" href="#L598">598</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L599" href="#L599">599</a> <em class="jxr_javadoccomment"> * <p>Default value: <js>"{"</js></p></em>
-<a class="jxr_linenumber" name="L600" href="#L600">600</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L601" href="#L601">601</a> <em class="jxr_javadoccomment"> * <p>This setting defines the opening brace or prefix used when displaying</em>
-<a class="jxr_linenumber" name="L602" href="#L602">602</a> <em class="jxr_javadoccomment"> * map contents in string format.</p></em>
-<a class="jxr_linenumber" name="L603" href="#L603">603</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L604" href="#L604">604</a> <em class="jxr_javadoccomment"> * @see Builder#addSetting(String, Object)</em>
-<a class="jxr_linenumber" name="L605" href="#L605">605</a> <em class="jxr_javadoccomment"> * @see #SETTING_mapSuffix</em>
-<a class="jxr_linenumber" name="L606" href="#L606">606</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L607" href="#L607">607</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> String SETTING_mapPrefix = <span class="jxr_string">"mapPrefix"</span>;
-<a class="jxr_linenumber" name="L608" href="#L608">608</a>
-<a class="jxr_linenumber" name="L609" href="#L609">609</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L610" href="#L610">610</a> <em class="jxr_javadoccomment"> * Setting key for the suffix character(s) used around map content.</em>
-<a class="jxr_linenumber" name="L611" href="#L611">611</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L612" href="#L612">612</a> <em class="jxr_javadoccomment"> * <p>Default value: <js>"}"</js></p></em>
-<a class="jxr_linenumber" name="L613" href="#L613">613</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L614" href="#L614">614</a> <em class="jxr_javadoccomment"> * <p>This setting defines the closing brace or suffix used when displaying</em>
-<a class="jxr_linenumber" name="L615" href="#L615">615</a> <em class="jxr_javadoccomment"> * map contents in string format.</p></em>
-<a class="jxr_linenumber" name="L616" href="#L616">616</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L617" href="#L617">617</a> <em class="jxr_javadoccomment"> * @see Builder#addSetting(String, Object)</em>
-<a class="jxr_linenumber" name="L618" href="#L618">618</a> <em class="jxr_javadoccomment"> * @see #SETTING_mapPrefix</em>
-<a class="jxr_linenumber" name="L619" href="#L619">619</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L620" href="#L620">620</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> String SETTING_mapSuffix = <span class="jxr_string">"mapSuffix"</span>;
-<a class="jxr_linenumber" name="L621" href="#L621">621</a>
-<a class="jxr_linenumber" name="L622" href="#L622">622</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L623" href="#L623">623</a> <em class="jxr_javadoccomment"> * Setting key for the separator between map keys and values.</em>
-<a class="jxr_linenumber" name="L624" href="#L624">624</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L625" href="#L625">625</a> <em class="jxr_javadoccomment"> * <p>Default value: <js>"="</js></p></em>
-<a class="jxr_linenumber" name="L626" href="#L626">626</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L627" href="#L627">627</a> <em class="jxr_javadoccomment"> * <p>This setting controls the separator used between keys and values when</em>
-<a class="jxr_linenumber" name="L628" href="#L628">628</a> <em class="jxr_javadoccomment"> * converting map entries to string representations (e.g., "key=value").</p></em>
-<a class="jxr_linenumber" name="L629" href="#L629">629</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L630" href="#L630">630</a> <em class="jxr_javadoccomment"> * @see Builder#addSetting(String, Object)</em>
-<a class="jxr_linenumber" name="L631" href="#L631">631</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L632" href="#L632">632</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> String SETTING_mapEntrySeparator = <span class="jxr_string">"mapEntrySeparator"</span>;
-<a class="jxr_linenumber" name="L633" href="#L633">633</a>
-<a class="jxr_linenumber" name="L634" href="#L634">634</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L635" href="#L635">635</a> <em class="jxr_javadoccomment"> * Setting key for the DateTimeFormatter used for calendar objects.</em>
-<a class="jxr_linenumber" name="L636" href="#L636">636</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L637" href="#L637">637</a> <em class="jxr_javadoccomment"> * <p>Default value: <jsf>ISO_INSTANT</jsf></p></em>
-<a class="jxr_linenumber" name="L638" href="#L638">638</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L639" href="#L639">639</a> <em class="jxr_javadoccomment"> * <p>This setting defines the date/time format used when converting Calendar</em>
-<a class="jxr_linenumber" name="L640" href="#L640">640</a> <em class="jxr_javadoccomment"> * objects to string representations. Must be a valid DateTimeFormatter instance.</p></em>
-<a class="jxr_linenumber" name="L641" href="#L641">641</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L642" href="#L642">642</a> <em class="jxr_javadoccomment"> * @see Builder#addSetting(String, Object)</em>
-<a class="jxr_linenumber" name="L643" href="#L643">643</a> <em class="jxr_javadoccomment"> * @see java.time.format.DateTimeFormatter</em>
-<a class="jxr_linenumber" name="L644" href="#L644">644</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L645" href="#L645">645</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> String SETTING_calendarFormat = <span class="jxr_string">"calendarFormat"</span>;
-<a class="jxr_linenumber" name="L646" href="#L646">646</a>
-<a class="jxr_linenumber" name="L647" href="#L647">647</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L648" href="#L648">648</a> <em class="jxr_javadoccomment"> * Setting key for the format used when displaying class names.</em>
-<a class="jxr_linenumber" name="L649" href="#L649">649</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L650" href="#L650">650</a> <em class="jxr_javadoccomment"> * <p>Default value: <js>"simple"</js></p></em>
-<a class="jxr_linenumber" name="L651" href="#L651">651</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L652" href="#L652">652</a> <em class="jxr_javadoccomment"> * <p>This setting controls how class names are displayed in string representations.</em>
-<a class="jxr_linenumber" name="L653" href="#L653">653</a> <em class="jxr_javadoccomment"> * Valid values are:</p></em>
-<a class="jxr_linenumber" name="L654" href="#L654">654</a> <em class="jxr_javadoccomment"> * <ul></em>
-<a class="jxr_linenumber" name="L655" href="#L655">655</a> <em class="jxr_javadoccomment"> * <li><js>"simple"</js> - Simple class name only (e.g., "String")</li></em>
-<a class="jxr_linenumber" name="L656" href="#L656">656</a> <em class="jxr_javadoccomment"> * <li><js>"canonical"</js> - Canonical class name (e.g., "java.lang.String")</li></em>
-<a class="jxr_linenumber" name="L657" href="#L657">657</a> <em class="jxr_javadoccomment"> * <li><js>"full"</js> - Full class name with package (e.g., "java.lang.String")</li></em>
-<a class="jxr_linenumber" name="L658" href="#L658">658</a> <em class="jxr_javadoccomment"> * </ul></em>
-<a class="jxr_linenumber" name="L659" href="#L659">659</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L660" href="#L660">660</a> <em class="jxr_javadoccomment"> * @see Builder#addSetting(String, Object)</em>
-<a class="jxr_linenumber" name="L661" href="#L661">661</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L662" href="#L662">662</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> String SETTING_classNameFormat = <span class="jxr_string">"classNameFormat"</span>;
-<a class="jxr_linenumber" name="L663" href="#L663">663</a>
-<a class="jxr_linenumber" name="L664" href="#L664">664</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L665" href="#L665">665</a> <em class="jxr_javadoccomment"> * Creates a new builder for configuring a BasicBeanConverter instance.</em>
-<a class="jxr_linenumber" name="L666" href="#L666">666</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L667" href="#L667">667</a> <em class="jxr_javadoccomment"> * <p>The builder allows registration of custom stringifiers, listifiers, and swappers,</em>
-<a class="jxr_linenumber" name="L668" href="#L668">668</a> <em class="jxr_javadoccomment"> * as well as configuration of various formatting settings before building the converter.</p></em>
-<a class="jxr_linenumber" name="L669" href="#L669">669</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L670" href="#L670">670</a> <em class="jxr_javadoccomment"> * @return A new Builder instance</em>
-<a class="jxr_linenumber" name="L671" href="#L671">671</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L672" href="#L672">672</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> Builder builder() {
-<a class="jxr_linenumber" name="L673" href="#L673">673</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> Builder();
-<a class="jxr_linenumber" name="L674" href="#L674">674</a> }
-<a class="jxr_linenumber" name="L675" href="#L675">675</a>
-<a class="jxr_linenumber" name="L676" href="#L676">676</a> <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> List<StringifierEntry<?>> stringifiers;
-<a class="jxr_linenumber" name="L677" href="#L677">677</a> <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> List<ListifierEntry<?>> listifiers;
-<a class="jxr_linenumber" name="L678" href="#L678">678</a> <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> List<SwapperEntry<?>> swappers;
-<a class="jxr_linenumber" name="L679" href="#L679">679</a>
-<a class="jxr_linenumber" name="L680" href="#L680">680</a> <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> List<PropertyExtractor> propertyExtractors;
-<a class="jxr_linenumber" name="L681" href="#L681">681</a>
-<a class="jxr_linenumber" name="L682" href="#L682">682</a> <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> Map<String,Object> settings;
-<a class="jxr_linenumber" name="L683" href="#L683">683</a>
-<a class="jxr_linenumber" name="L684" href="#L684">684</a> <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> ConcurrentHashMap<Class,Optional<Stringifier<?>>> stringifierMap = <strong class="jxr_keyword">new</strong> ConcurrentHashMap<>();
-<a class="jxr_linenumber" name="L685" href="#L685">685</a>
-<a class="jxr_linenumber" name="L686" href="#L686">686</a> <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> ConcurrentHashMap<Class,Optional<Listifier<?>>> listifierMap = <strong class="jxr_keyword">new</strong> ConcurrentHashMap<>();
-<a class="jxr_linenumber" name="L687" href="#L687">687</a>
-<a class="jxr_linenumber" name="L688" href="#L688">688</a> <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> ConcurrentHashMap<Class,Optional<Swapper<?>>> swapperMap = <strong class="jxr_keyword">new</strong> ConcurrentHashMap<>();
-<a class="jxr_linenumber" name="L689" href="#L689">689</a>
-<a class="jxr_linenumber" name="L690" href="#L690">690</a> <strong class="jxr_keyword">protected</strong> <a name="BasicBeanConverter" href="../../../../../org/apache/juneau/junit/bct/BasicBeanConverter.html#BasicBeanConverter">BasicBeanConverter</a>(Builder b) {
-<a class="jxr_linenumber" name="L691" href="#L691">691</a> stringifiers = <strong class="jxr_keyword">new</strong> ArrayList<>(b.stringifiers);
-<a class="jxr_linenumber" name="L692" href="#L692">692</a> listifiers = <strong class="jxr_keyword">new</strong> ArrayList<>(b.listifiers);
-<a class="jxr_linenumber" name="L693" href="#L693">693</a> swappers = <strong class="jxr_keyword">new</strong> ArrayList<>(b.swappers);
-<a class="jxr_linenumber" name="L694" href="#L694">694</a> propertyExtractors = <strong class="jxr_keyword">new</strong> ArrayList<>(b.propertyExtractors);
-<a class="jxr_linenumber" name="L695" href="#L695">695</a> settings = <strong class="jxr_keyword">new</strong> HashMap<>(b.settings);
-<a class="jxr_linenumber" name="L696" href="#L696">696</a> Collections.reverse(stringifiers);
-<a class="jxr_linenumber" name="L697" href="#L697">697</a> Collections.reverse(listifiers);
-<a class="jxr_linenumber" name="L698" href="#L698">698</a> Collections.reverse(swappers);
-<a class="jxr_linenumber" name="L699" href="#L699">699</a> Collections.reverse(propertyExtractors);
-<a class="jxr_linenumber" name="L700" href="#L700">700</a> }
-<a class="jxr_linenumber" name="L701" href="#L701">701</a>
-<a class="jxr_linenumber" name="L702" href="#L702">702</a> @Override
-<a class="jxr_linenumber" name="L703" href="#L703">703</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> canListify(Object o) {
-<a class="jxr_linenumber" name="L704" href="#L704">704</a> o = swap(o);
-<a class="jxr_linenumber" name="L705" href="#L705">705</a> <strong class="jxr_keyword">if</strong> (o == <strong class="jxr_keyword">null</strong>)
-<a class="jxr_linenumber" name="L706" href="#L706">706</a> <strong class="jxr_keyword">return</strong> false;
-<a class="jxr_linenumber" name="L707" href="#L707">707</a> <strong class="jxr_keyword">var</strong> c = o.getClass();
-<a class="jxr_linenumber" name="L708" href="#L708">708</a> <strong class="jxr_keyword">return</strong> o instanceof List || c.isArray() || listifierMap.computeIfAbsent(c, <strong class="jxr_keyword">this</strong>::findListifier).isPresent();
-<a class="jxr_linenumber" name="L709" href="#L709">709</a> }
-<a class="jxr_linenumber" name="L710" href="#L710">710</a>
-<a class="jxr_linenumber" name="L711" href="#L711">711</a> @Override
-<a class="jxr_linenumber" name="L712" href="#L712">712</a> <strong class="jxr_keyword">public</strong> String getNested(Object o, NestedTokenizer.Token token) {
-<a class="jxr_linenumber" name="L713" href="#L713">713</a> assertArgNotNull(<span class="jxr_string">"token"</span>, token);
-<a class="jxr_linenumber" name="L714" href="#L714">714</a>
-<a class="jxr_linenumber" name="L715" href="#L715">715</a> <strong class="jxr_keyword">if</strong> (o == <strong class="jxr_keyword">null</strong>)
-<a class="jxr_linenumber" name="L716" href="#L716">716</a> <strong class="jxr_keyword">return</strong> getSetting(SETTING_nullValue, <strong class="jxr_keyword">null</strong>);
-<a class="jxr_linenumber" name="L717" href="#L717">717</a>
-<a class="jxr_linenumber" name="L718" href="#L718">718</a> <em class="jxr_comment">// Handle #{...} syntax for iterating over collections/arrays</em>
-<a class="jxr_linenumber" name="L719" href="#L719">719</a> <strong class="jxr_keyword">if</strong> (eq(<span class="jxr_string">"#"</span>, token.getValue()) && canListify(o)) {
-<a class="jxr_linenumber" name="L720" href="#L720">720</a> <strong class="jxr_keyword">return</strong> listify(o).stream().map(x -> token.getNested().stream().map(x2 -> getNested(x, x2)).collect(joining(<span class="jxr_string">","</span>, <span class="jxr_string">"{"</span>, <span class="jxr_string">"}"</span>))).collect(joining(<span class="jxr_string">","</span>, <span class="jxr_string">"["</span>, <span class="jxr_string">"]"</span>));
-<a class="jxr_linenumber" name="L721" href="#L721">721</a> }
-<a class="jxr_linenumber" name="L722" href="#L722">722</a>
-<a class="jxr_linenumber" name="L723" href="#L723">723</a> <em class="jxr_comment">// Original logic for regular property access</em>
-<a class="jxr_linenumber" name="L724" href="#L724">724</a> <strong class="jxr_keyword">var</strong> pn = token.getValue();
-<a class="jxr_linenumber" name="L725" href="#L725">725</a> <strong class="jxr_keyword">var</strong> selfValue = getSetting(SETTING_selfValue, <span class="jxr_string">"<self>"</span>);
-<a class="jxr_linenumber" name="L726" href="#L726">726</a>
-<a class="jxr_linenumber" name="L727" href="#L727">727</a> <em class="jxr_comment">// Handle special values</em>
-<a class="jxr_linenumber" name="L728" href="#L728">728</a> Object e;
-<a class="jxr_linenumber" name="L729" href="#L729">729</a> <strong class="jxr_keyword">if</strong> (pn.equals(selfValue)) {
-<a class="jxr_linenumber" name="L730" href="#L730">730</a> e = o; <em class="jxr_comment">// Return the object itself</em>
-<a class="jxr_linenumber" name="L731" href="#L731">731</a> } <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="L732" href="#L732">732</a> e = ofNullable(getProperty(o, pn)).orElse(<strong class="jxr_keyword">null</strong>);
-<a class="jxr_linenumber" name="L733" href="#L733">733</a> }
-<a class="jxr_linenumber" name="L734" href="#L734">734</a> <strong class="jxr_keyword">if</strong> (e == <strong class="jxr_keyword">null</strong> || !token.hasNested())
-<a class="jxr_linenumber" name="L735" href="#L735">735</a> <strong class="jxr_keyword">return</strong> stringify(e);
-<a class="jxr_linenumber" name="L736" href="#L736">736</a> <strong class="jxr_keyword">return</strong> token.getNested().stream().map(x -> getNested(e, x)).map(<strong class="jxr_keyword">this</strong>::stringify).collect(joining(<span class="jxr_string">","</span>, <span class="jxr_string">"{"</span>, <span class="jxr_string">"}"</span>));
-<a class="jxr_linenumber" name="L737" href="#L737">737</a> }
-<a class="jxr_linenumber" name="L738" href="#L738">738</a>
-<a class="jxr_linenumber" name="L739" href="#L739">739</a> @Override
-<a class="jxr_linenumber" name="L740" href="#L740">740</a> <strong class="jxr_keyword">public</strong> Object getProperty(Object object, String name) {
-<a class="jxr_linenumber" name="L741" href="#L741">741</a> <strong class="jxr_keyword">var</strong> o = swap(object);
-<a class="jxr_linenumber" name="L742" href="#L742">742</a> <strong class="jxr_keyword">return</strong> propertyExtractors.stream().filter(x -> x.canExtract(<strong class="jxr_keyword">this</strong>, o, name)).findFirst()
-<a class="jxr_linenumber" name="L743" href="#L743">743</a> .orElseThrow(() -> <strong class="jxr_keyword">new</strong> RuntimeException(f(<span class="jxr_string">"Could not find extractor for object of type {0}"</span>, o.getClass().getName()))).extract(<strong class="jxr_keyword">this</strong>, o, name);
-<a class="jxr_linenumber" name="L744" href="#L744">744</a> }
-<a class="jxr_linenumber" name="L745" href="#L745">745</a>
-<a class="jxr_linenumber" name="L746" href="#L746">746</a> @Override
-<a class="jxr_linenumber" name="L747" href="#L747">747</a> @SuppressWarnings(<span class="jxr_string">"unchecked"</span>)
-<a class="jxr_linenumber" name="L748" href="#L748">748</a> <strong class="jxr_keyword">public</strong> <T> T getSetting(String key, T def) {
-<a class="jxr_linenumber" name="L749" href="#L749">749</a> <strong class="jxr_keyword">return</strong> (T)settings.getOrDefault(key, def);
-<a class="jxr_linenumber" name="L750" href="#L750">750</a> }
-<a class="jxr_linenumber" name="L751" href="#L751">751</a>
-<a class="jxr_linenumber" name="L752" href="#L752">752</a> @Override
-<a class="jxr_linenumber" name="L753" href="#L753">753</a> @SuppressWarnings(<span class="jxr_string">"unchecked"</span>)
-<a class="jxr_linenumber" name="L754" href="#L754">754</a> <strong class="jxr_keyword">public</strong> List<Object> listify(Object o) {
-<a class="jxr_linenumber" name="L755" href="#L755">755</a> assertArgNotNull(<span class="jxr_string">"o"</span>, o);
-<a class="jxr_linenumber" name="L756" href="#L756">756</a> o = swap(o);
-<a class="jxr_linenumber" name="L757" href="#L757">757</a> <strong class="jxr_keyword">if</strong> (o instanceof List)
-<a class="jxr_linenumber" name="L758" href="#L758">758</a> <strong class="jxr_keyword">return</strong> (List<Object>)o;
-<a class="jxr_linenumber" name="L759" href="#L759">759</a> <strong class="jxr_keyword">var</strong> c = o.getClass();
-<a class="jxr_linenumber" name="L760" href="#L760">760</a> <strong class="jxr_keyword">if</strong> (c.isArray())
-<a class="jxr_linenumber" name="L761" href="#L761">761</a> <strong class="jxr_keyword">return</strong> arrayToList(o);
-<a class="jxr_linenumber" name="L762" href="#L762">762</a> <strong class="jxr_keyword">var</strong> o2 = o;
-<a class="jxr_linenumber" name="L763" href="#L763">763</a> <strong class="jxr_keyword">return</strong> listifierMap.computeIfAbsent(c, <strong class="jxr_keyword">this</strong>::findListifier).map(x -> (<a name="Listifier" href="../../../../../org/apache/juneau/junit/bct/Listifier.html#Listifier">Listifier</a>)x).map(x -> (List<Object>)x.apply(<strong class="jxr_keyword">this</strong>, o2))
-<a class="jxr_linenumber" name="L764" href="#L764">764</a> .orElseThrow(() -> <strong class="jxr_keyword">new</strong> IllegalArgumentException(f(<span class="jxr_string">"Object of type {0} could not be converted to a list."</span>, scn(o2))));
-<a class="jxr_linenumber" name="L765" href="#L765">765</a> }
-<a class="jxr_linenumber" name="L766" href="#L766">766</a>
-<a class="jxr_linenumber" name="L767" href="#L767">767</a> @Override
-<a class="jxr_linenumber" name="L768" href="#L768">768</a> @SuppressWarnings(<span class="jxr_string">"unchecked"</span>)
-<a class="jxr_linenumber" name="L769" href="#L769">769</a> <strong class="jxr_keyword">public</strong> String stringify(Object o) {
-<a class="jxr_linenumber" name="L770" href="#L770">770</a> o = swap(o);
-<a class="jxr_linenumber" name="L771" href="#L771">771</a> <strong class="jxr_keyword">if</strong> (o == <strong class="jxr_keyword">null</strong>)
-<a class="jxr_linenumber" name="L772" href="#L772">772</a> <strong class="jxr_keyword">return</strong> getSetting(SETTING_nullValue, <strong class="jxr_keyword">null</strong>);
-<a class="jxr_linenumber" name="L773" href="#L773">773</a> <strong class="jxr_keyword">var</strong> c = o.getClass();
-<a class="jxr_linenumber" name="L774" href="#L774">774</a> <strong class="jxr_keyword">var</strong> stringifier = stringifierMap.computeIfAbsent(c, <strong class="jxr_keyword">this</strong>::findStringifier);
-<a class="jxr_linenumber" name="L775" href="#L775">775</a> <strong class="jxr_keyword">if</strong> (stringifier.isEmpty()) {
-<a class="jxr_linenumber" name="L776" href="#L776">776</a> stringifier = of(canListify(o) ? (bc, o2) -> bc.stringify(bc.listify(o2)) : (bc, o2) -> safeToString(o2));
-<a class="jxr_linenumber" name="L777" href="#L777">777</a> stringifierMap.putIfAbsent(c, stringifier);
-<a class="jxr_linenumber" name="L778" href="#L778">778</a> }
-<a class="jxr_linenumber" name="L779" href="#L779">779</a> <strong class="jxr_keyword">var</strong> o2 = o;
-<a class="jxr_linenumber" name="L780" href="#L780">780</a> <strong class="jxr_keyword">return</strong> stringifier.map(x -> (<a name="Stringifier" href="../../../../../org/apache/juneau/junit/bct/Stringifier.html#Stringifier">Stringifier</a>)x).map(x -> x.apply(<strong class="jxr_keyword">this</strong>, o2)).map(Utils::safeToString).orElse(<strong class="jxr_keyword">null</strong>);
-<a class="jxr_linenumber" name="L781" href="#L781">781</a> }
-<a class="jxr_linenumber" name="L782" href="#L782">782</a>
-<a class="jxr_linenumber" name="L783" href="#L783">783</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L784" href="#L784">784</a> <em class="jxr_javadoccomment"> * Builder class for configuring BasicBeanConverter instances.</em>
-<a class="jxr_linenumber" name="L785" href="#L785">785</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L786" href="#L786">786</a> <em class="jxr_javadoccomment"> * <p>This builder provides a fluent interface for registering custom type handlers</em>
-<a class="jxr_linenumber" name="L787" href="#L787">787</a> <em class="jxr_javadoccomment"> * and configuring conversion settings. All registration methods support method chaining</em>
-<a class="jxr_linenumber" name="L788" href="#L788">788</a> <em class="jxr_javadoccomment"> * for convenient configuration.</p></em>
-<a class="jxr_linenumber" name="L789" href="#L789">789</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L790" href="#L790">790</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Handler Registration:</h5></em>
-<a class="jxr_linenumber" name="L791" href="#L791">791</a> <em class="jxr_javadoccomment"> * <ul></em>
-<a class="jxr_linenumber" name="L792" href="#L792">792</a> <em class="jxr_javadoccomment"> * <li><b>Stringifiers:</b> Custom string conversion logic for specific types</li></em>
-<a class="jxr_linenumber" name="L793" href="#L793">793</a> <em class="jxr_javadoccomment"> * <li><b>Listifiers:</b> Custom list conversion logic for collection-like types</li></em>
-<a class="jxr_linenumber" name="L794" href="#L794">794</a> <em class="jxr_javadoccomment"> * <li><b>Swappers:</b> Pre-processing transformation logic for wrapper types</li></em>
-<a class="jxr_linenumber" name="L795" href="#L795">795</a> <em class="jxr_javadoccomment"> * </ul></em>
-<a class="jxr_linenumber" name="L796" href="#L796">796</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L797" href="#L797">797</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Registration Order:</h5></em>
-<a class="jxr_linenumber" name="L798" href="#L798">798</a> <em class="jxr_javadoccomment"> * <p>Handlers are checked in reverse registration order (last registered wins).</em>
-<a class="jxr_linenumber" name="L799" href="#L799">799</a> <em class="jxr_javadoccomment"> * This allows overriding default handlers by registering more specific ones later.</p></em>
-<a class="jxr_linenumber" name="L800" href="#L800">800</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L801" href="#L801">801</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Inheritance Support:</h5></em>
-<a class="jxr_linenumber" name="L802" href="#L802">802</a> <em class="jxr_javadoccomment"> * <p>All handlers support class inheritance and interface implementation.</em>
-<a class="jxr_linenumber" name="L803" href="#L803">803</a> <em class="jxr_javadoccomment"> * When looking up a handler, the system checks:</p></em>
-<a class="jxr_linenumber" name="L804" href="#L804">804</a> <em class="jxr_javadoccomment"> * <ol></em>
-<a class="jxr_linenumber" name="L805" href="#L805">805</a> <em class="jxr_javadoccomment"> * <li>Exact class match</li></em>
-<a class="jxr_linenumber" name="L806" href="#L806">806</a> <em class="jxr_javadoccomment"> * <li>Interface matches (in order of interface declaration)</li></em>
-<a class="jxr_linenumber" name="L807" href="#L807">807</a> <em class="jxr_javadoccomment"> * <li>Superclass matches (walking up the inheritance hierarchy)</li></em>
-<a class="jxr_linenumber" name="L808" href="#L808">808</a> <em class="jxr_javadoccomment"> * </ol></em>
-<a class="jxr_linenumber" name="L809" href="#L809">809</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L810" href="#L810">810</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Usage Example:</h5></em>
-<a class="jxr_linenumber" name="L811" href="#L811">811</a> <em class="jxr_javadoccomment"> * <p class='bjava'></em>
-<a class="jxr_linenumber" name="L812" href="#L812">812</a> <em class="jxr_javadoccomment"> * <jk>var</jk> <jv>converter</jv> = BasicBeanConverter.<jsm>builder</jsm>()</em>
-<a class="jxr_linenumber" name="L813" href="#L813">813</a> <em class="jxr_javadoccomment"> * .defaultSettings()</em>
-<a class="jxr_linenumber" name="L814" href="#L814">814</a> <em class="jxr_javadoccomment"> * <jc>// Custom stringification for LocalDateTime</jc></em>
-<a class="jxr_linenumber" name="L815" href="#L815">815</a> <em class="jxr_javadoccomment"> * .addStringifier(LocalDateTime.<jk>class</jk>, (<jp>dt</jp>, <jp>conv</jp>) -></em>
-<a class="jxr_linenumber" name="L816" href="#L816">816</a> <em class="jxr_javadoccomment"> * <jp>dt</jp>.format(DateTimeFormatter.<jsf>ISO_LOCAL_DATE_TIME</jsf>))</em>
-<a class="jxr_linenumber" name="L817" href="#L817">817</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L818" href="#L818">818</a> <em class="jxr_javadoccomment"> * <jc>// Custom collection handling for custom type</jc></em>
-<a class="jxr_linenumber" name="L819" href="#L819">819</a> <em class="jxr_javadoccomment"> * .addListifier(MyIterable.<jk>class</jk>, (<jp>iter</jp>, <jp>conv</jp>) -></em>
-<a class="jxr_linenumber" name="L820" href="#L820">820</a> <em class="jxr_javadoccomment"> * <jp>iter</jp>.stream().collect(toList()))</em>
-<a class="jxr_linenumber" name="L821" href="#L821">821</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L822" href="#L822">822</a> <em class="jxr_javadoccomment"> * <jc>// Custom transformation for wrapper type</jc></em>
-<a class="jxr_linenumber" name="L823" href="#L823">823</a> <em class="jxr_javadoccomment"> * .addSwapper(LazyValue.<jk>class</jk>, (<jp>lazy</jp>, <jp>conv</jp>) -></em>
-<a class="jxr_linenumber" name="L824" href="#L824">824</a> <em class="jxr_javadoccomment"> * <jp>lazy</jp>.isComputed() ? <jp>lazy</jp>.get() : <jk>null</jk>)</em>
-<a class="jxr_linenumber" name="L825" href="#L825">825</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L826" href="#L826">826</a> <em class="jxr_javadoccomment"> * <jc>// Configure settings</jc></em>
-<a class="jxr_linenumber" name="L827" href="#L827">827</a> <em class="jxr_javadoccomment"> * .addSetting(<jsf>SETTING_nullValue</jsf>, <js>"&lt;null&gt;"</js>)</em>
-<a class="jxr_linenumber" name="L828" href="#L828">828</a> <em class="jxr_javadoccomment"> * .addSetting(<jsf>SETTING_fieldSeparator</jsf>, <js>" | "</js>)</em>
-<a class="jxr_linenumber" name="L829" href="#L829">829</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L830" href="#L830">830</a> <em class="jxr_javadoccomment"> * <jc>// Add default handlers for common types</jc></em>
-<a class="jxr_linenumber" name="L831" href="#L831">831</a> <em class="jxr_javadoccomment"> * .defaultSettings()</em>
-<a class="jxr_linenumber" name="L832" href="#L832">832</a> <em class="jxr_javadoccomment"> * .build();</em>
-<a class="jxr_linenumber" name="L833" href="#L833">833</a> <em class="jxr_javadoccomment"> * </p></em>
-<a class="jxr_linenumber" name="L834" href="#L834">834</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L835" href="#L835">835</a>
-<a class="jxr_linenumber" name="L836" href="#L836">836</a> @Override
-<a class="jxr_linenumber" name="L837" href="#L837">837</a> @SuppressWarnings(<span class="jxr_string">"unchecked"</span>)
-<a class="jxr_linenumber" name="L838" href="#L838">838</a> <strong class="jxr_keyword">public</strong> Object swap(Object o) {
-<a class="jxr_linenumber" name="L839" href="#L839">839</a> <strong class="jxr_keyword">if</strong> (o == <strong class="jxr_keyword">null</strong>)
-<a class="jxr_linenumber" name="L840" href="#L840">840</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="L841" href="#L841">841</a> <strong class="jxr_keyword">var</strong> c = o.getClass();
-<a class="jxr_linenumber" name="L842" href="#L842">842</a> <strong class="jxr_keyword">var</strong> swapper = swapperMap.computeIfAbsent(c, <strong class="jxr_keyword">this</strong>::findSwapper);
-<a class="jxr_linenumber" name="L843" href="#L843">843</a> <strong class="jxr_keyword">if</strong> (swapper.isPresent())
-<a class="jxr_linenumber" name="L844" href="#L844">844</a> <strong class="jxr_keyword">return</strong> swap(swapper.map(x -> (<a name="Swapper" href="../../../../../org/apache/juneau/junit/bct/Swapper.html#Swapper">Swapper</a>)x).map(x -> x.apply(<strong class="jxr_keyword">this</strong>, o)).orElse(<strong class="jxr_keyword">null</strong>));
-<a class="jxr_linenumber" name="L845" href="#L845">845</a> <strong class="jxr_keyword">return</strong> o;
-<a class="jxr_linenumber" name="L846" href="#L846">846</a> }
-<a class="jxr_linenumber" name="L847" href="#L847">847</a>
-<a class="jxr_linenumber" name="L848" href="#L848">848</a> <strong class="jxr_keyword">private</strong> Optional<Listifier<?>> findListifier(Class<?> c) {
-<a class="jxr_linenumber" name="L849" href="#L849">849</a> <strong class="jxr_keyword">if</strong> (c == <strong class="jxr_keyword">null</strong>)
-<a class="jxr_linenumber" name="L850" href="#L850">850</a> <strong class="jxr_keyword">return</strong> empty();
-<a class="jxr_linenumber" name="L851" href="#L851">851</a> <strong class="jxr_keyword">var</strong> l = listifiers.stream().filter(x -> x.forClass.isAssignableFrom(c)).findFirst().orElse(<strong class="jxr_keyword">null</strong>);
-<a class="jxr_linenumber" name="L852" href="#L852">852</a> <strong class="jxr_keyword">if</strong> (nn(l))
-<a class="jxr_linenumber" name="L853" href="#L853">853</a> <strong class="jxr_keyword">return</strong> of(l.function);
-<a class="jxr_linenumber" name="L854" href="#L854">854</a> <strong class="jxr_keyword">return</strong> findListifier(c.getSuperclass());
-<a class="jxr_linenumber" name="L855" href="#L855">855</a> }
-<a class="jxr_linenumber" name="L856" href="#L856">856</a>
-<a class="jxr_linenumber" name="L857" href="#L857">857</a> <strong class="jxr_keyword">private</strong> Optional<Stringifier<?>> findStringifier(Class<?> c) {
-<a class="jxr_linenumber" name="L858" href="#L858">858</a> <strong class="jxr_keyword">if</strong> (c == <strong class="jxr_keyword">null</strong>)
-<a class="jxr_linenumber" name="L859" href="#L859">859</a> <strong class="jxr_keyword">return</strong> empty();
-<a class="jxr_linenumber" name="L860" href="#L860">860</a> <strong class="jxr_keyword">var</strong> s = stringifiers.stream().filter(x -> x.forClass.isAssignableFrom(c)).findFirst().orElse(<strong class="jxr_keyword">null</strong>);
-<a class="jxr_linenumber" name="L861" href="#L861">861</a> <strong class="jxr_keyword">if</strong> (nn(s))
-<a class="jxr_linenumber" name="L862" href="#L862">862</a> <strong class="jxr_keyword">return</strong> of(s.function);
-<a class="jxr_linenumber" name="L863" href="#L863">863</a> <strong class="jxr_keyword">return</strong> findStringifier(c.getSuperclass());
-<a class="jxr_linenumber" name="L864" href="#L864">864</a> }
-<a class="jxr_linenumber" name="L865" href="#L865">865</a>
-<a class="jxr_linenumber" name="L866" href="#L866">866</a> <strong class="jxr_keyword">private</strong> Optional<Swapper<?>> findSwapper(Class<?> c) {
-<a class="jxr_linenumber" name="L867" href="#L867">867</a> <strong class="jxr_keyword">if</strong> (c == <strong class="jxr_keyword">null</strong>)
-<a class="jxr_linenumber" name="L868" href="#L868">868</a> <strong class="jxr_keyword">return</strong> empty();
-<a class="jxr_linenumber" name="L869" href="#L869">869</a> <strong class="jxr_keyword">var</strong> s = swappers.stream().filter(x -> x.forClass.isAssignableFrom(c)).findFirst().orElse(<strong class="jxr_keyword">null</strong>);
-<a class="jxr_linenumber" name="L870" href="#L870">870</a> <strong class="jxr_keyword">if</strong> (nn(s))
-<a class="jxr_linenumber" name="L871" href="#L871">871</a> <strong class="jxr_keyword">return</strong> of(s.function);
-<a class="jxr_linenumber" name="L872" href="#L872">872</a> <strong class="jxr_keyword">return</strong> findSwapper(c.getSuperclass());
-<a class="jxr_linenumber" name="L873" href="#L873">873</a> }
-<a class="jxr_linenumber" name="L874" href="#L874">874</a> }
+<a class="jxr_linenumber" name="L22" href="#L22">22</a> <strong class="jxr_keyword">import</strong> <strong class="jxr_keyword">static</strong> org.apache.juneau.common.utils.ThrowableUtils.*;
+<a class="jxr_linenumber" name="L23" href="#L23">23</a> <strong class="jxr_keyword">import</strong> <strong class="jxr_keyword">static</strong> org.apache.juneau.common.utils.Utils.*;
+<a class="jxr_linenumber" name="L24" href="#L24">24</a>
+<a class="jxr_linenumber" name="L25" href="#L25">25</a> <strong class="jxr_keyword">import</strong> java.io.*;
+<a class="jxr_linenumber" name="L26" href="#L26">26</a> <strong class="jxr_keyword">import</strong> java.lang.reflect.*;
+<a class="jxr_linenumber" name="L27" href="#L27">27</a> <strong class="jxr_keyword">import</strong> java.util.*;
+<a class="jxr_linenumber" name="L28" href="#L28">28</a> <strong class="jxr_keyword">import</strong> java.util.concurrent.*;
+<a class="jxr_linenumber" name="L29" href="#L29">29</a> <strong class="jxr_keyword">import</strong> java.util.function.*;
+<a class="jxr_linenumber" name="L30" href="#L30">30</a> <strong class="jxr_keyword">import</strong> java.util.stream.*;
+<a class="jxr_linenumber" name="L31" href="#L31">31</a>
+<a class="jxr_linenumber" name="L32" href="#L32">32</a> <strong class="jxr_keyword">import</strong> org.apache.juneau.common.utils.*;
+<a class="jxr_linenumber" name="L33" href="#L33">33</a>
+<a class="jxr_linenumber" name="L34" href="#L34">34</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L35" href="#L35">35</a> <em class="jxr_javadoccomment"> * Default implementation of {@link BeanConverter} for Bean-Centric Test (BCT) object conversion.</em>
+<a class="jxr_linenumber" name="L36" href="#L36">36</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L37" href="#L37">37</a> <em class="jxr_javadoccomment"> * <p>This class provides a comprehensive, extensible framework for converting Java objects to strings</em>
+<a class="jxr_linenumber" name="L38" href="#L38">38</a> <em class="jxr_javadoccomment"> * and lists, with sophisticated property access capabilities. It's the core engine behind BCT testing</em>
+<a class="jxr_linenumber" name="L39" href="#L39">39</a> <em class="jxr_javadoccomment"> * assertions, handling complex object introspection and value extraction with high performance through</em>
+<a class="jxr_linenumber" name="L40" href="#L40">40</a> <em class="jxr_javadoccomment"> * intelligent caching and optimized lookup strategies.</p></em>
+<a class="jxr_linenumber" name="L41" href="#L41">41</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L42" href="#L42">42</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Key Features:</h5></em>
+<a class="jxr_linenumber" name="L43" href="#L43">43</a> <em class="jxr_javadoccomment"> * <ul></em>
+<a class="jxr_linenumber" name="L44" href="#L44">44</a> <em class="jxr_javadoccomment"> * <li><b>Extensible Type Handlers:</b> Pluggable stringifiers, listifiers, and swappers for custom types</li></em>
+<a class="jxr_linenumber" name="L45" href="#L45">45</a> <em class="jxr_javadoccomment"> * <li><b>Performance Optimization:</b> ConcurrentHashMap caching for type-to-handler mappings</li></em>
+<a class="jxr_linenumber" name="L46" href="#L46">46</a> <em class="jxr_javadoccomment"> * <li><b>Comprehensive Defaults:</b> Built-in support for all common Java types and structures</li></em>
+<a class="jxr_linenumber" name="L47" href="#L47">47</a> <em class="jxr_javadoccomment"> * <li><b>Configurable Settings:</b> Customizable formatting, delimiters, and display options</li></em>
+<a class="jxr_linenumber" name="L48" href="#L48">48</a> <em class="jxr_javadoccomment"> * <li><b>Thread Safety:</b> Fully thread-safe implementation suitable for concurrent testing</li></em>
+<a class="jxr_linenumber" name="L49" href="#L49">49</a> <em class="jxr_javadoccomment"> * </ul></em>
+<a class="jxr_linenumber" name="L50" href="#L50">50</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L51" href="#L51">51</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Architecture Overview:</h5></em>
+<a class="jxr_linenumber" name="L52" href="#L52">52</a> <em class="jxr_javadoccomment"> * <p>The converter uses four types of pluggable handlers:</p></em>
+<a class="jxr_linenumber" name="L53" href="#L53">53</a> <em class="jxr_javadoccomment"> * <dl></em>
+<a class="jxr_linenumber" name="L54" href="#L54">54</a> <em class="jxr_javadoccomment"> * <dt><b>Stringifiers:</b></dt></em>
+<a class="jxr_linenumber" name="L55" href="#L55">55</a> <em class="jxr_javadoccomment"> * <dd>Convert objects to string representations with custom formatting rules</dd></em>
+<a class="jxr_linenumber" name="L56" href="#L56">56</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L57" href="#L57">57</a> <em class="jxr_javadoccomment"> * <dt><b>Listifiers:</b></dt></em>
+<a class="jxr_linenumber" name="L58" href="#L58">58</a> <em class="jxr_javadoccomment"> * <dd>Convert collection-like objects to List&lt;Object&gt; for uniform iteration</dd></em>
+<a class="jxr_linenumber" name="L59" href="#L59">59</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L60" href="#L60">60</a> <em class="jxr_javadoccomment"> * <dt><b>Swappers:</b></dt></em>
+<a class="jxr_linenumber" name="L61" href="#L61">61</a> <em class="jxr_javadoccomment"> * <dd>Pre-process objects before conversion (unwrap Optional, call Supplier, etc.)</dd></em>
+<a class="jxr_linenumber" name="L62" href="#L62">62</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L63" href="#L63">63</a> <em class="jxr_javadoccomment"> * <dt><b>PropertyExtractors:</b></dt></em>
+<a class="jxr_linenumber" name="L64" href="#L64">64</a> <em class="jxr_javadoccomment"> * <dd>Define custom property access strategies for nested field navigation (e.g., <js>"user.address.city"</js>)</dd></em>
+<a class="jxr_linenumber" name="L65" href="#L65">65</a> <em class="jxr_javadoccomment"> * </dl></em>
+<a class="jxr_linenumber" name="L66" href="#L66">66</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L67" href="#L67">67</a> <em class="jxr_javadoccomment"> * <p>PropertyExtractors use a chain-of-responsibility pattern, where each extractor in the chain</em>
+<a class="jxr_linenumber" name="L68" href="#L68">68</a> <em class="jxr_javadoccomment"> * is tried until one can handle the property access. The framework includes built-in extractors for:</p></em>
+<a class="jxr_linenumber" name="L69" href="#L69">69</a> <em class="jxr_javadoccomment"> * <ul></em>
+<a class="jxr_linenumber" name="L70" href="#L70">70</a> <em class="jxr_javadoccomment"> * <li><b>JavaBean properties:</b> Standard getter methods and public fields</li></em>
+<a class="jxr_linenumber" name="L71" href="#L71">71</a> <em class="jxr_javadoccomment"> * <li><b>Collection/Array access:</b> Numeric indices and size/length properties</li></em>
+<a class="jxr_linenumber" name="L72" href="#L72">72</a> <em class="jxr_javadoccomment"> * <li><b>Map access:</b> Key-based property retrieval and size property</li></em>
+<a class="jxr_linenumber" name="L73" href="#L73">73</a> <em class="jxr_javadoccomment"> * </ul></em>
+<a class="jxr_linenumber" name="L74" href="#L74">74</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L75" href="#L75">75</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Default Type Support:</h5></em>
+<a class="jxr_linenumber" name="L76" href="#L76">76</a> <em class="jxr_javadoccomment"> * <p>Out-of-the-box stringification support includes:</p></em>
+<a class="jxr_linenumber" name="L77" href="#L77">77</a> <em class="jxr_javadoccomment"> * <ul></em>
+<a class="jxr_linenumber" name="L78" href="#L78">78</a> <em class="jxr_javadoccomment"> * <li><b>Collections:</b> List, Set, Queue → <js>"[item1,item2,item3]"</js> format</li></em>
+<a class="jxr_linenumber" name="L79" href="#L79">79</a> <em class="jxr_javadoccomment"> * <li><b>Maps:</b> Map, Properties → <js>"{key1=value1,key2=value2}"</js> format</li></em>
+<a class="jxr_linenumber" name="L80" href="#L80">80</a> <em class="jxr_javadoccomment"> * <li><b>Map Entries:</b> Map.Entry → <js>"key=value"</js> format</li></em>
+<a class="jxr_linenumber" name="L81" href="#L81">81</a> <em class="jxr_javadoccomment"> * <li><b>Arrays:</b> All array types → <js>"[element1,element2]"</js> format</li></em>
+<a class="jxr_linenumber" name="L82" href="#L82">82</a> <em class="jxr_javadoccomment"> * <li><b>Dates:</b> Date, Calendar → ISO-8601 format</li></em>
+<a class="jxr_linenumber" name="L83" href="#L83">83</a> <em class="jxr_javadoccomment"> * <li><b>Files/Streams:</b> File, InputStream, Reader → content as hex or text</li></em>
+<a class="jxr_linenumber" name="L84" href="#L84">84</a> <em class="jxr_javadoccomment"> * <li><b>Reflection:</b> Class, Method, Constructor → human-readable signatures</li></em>
+<a class="jxr_linenumber" name="L85" href="#L85">85</a> <em class="jxr_javadoccomment"> * <li><b>Enums:</b> Enum values → name() format</li></em>
+<a class="jxr_linenumber" name="L86" href="#L86">86</a> <em class="jxr_javadoccomment"> * </ul></em>
+<a class="jxr_linenumber" name="L87" href="#L87">87</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L88" href="#L88">88</a> <em class="jxr_javadoccomment"> * <p>Default listification support includes:</p></em>
+<a class="jxr_linenumber" name="L89" href="#L89">89</a> <em class="jxr_javadoccomment"> * <ul></em>
+<a class="jxr_linenumber" name="L90" href="#L90">90</a> <em class="jxr_javadoccomment"> * <li><b>Collection types:</b> List, Set, Queue, and all subtypes</li></em>
+<a class="jxr_linenumber" name="L91" href="#L91">91</a> <em class="jxr_javadoccomment"> * <li><b>Iterable objects:</b> Any Iterable implementation</li></em>
+<a class="jxr_linenumber" name="L92" href="#L92">92</a> <em class="jxr_javadoccomment"> * <li><b>Iterators:</b> Iterator and Enumeration (consumed to list)</li></em>
+<a class="jxr_linenumber" name="L93" href="#L93">93</a> <em class="jxr_javadoccomment"> * <li><b>Streams:</b> Stream objects (terminated to list)</li></em>
+<a class="jxr_linenumber" name="L94" href="#L94">94</a> <em class="jxr_javadoccomment"> * <li><b>Optional:</b> Empty list or single-element list</li></em>
+<a class="jxr_linenumber" name="L95" href="#L95">95</a> <em class="jxr_javadoccomment"> * <li><b>Maps:</b> Converted to list of Map.Entry objects</li></em>
+<a class="jxr_linenumber" name="L96" href="#L96">96</a> <em class="jxr_javadoccomment"> * </ul></em>
+<a class="jxr_linenumber" name="L97" href="#L97">97</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L98" href="#L98">98</a> <em class="jxr_javadoccomment"> * <p>Default swapping support includes:</p></em>
+<a class="jxr_linenumber" name="L99" href="#L99">99</a> <em class="jxr_javadoccomment"> * <ul></em>
+<a class="jxr_linenumber" name="L100" href="#L100">100</a> <em class="jxr_javadoccomment"> * <li><b>Optional:</b> Unwrapped to contained value or <jk>null</jk></li></em>
+<a class="jxr_linenumber" name="L101" href="#L101">101</a> <em class="jxr_javadoccomment"> * <li><b>Supplier:</b> Called to get supplied value</li></em>
+<a class="jxr_linenumber" name="L102" href="#L102">102</a> <em class="jxr_javadoccomment"> * <li><b>Future:</b> Extracts completed result or returns <js>"&lt;pending&gt;"</js> for incomplete futures (via {@link Swappers#futureSwapper()})</li></em>
+<a class="jxr_linenumber" name="L103" href="#L103">103</a> <em class="jxr_javadoccomment"> * </ul></em>
+<a class="jxr_linenumber" name="L104" href="#L104">104</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L105" href="#L105">105</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Configuration Settings:</h5></em>
+<a class="jxr_linenumber" name="L106" href="#L106">106</a> <em class="jxr_javadoccomment"> * <p>The converter supports extensive customization via settings:</p></em>
+<a class="jxr_linenumber" name="L107" href="#L107">107</a> <em class="jxr_javadoccomment"> * <dl></em>
+<a class="jxr_linenumber" name="L108" href="#L108">108</a> <em class="jxr_javadoccomment"> * <dt><code>nullValue</code></dt></em>
+<a class="jxr_linenumber" name="L109" href="#L109">109</a> <em class="jxr_javadoccomment"> * <dd>String representation for null values (default: <js>"&lt;null&gt;"</js>)</dd></em>
+<a class="jxr_linenumber" name="L110" href="#L110">110</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L111" href="#L111">111</a> <em class="jxr_javadoccomment"> * <dt><code>selfValue</code></dt></em>
+<a class="jxr_linenumber" name="L112" href="#L112">112</a> <em class="jxr_javadoccomment"> * <dd>Special property name that returns the object itself (default: <js>"&lt;self&gt;"</js>)</dd></em>
+<a class="jxr_linenumber" name="L113" href="#L113">113</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L114" href="#L114">114</a> <em class="jxr_javadoccomment"> * <dt><code>emptyValue</code></dt></em>
+<a class="jxr_linenumber" name="L115" href="#L115">115</a> <em class="jxr_javadoccomment"> * <dd>String representation for empty collections (default: <js>"&lt;empty&gt;"</js>)</dd></em>
+<a class="jxr_linenumber" name="L116" href="#L116">116</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L117" href="#L117">117</a> <em class="jxr_javadoccomment"> * <dt><code>fieldSeparator</code></dt></em>
+<a class="jxr_linenumber" name="L118" href="#L118">118</a> <em class="jxr_javadoccomment"> * <dd>Delimiter between collection elements and map entries (default: <js>","</js>)</dd></em>
+<a class="jxr_linenumber" name="L119" href="#L119">119</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L120" href="#L120">120</a> <em class="jxr_javadoccomment"> * <dt><code>collectionPrefix/Suffix</code></dt></em>
+<a class="jxr_linenumber" name="L121" href="#L121">121</a> <em class="jxr_javadoccomment"> * <dd>Brackets around collection content (default: <js>"["</js> and <js>"]"</js>)</dd></em>
+<a class="jxr_linenumber" name="L122" href="#L122">122</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L123" href="#L123">123</a> <em class="jxr_javadoccomment"> * <dt><code>mapPrefix/Suffix</code></dt></em>
+<a class="jxr_linenumber" name="L124" href="#L124">124</a> <em class="jxr_javadoccomment"> * <dd>Brackets around map content (default: <js>"{"</js> and <js>"}"</js>)</dd></em>
+<a class="jxr_linenumber" name="L125" href="#L125">125</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L126" href="#L126">126</a> <em class="jxr_javadoccomment"> * <dt><code>mapEntrySeparator</code></dt></em>
+<a class="jxr_linenumber" name="L127" href="#L127">127</a> <em class="jxr_javadoccomment"> * <dd>Separator between map keys and values (default: <js>"="</js>)</dd></em>
+<a class="jxr_linenumber" name="L128" href="#L128">128</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L129" href="#L129">129</a> <em class="jxr_javadoccomment"> * <dt><code>calendarFormat</code></dt></em>
+<a class="jxr_linenumber" name="L130" href="#L130">130</a> <em class="jxr_javadoccomment"> * <dd>DateTimeFormatter for calendar objects (default: <jsf>ISO_INSTANT</jsf>)</dd></em>
+<a class="jxr_linenumber" name="L131" href="#L131">131</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L132" href="#L132">132</a> <em class="jxr_javadoccomment"> * <dt><code>classNameFormat</code></dt></em>
+<a class="jxr_linenumber" name="L133" href="#L133">133</a> <em class="jxr_javadoccomment"> * <dd>Format for class names: <js>"simple"</js>, <js>"canonical"</js>, or <js>"full"</js> (default: <js>"simple"</js>)</dd></em>
+<a class="jxr_linenumber" name="L134" href="#L134">134</a> <em class="jxr_javadoccomment"> * </dl></em>
+<a class="jxr_linenumber" name="L135" href="#L135">135</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L136" href="#L136">136</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Usage Examples:</h5></em>
+<a class="jxr_linenumber" name="L137" href="#L137">137</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L138" href="#L138">138</a> <em class="jxr_javadoccomment"> * <p><b>Basic Usage with Defaults:</b></p></em>
+<a class="jxr_linenumber" name="L139" href="#L139">139</a> <em class="jxr_javadoccomment"> * <p class='bjava'></em>
+<a class="jxr_linenumber" name="L140" href="#L140">140</a> <em class="jxr_javadoccomment"> * <jc>// Use default converter</jc></em>
+<a class="jxr_linenumber" name="L141" href="#L141">141</a> <em class="jxr_javadoccomment"> * <jk>var</jk> <jv>converter</jv> = BasicBeanConverter.<jsf>DEFAULT</jsf>;</em>
+<a class="jxr_linenumber" name="L142" href="#L142">142</a> <em class="jxr_javadoccomment"> * <jk>var</jk> <jv>result</jv> = <jv>converter</jv>.stringify(<jv>myObject</jv>);</em>
+<a class="jxr_linenumber" name="L143" href="#L143">143</a> <em class="jxr_javadoccomment"> * </p></em>
+<a class="jxr_linenumber" name="L144" href="#L144">144</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L145" href="#L145">145</a> <em class="jxr_javadoccomment"> * <p><b>Custom Configuration:</b></p></em>
+<a class="jxr_linenumber" name="L146" href="#L146">146</a> <em class="jxr_javadoccomment"> * <p class='bjava'></em>
+<a class="jxr_linenumber" name="L147" href="#L147">147</a> <em class="jxr_javadoccomment"> * <jc>// Build custom converter</jc></em>
+<a class="jxr_linenumber" name="L148" href="#L148">148</a> <em class="jxr_javadoccomment"> * <jk>var</jk> <jv>converter</jv> = BasicBeanConverter.<jsm>builder</jsm>()</em>
+<a class="jxr_linenumber" name="L149" href="#L149">149</a> <em class="jxr_javadoccomment"> * .defaultSettings()</em>
+<a class="jxr_linenumber" name="L150" href="#L150">150</a> <em class="jxr_javadoccomment"> * .addSetting(<jsf>SETTING_nullValue</jsf>, <js>"&lt;null&gt;"</js>)</em>
+<a class="jxr_linenumber" name="L151" href="#L151">151</a> <em class="jxr_javadoccomment"> * .addSetting(<jsf>SETTING_fieldSeparator</jsf>, <js>" | "</js>)</em>
+<a class="jxr_linenumber" name="L152" href="#L152">152</a> <em class="jxr_javadoccomment"> * .addStringifier(MyClass.<jk>class</jk>, (<jp>obj</jp>, <jp>conv</jp>) -> <js>"MyClass["</js> + <jp>obj</jp>.getName() + <js>"]"</js>)</em>
+<a class="jxr_linenumber" name="L153" href="#L153">153</a> <em class="jxr_javadoccomment"> * .addListifier(MyIterable.<jk>class</jk>, (<jp>obj</jp>, <jp>conv</jp>) -> <jp>obj</jp>.toList())</em>
+<a class="jxr_linenumber" name="L154" href="#L154">154</a> <em class="jxr_javadoccomment"> * .addSwapper(MyWrapper.<jk>class</jk>, (<jp>obj</jp>, <jp>conv</jp>) -> <jp>obj</jp>.getWrapped())</em>
+<a class="jxr_linenumber" name="L155" href="#L155">155</a> <em class="jxr_javadoccomment"> * .build();</em>
+<a class="jxr_linenumber" name="L156" href="#L156">156</a> <em class="jxr_javadoccomment"> * </p></em>
+<a class="jxr_linenumber" name="L157" href="#L157">157</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L158" href="#L158">158</a> <em class="jxr_javadoccomment"> * <p><b>Complex Property Access:</b></p></em>
+<a class="jxr_linenumber" name="L159" href="#L159">159</a> <em class="jxr_javadoccomment"> * <p class='bjava'></em>
+<a class="jxr_linenumber" name="L160" href="#L160">160</a> <em class="jxr_javadoccomment"> * <jc>// Extract nested properties</jc></em>
+<a class="jxr_linenumber" name="L161" href="#L161">161</a> <em class="jxr_javadoccomment"> * <jk>var</jk> <jv>name</jv> = <jv>converter</jv>.getEntry(<jv>user</jv>, <js>"name"</js>);</em>
+<a class="jxr_linenumber" name="L162" href="#L162">162</a> <em class="jxr_javadoccomment"> * <jk>var</jk> <jv>city</jv> = <jv>converter</jv>.getEntry(<jv>user</jv>, <js>"address.city"</js>);</em>
+<a class="jxr_linenumber" name="L163" href="#L163">163</a> <em class="jxr_javadoccomment"> * <jk>var</jk> <jv>firstOrder</jv> = <jv>converter</jv>.getEntry(<jv>user</jv>, <js>"orders.0.id"</js>);</em>
+<a class="jxr_linenumber" name="L164" href="#L164">164</a> <em class="jxr_javadoccomment"> * <jk>var</jk> <jv>orderCount</jv> = <jv>converter</jv>.getEntry(<jv>user</jv>, <js>"orders.length"</js>);</em>
+<a class="jxr_linenumber" name="L165" href="#L165">165</a> <em class="jxr_javadoccomment"> * </p></em>
+<a class="jxr_linenumber" name="L166" href="#L166">166</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L167" href="#L167">167</a> <em class="jxr_javadoccomment"> * <p><b>Special Property Values:</b></p></em>
+<a class="jxr_linenumber" name="L168" href="#L168">168</a> <em class="jxr_javadoccomment"> * <p class='bjava'></em>
+<a class="jxr_linenumber" name="L169" href="#L169">169</a> <em class="jxr_javadoccomment"> * <jc>// Use special property names</jc></em>
+<a class="jxr_linenumber" name="L170" href="#L170">170</a> <em class="jxr_javadoccomment"> * <jk>var</jk> <jv>userObj</jv> = <jv>converter</jv>.getEntry(<jv>user</jv>, <js>"&lt;self&gt;"</js>); <jc>// Returns the user object itself</jc></em>
+<a class="jxr_linenumber" name="L171" href="#L171">171</a> <em class="jxr_javadoccomment"> * <jk>var</jk> <jv>nullValue</jv> = <jv>converter</jv>.getEntry(<jv>user</jv>, <js>"&lt;null&gt;"</js>); <jc>// Returns null</jc></em>
+<a class="jxr_linenumber" name="L172" href="#L172">172</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L173" href="#L173">173</a> <em class="jxr_javadoccomment"> * <jc>// Custom self value</jc></em>
+<a class="jxr_linenumber" name="L174" href="#L174">174</a> <em class="jxr_javadoccomment"> * <jk>var</jk> <jv>customConverter</jv> = BasicBeanConverter.<jsm>builder</jsm>()</em>
+<a class="jxr_linenumber" name="L175" href="#L175">175</a> <em class="jxr_javadoccomment"> * .defaultSettings()</em>
+<a class="jxr_linenumber" name="L176" href="#L176">176</a> <em class="jxr_javadoccomment"> * .addSetting(<jsf>SETTING_selfValue</jsf>, <js>"this"</js>)</em>
+<a class="jxr_linenumber" name="L177" href="#L177">177</a> <em class="jxr_javadoccomment"> * .build();</em>
+<a class="jxr_linenumber" name="L178" href="#L178">178</a> <em class="jxr_javadoccomment"> * <jk>var</jk> <jv>selfRef</jv> = <jv>customConverter</jv>.getEntry(<jv>user</jv>, <js>"this"</js>); <jc>// Returns user object</jc></em>
+<a class="jxr_linenumber" name="L179" href="#L179">179</a> <em class="jxr_javadoccomment"> * </p></em>
+<a class="jxr_linenumber" name="L180" href="#L180">180</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L181" href="#L181">181</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Performance Characteristics:</h5></em>
+<a class="jxr_linenumber" name="L182" href="#L182">182</a> <em class="jxr_javadoccomment"> * <ul></em>
+<a class="jxr_linenumber" name="L183" href="#L183">183</a> <em class="jxr_javadoccomment"> * <li><b>Handler Lookup:</b> O(1) average case via ConcurrentHashMap caching</li></em>
+<a class="jxr_linenumber" name="L184" href="#L184">184</a> <em class="jxr_javadoccomment"> * <li><b>Type Registration:</b> Handlers checked in reverse registration order (last wins)</li></em>
+<a class="jxr_linenumber" name="L185" href="#L185">185</a> <em class="jxr_javadoccomment"> * <li><b>Inheritance Support:</b> Handlers support class inheritance and interface implementation</li></em>
+<a class="jxr_linenumber" name="L186" href="#L186">186</a> <em class="jxr_javadoccomment"> * <li><b>Thread Safety:</b> Full concurrency support with no locking overhead after initialization</li></em>
+<a class="jxr_linenumber" name="L187" href="#L187">187</a> <em class="jxr_javadoccomment"> * <li><b>Memory Efficiency:</b> Minimal object allocation during normal operation</li></em>
+<a class="jxr_linenumber" name="L188" href="#L188">188</a> <em class="jxr_javadoccomment"> * </ul></em>
+<a class="jxr_linenumber" name="L189" href="#L189">189</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L190" href="#L190">190</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Extension Patterns:</h5></em>
+<a class="jxr_linenumber" name="L191" href="#L191">191</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L192" href="#L192">192</a> <em class="jxr_javadoccomment"> * <p><b>Custom Type Stringification:</b></p></em>
+<a class="jxr_linenumber" name="L193" href="#L193">193</a> <em class="jxr_javadoccomment"> * <p class='bjava'></em>
+<a class="jxr_linenumber" name="L194" href="#L194">194</a> <em class="jxr_javadoccomment"> * <jv>builder</jv>.addStringifier(LocalDateTime.<jk>class</jk>, (<jp>dt</jp>, <jp>conv</jp>) -></em>
+<a class="jxr_linenumber" name="L195" href="#L195">195</a> <em class="jxr_javadoccomment"> * <jp>dt</jp>.format(DateTimeFormatter.<jsf>ISO_LOCAL_DATE_TIME</jsf>));</em>
+<a class="jxr_linenumber" name="L196" href="#L196">196</a> <em class="jxr_javadoccomment"> * </p></em>
+<a class="jxr_linenumber" name="L197" href="#L197">197</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L198" href="#L198">198</a> <em class="jxr_javadoccomment"> * <p><b>Custom Collection Handling:</b></p></em>
+<a class="jxr_linenumber" name="L199" href="#L199">199</a> <em class="jxr_javadoccomment"> * <p class='bjava'></em>
+<a class="jxr_linenumber" name="L200" href="#L200">200</a> <em class="jxr_javadoccomment"> * <jv>builder</jv>.addListifier(MyCustomCollection.<jk>class</jk>, (<jp>coll</jp>, <jp>conv</jp>) -></em>
+<a class="jxr_linenumber" name="L201" href="#L201">201</a> <em class="jxr_javadoccomment"> * <jp>coll</jp>.stream().map(<jp>conv</jp>::swap).toList());</em>
+<a class="jxr_linenumber" name="L202" href="#L202">202</a> <em class="jxr_javadoccomment"> * </p></em>
+<a class="jxr_linenumber" name="L203" href="#L203">203</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L204" href="#L204">204</a> <em class="jxr_javadoccomment"> * <p><b>Custom Object Transformation:</b></p></em>
+<a class="jxr_linenumber" name="L205" href="#L205">205</a> <em class="jxr_javadoccomment"> * <p class='bjava'></em>
+<a class="jxr_linenumber" name="L206" href="#L206">206</a> <em class="jxr_javadoccomment"> * <jv>builder</jv>.addSwapper(LazyValue.<jk>class</jk>, (<jp>lazy</jp>, <jp>conv</jp>) -></em>
+<a class="jxr_linenumber" name="L207" href="#L207">207</a> <em class="jxr_javadoccomment"> * <jp>lazy</jp>.isEvaluated() ? <jp>lazy</jp>.getValue() : "&lt;unevaluated&gt;");</em>
+<a class="jxr_linenumber" name="L208" href="#L208">208</a> <em class="jxr_javadoccomment"> * </p></em>
+<a class="jxr_linenumber" name="L209" href="#L209">209</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L210" href="#L210">210</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Integration with BCT:</h5></em>
+<a class="jxr_linenumber" name="L211" href="#L211">211</a> <em class="jxr_javadoccomment"> * <p>This class is used internally by all BCT assertion methods in {@link BctAssertions}:</p></em>
+<a class="jxr_linenumber" name="L212" href="#L212">212</a> <em class="jxr_javadoccomment"> * <ul></em>
+<a class="jxr_linenumber" name="L213" href="#L213">213</a> <em class="jxr_javadoccomment"> * <li>{@link BctAssertions#assertBean(Object, String, String)} - Uses getEntry() for property access</li></em>
+<a class="jxr_linenumber" name="L214" href="#L214">214</a> <em class="jxr_javadoccomment"> * <li>{@link BctAssertions#assertList(List, Object...)} - Uses stringify() for element comparison</li></em>
+<a class="jxr_linenumber" name="L215" href="#L215">215</a> <em class="jxr_javadoccomment"> * <li>{@link BctAssertions#assertBeans(Collection, String, String...)} - Uses both getEntry() and stringify()</li></em>
+<a class="jxr_linenumber" name="L216" href="#L216">216</a> <em class="jxr_javadoccomment"> * </ul></em>
+<a class="jxr_linenumber" name="L217" href="#L217">217</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L218" href="#L218">218</a> <em class="jxr_javadoccomment"> * @see BeanConverter</em>
+<a class="jxr_linenumber" name="L219" href="#L219">219</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L220" href="#L220">220</a> @SuppressWarnings(<span class="jxr_string">"rawtypes"</span>)
+<a class="jxr_linenumber" name="L221" href="#L221">221</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a name="BasicBeanConverter" href="../../../../../org/apache/juneau/junit/bct/BasicBeanConverter.html#BasicBeanConverter">BasicBeanConverter</a> <strong class="jxr_keyword">implements</strong> <a name="BeanConverter" href="../../../../../org/apache/juneau/junit/bct/BeanConverter.html#BeanConverter">BeanConverter</a> {
+<a class="jxr_linenumber" name="L222" href="#L222">222</a>
+<a class="jxr_linenumber" name="L223" href="#L223">223</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L224" href="#L224">224</a> <em class="jxr_javadoccomment"> * Builder for creating customized BasicBeanConverter instances.</em>
+<a class="jxr_linenumber" name="L225" href="#L225">225</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L226" href="#L226">226</a> <em class="jxr_javadoccomment"> * <p>This builder provides a fluent API for configuring custom type handlers, settings,</em>
+<a class="jxr_linenumber" name="L227" href="#L227">227</a> <em class="jxr_javadoccomment"> * and property extraction logic. The builder supports registration of four main types</em>
+<a class="jxr_linenumber" name="L228" href="#L228">228</a> <em class="jxr_javadoccomment"> * of customizations:</p></em>
+<a class="jxr_linenumber" name="L229" href="#L229">229</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L230" href="#L230">230</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Type Handlers:</h5></em>
+<a class="jxr_linenumber" name="L231" href="#L231">231</a> <em class="jxr_javadoccomment"> * <ul></em>
+<a class="jxr_linenumber" name="L232" href="#L232">232</a> <em class="jxr_javadoccomment"> * <li><b>{@link #addStringifier(Class, Stringifier)}</b> - Custom string conversion logic</li></em>
+<a class="jxr_linenumber" name="L233" href="#L233">233</a> <em class="jxr_javadoccomment"> * <li><b>{@link #addListifier(Class, Listifier)}</b> - Custom list conversion for collection-like objects</li></em>
+<a class="jxr_linenumber" name="L234" href="#L234">234</a> <em class="jxr_javadoccomment"> * <li><b>{@link #addSwapper(Class, Swapper)}</b> - Pre-processing and object transformation</li></em>
+<a class="jxr_linenumber" name="L235" href="#L235">235</a> <em class="jxr_javadoccomment"> * <li><b>{@link #addPropertyExtractor(PropertyExtractor)}</b> - Custom property access strategies</li></em>
+<a class="jxr_linenumber" name="L236" href="#L236">236</a> <em class="jxr_javadoccomment"> * </ul></em>
+<a class="jxr_linenumber" name="L237" href="#L237">237</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L238" href="#L238">238</a> <em class="jxr_javadoccomment"> * <h5 class='section'>PropertyExtractors:</h5></em>
+<a class="jxr_linenumber" name="L239" href="#L239">239</a> <em class="jxr_javadoccomment"> * <p>Property extractors define how the converter accesses object properties during nested</em>
+<a class="jxr_linenumber" name="L240" href="#L240">240</a> <em class="jxr_javadoccomment"> * field access (e.g., {@code "user.address.city"}). The converter uses a chain-of-responsibility</em>
+<a class="jxr_linenumber" name="L241" href="#L241">241</a> <em class="jxr_javadoccomment"> * pattern, trying each registered extractor until one succeeds:</p></em>
+<a class="jxr_linenumber" name="L242" href="#L242">242</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L243" href="#L243">243</a> <em class="jxr_javadoccomment"> * <ul></em>
+<a class="jxr_linenumber" name="L244" href="#L244">244</a> <em class="jxr_javadoccomment"> * <li><b>{@link PropertyExtractors.ObjectPropertyExtractor}</b> - JavaBean-style properties via reflection</li></em>
+<a class="jxr_linenumber" name="L245" href="#L245">245</a> <em class="jxr_javadoccomment"> * <li><b>{@link PropertyExtractors.ListPropertyExtractor}</b> - Numeric indices and size/length for arrays/collections</li></em>
+<a class="jxr_linenumber" name="L246" href="#L246">246</a> <em class="jxr_javadoccomment"> * <li><b>{@link PropertyExtractors.MapPropertyExtractor}</b> - Key-based access for Map objects</li></em>
+<a class="jxr_linenumber" name="L247" href="#L247">247</a> <em class="jxr_javadoccomment"> * </ul></em>
+<a class="jxr_linenumber" name="L248" href="#L248">248</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L249" href="#L249">249</a> <em class="jxr_javadoccomment"> * <p>Custom extractors can be added to handle specialized property access patterns:</p></em>
+<a class="jxr_linenumber" name="L250" href="#L250">250</a> <em class="jxr_javadoccomment"> * <p class='bjava'></em>
+<a class="jxr_linenumber" name="L251" href="#L251">251</a> <em class="jxr_javadoccomment"> * <jk>var</jk> <jv>converter</jv> = BasicBeanConverter.<jsm>builder</jsm>()</em>
+<a class="jxr_linenumber" name="L252" href="#L252">252</a> <em class="jxr_javadoccomment"> * .defaultSettings()</em>
+<a class="jxr_linenumber" name="L253" href="#L253">253</a> <em class="jxr_javadoccomment"> * .addPropertyExtractor(<jk>new</jk> MyCustomExtractor())</em>
+<a class="jxr_linenumber" name="L254" href="#L254">254</a> <em class="jxr_javadoccomment"> * .addPropertyExtractor((<jp>obj</jp>, <jp>prop</jp>) -&gt; {</em>
+<a class="jxr_linenumber" name="L255" href="#L255">255</a> <em class="jxr_javadoccomment"> * <jk>if</jk> (<jp>obj</jp> <jk>instanceof</jk> MySpecialType <jv>special</jv>) {</em>
+<a class="jxr_linenumber" name="L256" href="#L256">256</a> <em class="jxr_javadoccomment"> * <jk>return</jk> <jv>special</jv>.getCustomProperty(<jp>prop</jp>);</em>
+<a class="jxr_linenumber" name="L257" href="#L257">257</a> <em class="jxr_javadoccomment"> * }</em>
+<a class="jxr_linenumber" name="L258" href="#L258">258</a> <em class="jxr_javadoccomment"> * <jk>return</jk> <jk>null</jk>; <jc>// Try next extractor</jc></em>
+<a class="jxr_linenumber" name="L259" href="#L259">259</a> <em class="jxr_javadoccomment"> * })</em>
+<a class="jxr_linenumber" name="L260" href="#L260">260</a> <em class="jxr_javadoccomment"> * .build();</em>
+<a class="jxr_linenumber" name="L261" href="#L261">261</a> <em class="jxr_javadoccomment"> * </p></em>
+<a class="jxr_linenumber" name="L262" href="#L262">262</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L263" href="#L263">263</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Default Configuration:</h5></em>
+<a class="jxr_linenumber" name="L264" href="#L264">264</a> <em class="jxr_javadoccomment"> * <p>The {@link #defaultSettings()} method pre-registers comprehensive type handlers</em>
+<a class="jxr_linenumber" name="L265" href="#L265">265</a> <em class="jxr_javadoccomment"> * and property extractors for common Java types, providing out-of-the-box functionality</em>
+<a class="jxr_linenumber" name="L266" href="#L266">266</a> <em class="jxr_javadoccomment"> * for most use cases while still allowing full customization.</p></em>
+<a class="jxr_linenumber" name="L267" href="#L267">267</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L268" href="#L268">268</a> <em class="jxr_javadoccomment"> * @see PropertyExtractors</em>
+<a class="jxr_linenumber" name="L269" href="#L269">269</a> <em class="jxr_javadoccomment"> * @see PropertyExtractor</em>
+<a class="jxr_linenumber" name="L270" href="#L270">270</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L271" href="#L271">271</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">class</strong> Builder {
+<a class="jxr_linenumber" name="L272" href="#L272">272</a> <strong class="jxr_keyword">private</strong> Map<String,Object> settings = <strong class="jxr_keyword">new</strong> HashMap<>();
+<a class="jxr_linenumber" name="L273" href="#L273">273</a> <strong class="jxr_keyword">private</strong> List<StringifierEntry<?>> stringifiers = <strong class="jxr_keyword">new</strong> ArrayList<>();
+<a class="jxr_linenumber" name="L274" href="#L274">274</a> <strong class="jxr_keyword">private</strong> List<ListifierEntry<?>> listifiers = <strong class="jxr_keyword">new</strong> ArrayList<>();
+<a class="jxr_linenumber" name="L275" href="#L275">275</a> <strong class="jxr_keyword">private</strong> List<SwapperEntry<?>> swappers = <strong class="jxr_keyword">new</strong> ArrayList<>();
+<a class="jxr_linenumber" name="L276" href="#L276">276</a> <strong class="jxr_keyword">private</strong> List<PropertyExtractor> propertyExtractors = <strong class="jxr_keyword">new</strong> ArrayList<>();
+<a class="jxr_linenumber" name="L277" href="#L277">277</a>
+<a class="jxr_linenumber" name="L278" href="#L278">278</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L279" href="#L279">279</a> <em class="jxr_javadoccomment"> * Registers a custom listifier for a specific type.</em>
+<a class="jxr_linenumber" name="L280" href="#L280">280</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L281" href="#L281">281</a> <em class="jxr_javadoccomment"> * <p>Listifiers convert collection-like objects to List&lt;Object&gt;. The BiFunction</em>
+<a class="jxr_linenumber" name="L282" href="#L282">282</a> <em class="jxr_javadoccomment"> * receives the object to convert and the converter instance for recursive calls.</p></em>
+<a class="jxr_linenumber" name="L283" href="#L283">283</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L284" href="#L284">284</a> <em class="jxr_javadoccomment"> * @param <T> The type to handle</em>
+<a class="jxr_linenumber" name="L285" href="#L285">285</a> <em class="jxr_javadoccomment"> * @param c The class to register the listifier for</em>
+<a class="jxr_linenumber" name="L286" href="#L286">286</a> <em class="jxr_javadoccomment"> * @param l The listification function</em>
+<a class="jxr_linenumber" name="L287" href="#L287">287</a> <em class="jxr_javadoccomment"> * @return This builder for method chaining</em>
+<a class="jxr_linenumber" name="L288" href="#L288">288</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L289" href="#L289">289</a> <strong class="jxr_keyword">public</strong> <T> Builder addListifier(Class<T> c, Listifier<T> l) { listifiers.add(<strong class="jxr_keyword">new</strong> ListifierEntry<>(c, l)); <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>; }
+<a class="jxr_linenumber" name="L290" href="#L290">290</a>
+<a class="jxr_linenumber" name="L291" href="#L291">291</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L292" href="#L292">292</a> <em class="jxr_javadoccomment"> * Registers a custom property extractor for specialized property access logic.</em>
+<a class="jxr_linenumber" name="L293" href="#L293">293</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L294" href="#L294">294</a> <em class="jxr_javadoccomment"> * <p>Property extractors enable custom property access patterns beyond standard JavaBean</em>
+<a class="jxr_linenumber" name="L295" href="#L295">295</a> <em class="jxr_javadoccomment"> * conventions. The converter tries extractors in registration order until one returns</em>
+<a class="jxr_linenumber" name="L296" href="#L296">296</a> <em class="jxr_javadoccomment"> * a non-<jk>null</jk> value. This allows for:</p></em>
+<a class="jxr_linenumber" name="L297" href="#L297">297</a> <em class="jxr_javadoccomment"> * <ul></em>
+<a class="jxr_linenumber" name="L298" href="#L298">298</a> <em class="jxr_javadoccomment"> * <li><b>Custom data structures:</b> Special property access for non-standard objects</li></em>
+<a class="jxr_linenumber" name="L299" href="#L299">299</a> <em class="jxr_javadoccomment"> * <li><b>Database entities:</b> Property access via entity-specific methods</li></em>
+<a class="jxr_linenumber" name="L300" href="#L300">300</a> <em class="jxr_javadoccomment"> * <li><b>Dynamic properties:</b> Computed or cached property values</li></em>
+<a class="jxr_linenumber" name="L301" href="#L301">301</a> <em class="jxr_javadoccomment"> * <li><b>Legacy objects:</b> Bridging older APIs with modern property access</li></em>
+<a class="jxr_linenumber" name="L302" href="#L302">302</a> <em class="jxr_javadoccomment"> * </ul></em>
+<a class="jxr_linenumber" name="L303" href="#L303">303</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L304" href="#L304">304</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Implementation Example:</h5></em>
+<a class="jxr_linenumber" name="L305" href="#L305">305</a> <em class="jxr_javadoccomment"> * <p class='bjava'></em>
+<a class="jxr_linenumber" name="L306" href="#L306">306</a> <em class="jxr_javadoccomment"> * <jc>// Custom extractor for a specialized data class</jc></em>
+<a class="jxr_linenumber" name="L307" href="#L307">307</a> <em class="jxr_javadoccomment"> * PropertyExtractor <jv>customExtractor</jv> = (<jp>obj</jp>, <jp>property</jp>) -&gt; {</em>
+<a class="jxr_linenumber" name="L308" href="#L308">308</a> <em class="jxr_javadoccomment"> * <jk>if</jk> (<jp>obj</jp> <jk>instanceof</jk> DatabaseEntity <jv>entity</jv>) {</em>
+<a class="jxr_linenumber" name="L309" href="#L309">309</a> <em class="jxr_javadoccomment"> * <jk>switch</jk> (<jp>property</jp>) {</em>
+<a class="jxr_linenumber" name="L310" href="#L310">310</a> <em class="jxr_javadoccomment"> * <jk>case</jk> <js>"id"</js>: <jk>return</jk> <jv>entity</jv>.getPrimaryKey();</em>
+<a class="jxr_linenumber" name="L311" href="#L311">311</a> <em class="jxr_javadoccomment"> * <jk>case</jk> <js>"displayName"</js>: <jk>return</jk> <jv>entity</jv>.computeDisplayName();</em>
+<a class="jxr_linenumber" name="L312" href="#L312">312</a> <em class="jxr_javadoccomment"> * <jk>case</jk> <js>"metadata"</js>: <jk>return</jk> <jv>entity</jv>.getMetadataAsMap();</em>
+<a class="jxr_linenumber" name="L313" href="#L313">313</a> <em class="jxr_javadoccomment"> * }</em>
+<a class="jxr_linenumber" name="L314" href="#L314">314</a> <em class="jxr_javadoccomment"> * }</em>
+<a class="jxr_linenumber" name="L315" href="#L315">315</a> <em class="jxr_javadoccomment"> * <jk>return</jk> <jk>null</jk>; <jc>// Let next extractor try</jc></em>
+<a class="jxr_linenumber" name="L316" href="#L316">316</a> <em class="jxr_javadoccomment"> * };</em>
+<a class="jxr_linenumber" name="L317" href="#L317">317</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L318" href="#L318">318</a> <em class="jxr_javadoccomment"> * <jk>var</jk> <jv>converter</jv> = BasicBeanConverter.<jsm>builder</jsm>()</em>
+<a class="jxr_linenumber" name="L319" href="#L319">319</a> <em class="jxr_javadoccomment"> * .addPropertyExtractor(<jv>customExtractor</jv>)</em>
+<a class="jxr_linenumber" name="L320" href="#L320">320</a> <em class="jxr_javadoccomment"> * .defaultSettings() <jc>// Adds standard extractors</jc></em>
+<a class="jxr_linenumber" name="L321" href="#L321">321</a> <em class="jxr_javadoccomment"> * .build();</em>
+<a class="jxr_linenumber" name="L322" href="#L322">322</a> <em class="jxr_javadoccomment"> * </p></em>
+<a class="jxr_linenumber" name="L323" href="#L323">323</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L324" href="#L324">324</a> <em class="jxr_javadoccomment"> * <p><b>Execution Order:</b> Custom extractors are tried before the default extractors</em>
+<a class="jxr_linenumber" name="L325" href="#L325">325</a> <em class="jxr_javadoccomment"> * added by {@link #defaultSettings()}, allowing overrides of standard behavior.</p></em>
+<a class="jxr_linenumber" name="L326" href="#L326">326</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L327" href="#L327">327</a> <em class="jxr_javadoccomment"> * @param e The property extractor to register</em>
+<a class="jxr_linenumber" name="L328" href="#L328">328</a> <em class="jxr_javadoccomment"> * @return This builder for method chaining</em>
+<a class="jxr_linenumber" name="L329" href="#L329">329</a> <em class="jxr_javadoccomment"> * @see PropertyExtractor</em>
+<a class="jxr_linenumber" name="L330" href="#L330">330</a> <em class="jxr_javadoccomment"> * @see PropertyExtractors</em>
+<a class="jxr_linenumber" name="L331" href="#L331">331</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L332" href="#L332">332</a> <strong class="jxr_keyword">public</strong> Builder addPropertyExtractor(<a name="PropertyExtractor" href="../../../../../org/apache/juneau/junit/bct/PropertyExtractor.html#PropertyExtractor">PropertyExtractor</a> e) { propertyExtractors.add(e); <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>; }
+<a class="jxr_linenumber" name="L333" href="#L333">333</a>
+<a class="jxr_linenumber" name="L334" href="#L334">334</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L335" href="#L335">335</a> <em class="jxr_javadoccomment"> * Adds a configuration setting to the converter.</em>
+<a class="jxr_linenumber" name="L336" href="#L336">336</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L337" href="#L337">337</a> <em class="jxr_javadoccomment"> * @param key The setting key (use SETTING_* constants)</em>
+<a class="jxr_linenumber" name="L338" href="#L338">338</a> <em class="jxr_javadoccomment"> * @param value The setting value</em>
+<a class="jxr_linenumber" name="L339" href="#L339">339</a> <em class="jxr_javadoccomment"> * @return This builder for method chaining</em>
+<a class="jxr_linenumber" name="L340" href="#L340">340</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L341" href="#L341">341</a> <strong class="jxr_keyword">public</strong> Builder addSetting(String key, Object value) { settings.put(key, value); <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>; }
+<a class="jxr_linenumber" name="L342" href="#L342">342</a>
+<a class="jxr_linenumber" name="L343" href="#L343">343</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L344" href="#L344">344</a> <em class="jxr_javadoccomment"> * Registers a custom stringifier for a specific type.</em>
+<a class="jxr_linenumber" name="L345" href="#L345">345</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L346" href="#L346">346</a> <em class="jxr_javadoccomment"> * <p>Stringifiers convert objects to their string representations. The BiFunction</em>
+<a class="jxr_linenumber" name="L347" href="#L347">347</a> <em class="jxr_javadoccomment"> * receives the object to convert and the converter instance for recursive calls.</p></em>
+<a class="jxr_linenumber" name="L348" href="#L348">348</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L349" href="#L349">349</a> <em class="jxr_javadoccomment"> * @param <T> The type to handle</em>
+<a class="jxr_linenumber" name="L350" href="#L350">350</a> <em class="jxr_javadoccomment"> * @param c The class to register the stringifier for</em>
+<a class="jxr_linenumber" name="L351" href="#L351">351</a> <em class="jxr_javadoccomment"> * @param s The stringification function</em>
+<a class="jxr_linenumber" name="L352" href="#L352">352</a> <em class="jxr_javadoccomment"> * @return This builder for method chaining</em>
+<a class="jxr_linenumber" name="L353" href="#L353">353</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L354" href="#L354">354</a> <strong class="jxr_keyword">public</strong> <T> Builder addStringifier(Class<T> c, Stringifier<T> s) { stringifiers.add(<strong class="jxr_keyword">new</strong> StringifierEntry<>(c, s)); <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>; }
+<a class="jxr_linenumber" name="L355" href="#L355">355</a>
+<a class="jxr_linenumber" name="L356" href="#L356">356</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L357" href="#L357">357</a> <em class="jxr_javadoccomment"> * Registers a custom swapper for a specific type.</em>
+<a class="jxr_linenumber" name="L358" href="#L358">358</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L359" href="#L359">359</a> <em class="jxr_javadoccomment"> * <p>Swappers pre-process objects before conversion. Common uses include</em>
+<a class="jxr_linenumber" name="L360" href="#L360">360</a> <em class="jxr_javadoccomment"> * unwrapping Optional values, calling Supplier methods, or extracting values</em>
+<a class="jxr_linenumber" name="L361" href="#L361">361</a> <em class="jxr_javadoccomment"> * from wrapper objects.</p></em>
+<a class="jxr_linenumber" name="L362" href="#L362">362</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L363" href="#L363">363</a> <em class="jxr_javadoccomment"> * @param <T> The type to handle</em>
+<a class="jxr_linenumber" name="L364" href="#L364">364</a> <em class="jxr_javadoccomment"> * @param c The class to register the swapper for</em>
+<a class="jxr_linenumber" name="L365" href="#L365">365</a> <em class="jxr_javadoccomment"> * @param s The swapping function</em>
+<a class="jxr_linenumber" name="L366" href="#L366">366</a> <em class="jxr_javadoccomment"> * @return This builder for method chaining</em>
+<a class="jxr_linenumber" name="L367" href="#L367">367</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L368" href="#L368">368</a> <strong class="jxr_keyword">public</strong> <T> Builder addSwapper(Class<T> c, Swapper<T> s) { swappers.add(<strong class="jxr_keyword">new</strong> SwapperEntry<>(c, s)); <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>; }
+<a class="jxr_linenumber" name="L369" href="#L369">369</a>
+<a class="jxr_linenumber" name="L370" href="#L370">370</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L371" href="#L371">371</a> <em class="jxr_javadoccomment"> * Builds the configured BasicBeanConverter instance.</em>
+<a class="jxr_linenumber" name="L372" href="#L372">372</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L373" href="#L373">373</a> <em class="jxr_javadoccomment"> * <p>This method creates a new BasicBeanConverter with all registered handlers</em>
+<a class="jxr_linenumber" name="L374" href="#L374">374</a> <em class="jxr_javadoccomment"> * and settings. The builder can be reused to create multiple converters with</em>
+<a class="jxr_linenumber" name="L375" href="#L375">375</a> <em class="jxr_javadoccomment"> * the same configuration.</p></em>
+<a class="jxr_linenumber" name="L376" href="#L376">376</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L377" href="#L377">377</a> <em class="jxr_javadoccomment"> * @return A new BasicBeanConverter instance</em>
+<a class="jxr_linenumber" name="L378" href="#L378">378</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L379" href="#L379">379</a> <strong class="jxr_keyword">public</strong> <a name="BasicBeanConverter" href="../../../../../org/apache/juneau/junit/bct/BasicBeanConverter.html#BasicBeanConverter">BasicBeanConverter</a> build() {
+<a class="jxr_linenumber" name="L380" href="#L380">380</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> <a name="BasicBeanConverter" href="../../../../../org/apache/juneau/junit/bct/BasicBeanConverter.html#BasicBeanConverter">BasicBeanConverter</a>(<strong class="jxr_keyword">this</strong>);
+<a class="jxr_linenumber" name="L381" href="#L381">381</a> }
+<a class="jxr_linenumber" name="L382" href="#L382">382</a>
+<a class="jxr_linenumber" name="L383" href="#L383">383</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L384" href="#L384">384</a> <em class="jxr_javadoccomment"> * Adds default handlers and settings for common Java types.</em>
+<a class="jxr_linenumber" name="L385" href="#L385">385</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L386" href="#L386">386</a> <em class="jxr_javadoccomment"> * <p>This method registers comprehensive support for:</p></em>
+<a class="jxr_linenumber" name="L387" href="#L387">387</a> <em class="jxr_javadoccomment"> * <ul></em>
+<a class="jxr_linenumber" name="L388" href="#L388">388</a> <em class="jxr_javadoccomment"> * <li><b>Collections:</b> List, Set, Collection → bracket format</li></em>
+<a class="jxr_linenumber" name="L389" href="#L389">389</a> <em class="jxr_javadoccomment"> * <li><b>Maps:</b> Map, Properties → brace format with key=value pairs</li></em>
+<a class="jxr_linenumber" name="L390" href="#L390">390</a> <em class="jxr_javadoccomment"> * <li><b>Map Entries:</b> Map.Entry → <js>"key=value"</js> format</li></em>
+<a class="jxr_linenumber" name="L391" href="#L391">391</a> <em class="jxr_javadoccomment"> * <li><b>Dates:</b> Date, Calendar → ISO-8601 format</li></em>
+<a class="jxr_linenumber" name="L392" href="#L392">392</a> <em class="jxr_javadoccomment"> * <li><b>Files/Streams:</b> File, InputStream, Reader → content extraction</li></em>
+<a class="jxr_linenumber" name="L393" href="#L393">393</a> <em class="jxr_javadoccomment"> * <li><b>Arrays:</b> byte[], char[] → hex strings and direct string conversion</li></em>
+<a class="jxr_linenumber" name="L394" href="#L394">394</a> <em class="jxr_javadoccomment"> * <li><b>Reflection:</b> Class, Method, Constructor → readable signatures</li></em>
+<a class="jxr_linenumber" name="L395" href="#L395">395</a> <em class="jxr_javadoccomment"> * <li><b>Enums:</b> All enum types → name() format</li></em>
+<a class="jxr_linenumber" name="L396" href="#L396">396</a> <em class="jxr_javadoccomment"> * <li><b>Iterables:</b> Iterable, Iterator, Enumeration, Stream → list conversion</li></em>
+<a class="jxr_linenumber" name="L397" href="#L397">397</a> <em class="jxr_javadoccomment"> * <li><b>Wrappers:</b> Optional, Supplier → unwrapping/evaluation</li></em>
+<a class="jxr_linenumber" name="L398" href="#L398">398</a> <em class="jxr_javadoccomment"> * </ul></em>
+<a class="jxr_linenumber" name="L399" href="#L399">399</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L400" href="#L400">400</a> <em class="jxr_javadoccomment"> * <p>Default settings configured by this method:</p></em>
+<a class="jxr_linenumber" name="L401" href="#L401">401</a> <em class="jxr_javadoccomment"> * <ul></em>
+<a class="jxr_linenumber" name="L402" href="#L402">402</a> <em class="jxr_javadoccomment"> * <li><code>{@link #SETTING_nullValue}</code> = <js>"&lt;null&gt;"</js> - String representation for null values</li></em>
+<a class="jxr_linenumber" name="L403" href="#L403">403</a> <em class="jxr_javadoccomment"> * <li><code>{@link #SETTING_selfValue}</code> = <js>"&lt;self&gt;"</js> - Special property name for self-reference</li></em>
+<a class="jxr_linenumber" name="L404" href="#L404">404</a> <em class="jxr_javadoccomment"> * <li><code>{@link #SETTING_classNameFormat}</code> = <js>"simple"</js> - Simple class name format</li></em>
+<a class="jxr_linenumber" name="L405" href="#L405">405</a> <em class="jxr_javadoccomment"> * </ul></em>
+<a class="jxr_linenumber" name="L406" href="#L406">406</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L407" href="#L407">407</a> <em class="jxr_javadoccomment"> * <p>Additional settings that can be configured (not set by default):</p></em>
+<a class="jxr_linenumber" name="L408" href="#L408">408</a> <em class="jxr_javadoccomment"> * <ul></em>
+<a class="jxr_linenumber" name="L409" href="#L409">409</a> <em class="jxr_javadoccomment"> * <li><code>{@link #SETTING_fieldSeparator}</code> - Delimiter between collection elements (default: <js>","</js>)</li></em>
+<a class="jxr_linenumber" name="L410" href="#L410">410</a> <em class="jxr_javadoccomment"> * <li><code>{@link #SETTING_collectionPrefix}</code> - Prefix for collection content (default: <js>"["</js>)</li></em>
+<a class="jxr_linenumber" name="L411" href="#L411">411</a> <em class="jxr_javadoccomment"> * <li><code>{@link #SETTING_collectionSuffix}</code> - Suffix for collection content (default: <js>"]"</js>)</li></em>
+<a class="jxr_linenumber" name="L412" href="#L412">412</a> <em class="jxr_javadoccomment"> * <li><code>{@link #SETTING_mapPrefix}</code> - Prefix for map content (default: <js>"{"</js>)</li></em>
+<a class="jxr_linenumber" name="L413" href="#L413">413</a> <em class="jxr_javadoccomment"> * <li><code>{@link #SETTING_mapSuffix}</code> - Suffix for map content (default: <js>"}"</js>)</li></em>
+<a class="jxr_linenumber" name="L414" href="#L414">414</a> <em class="jxr_javadoccomment"> * <li><code>{@link #SETTING_mapEntrySeparator}</code> - Separator between map keys and values (default: <js>"="</js>)</li></em>
+<a class="jxr_linenumber" name="L415" href="#L415">415</a> <em class="jxr_javadoccomment"> * <li><code>{@link #SETTING_calendarFormat}</code> - DateTimeFormatter for calendar objects (default: <jsf>ISO_INSTANT</jsf>)</li></em>
+<a class="jxr_linenumber" name="L416" href="#L416">416</a> <em class="jxr_javadoccomment"> * </ul></em>
+<a class="jxr_linenumber" name="L417" href="#L417">417</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L418" href="#L418">418</a> <em class="jxr_javadoccomment"> * <p><b>Note:</b> This should typically be called after custom handlers to avoid</em>
+<a class="jxr_linenumber" name="L419" href="#L419">419</a> <em class="jxr_javadoccomment"> * overriding your custom configurations, since handlers are processed in reverse order.</p></em>
+<a class="jxr_linenumber" name="L420" href="#L420">420</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L421" href="#L421">421</a> <em class="jxr_javadoccomment"> * @return This builder for method chaining</em>
+<a class="jxr_linenumber" name="L422" href="#L422">422</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L423" href="#L423">423</a> <strong class="jxr_keyword">public</strong> Builder defaultSettings() {
+<a class="jxr_linenumber" name="L424" href="#L424">424</a> addSetting(SETTING_nullValue, <span class="jxr_string">"<null>"</span>);
+<a class="jxr_linenumber" name="L425" href="#L425">425</a> addSetting(SETTING_selfValue, <span class="jxr_string">"<self>"</span>);
+<a class="jxr_linenumber" name="L426" href="#L426">426</a> addSetting(SETTING_classNameFormat, <span class="jxr_string">"simple"</span>);
+<a class="jxr_linenumber" name="L427" href="#L427">427</a>
+<a class="jxr_linenumber" name="L428" href="#L428">428</a> addStringifier(Map.Entry.<strong class="jxr_keyword">class</strong>, Stringifiers.mapEntryStringifier());
+<a class="jxr_linenumber" name="L429" href="#L429">429</a> addStringifier(GregorianCalendar.<strong class="jxr_keyword">class</strong>, Stringifiers.calendarStringifier());
+<a class="jxr_linenumber" name="L430" href="#L430">430</a> addStringifier(Date.<strong class="jxr_keyword">class</strong>, Stringifiers.dateStringifier());
+<a class="jxr_linenumber" name="L431" href="#L431">431</a> addStringifier(InputStream.<strong class="jxr_keyword">class</strong>, Stringifiers.inputStreamStringifier());
+<a class="jxr_linenumber" name="L432" href="#L432">432</a> addStringifier(byte[].<strong class="jxr_keyword">class</strong>, Stringifiers.byteArrayStringifier());
+<a class="jxr_linenumber" name="L433" href="#L433">433</a> addStringifier(<strong class="jxr_keyword">char</strong>[].<strong class="jxr_keyword">class</strong>, Stringifiers.charArrayStringifier());
+<a class="jxr_linenumber" name="L434" href="#L434">434</a> addStringifier(Reader.<strong class="jxr_keyword">class</strong>, Stringifiers.readerStringifier());
+<a class="jxr_linenumber" name="L435" href="#L435">435</a> addStringifier(File.<strong class="jxr_keyword">class</strong>, Stringifiers.fileStringifier());
+<a class="jxr_linenumber" name="L436" href="#L436">436</a> addStringifier(Enum.<strong class="jxr_keyword">class</strong>, Stringifiers.enumStringifier());
+<a class="jxr_linenumber" name="L437" href="#L437">437</a> addStringifier(Class.<strong class="jxr_keyword">class</strong>, Stringifiers.classStringifier());
+<a class="jxr_linenumber" name="L438" href="#L438">438</a> addStringifier(Constructor.<strong class="jxr_keyword">class</strong>, Stringifiers.constructorStringifier());
+<a class="jxr_linenumber" name="L439" href="#L439">439</a> addStringifier(Method.<strong class="jxr_keyword">class</strong>, Stringifiers.methodStringifier());
+<a class="jxr_linenumber" name="L440" href="#L440">440</a> addStringifier(List.<strong class="jxr_keyword">class</strong>, Stringifiers.listStringifier());
+<a class="jxr_linenumber" name="L441" href="#L441">441</a> addStringifier(Map.<strong class="jxr_keyword">class</strong>, Stringifiers.mapStringifier());
+<a class="jxr_linenumber" name="L442" href="#L442">442</a>
+<a class="jxr_linenumber" name="L443" href="#L443">443</a> <em class="jxr_comment">// Note: Listifiers are processed in reverse registration order (last registered wins).</em>
+<a class="jxr_linenumber" name="L444" href="#L444">444</a> <em class="jxr_comment">// Collection must be registered after Iterable so it takes precedence for Sets,</em>
+<a class="jxr_linenumber" name="L445" href="#L445">445</a> <em class="jxr_comment">// ensuring TreeSet conversion for deterministic ordering.</em>
+<a class="jxr_linenumber" name="L446" href="#L446">446</a> addListifier(Iterable.<strong class="jxr_keyword">class</strong>, Listifiers.iterableListifier());
+<a class="jxr_linenumber" name="L447" href="#L447">447</a> addListifier(Collection.<strong class="jxr_keyword">class</strong>, Listifiers.collectionListifier());
+<a class="jxr_linenumber" name="L448" href="#L448">448</a> addListifier(Iterator.<strong class="jxr_keyword">class</strong>, Listifiers.iteratorListifier());
+<a class="jxr_linenumber" name="L449" href="#L449">449</a> addListifier(Enumeration.<strong class="jxr_keyword">class</strong>, Listifiers.enumerationListifier());
+<a class="jxr_linenumber" name="L450" href="#L450">450</a> addListifier(Stream.<strong class="jxr_keyword">class</strong>, Listifiers.streamListifier());
+<a class="jxr_linenumber" name="L451" href="#L451">451</a> addListifier(Map.<strong class="jxr_keyword">class</strong>, Listifiers.mapListifier());
+<a class="jxr_linenumber" name="L452" href="#L452">452</a>
+<a class="jxr_linenumber" name="L453" href="#L453">453</a> addSwapper(Optional.<strong class="jxr_keyword">class</strong>, Swappers.optionalSwapper());
+<a class="jxr_linenumber" name="L454" href="#L454">454</a> addSwapper(Supplier.<strong class="jxr_keyword">class</strong>, Swappers.supplierSwapper());
+<a class="jxr_linenumber" name="L455" href="#L455">455</a> addSwapper(Future.<strong class="jxr_keyword">class</strong>, Swappers.futureSwapper());
+<a class="jxr_linenumber" name="L456" href="#L456">456</a>
+<a class="jxr_linenumber" name="L457" href="#L457">457</a> addPropertyExtractor(<strong class="jxr_keyword">new</strong> PropertyExtractors.ObjectPropertyExtractor());
+<a class="jxr_linenumber" name="L458" href="#L458">458</a> addPropertyExtractor(<strong class="jxr_keyword">new</strong> PropertyExtractors.ListPropertyExtractor());
+<a class="jxr_linenumber" name="L459" href="#L459">459</a> addPropertyExtractor(<strong class="jxr_keyword">new</strong> PropertyExtractors.MapPropertyExtractor());
+<a class="jxr_linenumber" name="L460" href="#L460">460</a>
+<a class="jxr_linenumber" name="L461" href="#L461">461</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>;
+<a class="jxr_linenumber" name="L462" href="#L462">462</a> }
+<a class="jxr_linenumber" name="L463" href="#L463">463</a> }
+<a class="jxr_linenumber" name="L464" href="#L464">464</a>
+<a class="jxr_linenumber" name="L465" href="#L465">465</a> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">class</strong> ListifierEntry<T> {
+<a class="jxr_linenumber" name="L466" href="#L466">466</a> <strong class="jxr_keyword">private</strong> Class<T> forClass;
+<a class="jxr_linenumber" name="L467" href="#L467">467</a> <strong class="jxr_keyword">private</strong> Listifier<T> function;
+<a class="jxr_linenumber" name="L468" href="#L468">468</a>
+<a class="jxr_linenumber" name="L469" href="#L469">469</a> <strong class="jxr_keyword">private</strong> ListifierEntry(Class<T> forClass, Listifier<T> function) {
+<a class="jxr_linenumber" name="L470" href="#L470">470</a> <strong class="jxr_keyword">this</strong>.forClass = forClass;
+<a class="jxr_linenumber" name="L471" href="#L471">471</a> <strong class="jxr_keyword">this</strong>.function = function;
+<a class="jxr_linenumber" name="L472" href="#L472">472</a> }
+<a class="jxr_linenumber" name="L473" href="#L473">473</a> }
+<a class="jxr_linenumber" name="L474" href="#L474">474</a>
+<a class="jxr_linenumber" name="L475" href="#L475">475</a> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">class</strong> StringifierEntry<T> {
+<a class="jxr_linenumber" name="L476" href="#L476">476</a> <strong class="jxr_keyword">private</strong> Class<T> forClass;
+<a class="jxr_linenumber" name="L477" href="#L477">477</a> <strong class="jxr_keyword">private</strong> Stringifier<T> function;
+<a class="jxr_linenumber" name="L478" href="#L478">478</a>
+<a class="jxr_linenumber" name="L479" href="#L479">479</a> @SuppressWarnings(<span class="jxr_string">"unchecked"</span>)
+<a class="jxr_linenumber" name="L480" href="#L480">480</a> <strong class="jxr_keyword">private</strong> StringifierEntry(Class<T> forClass, <a name="Stringifier" href="../../../../../org/apache/juneau/junit/bct/Stringifier.html#Stringifier">Stringifier</a> function) {
+<a class="jxr_linenumber" name="L481" href="#L481">481</a> <strong class="jxr_keyword">this</strong>.forClass = forClass;
+<a class="jxr_linenumber" name="L482" href="#L482">482</a> <strong class="jxr_keyword">this</strong>.function = function;
+<a class="jxr_linenumber" name="L483" href="#L483">483</a> }
+<a class="jxr_linenumber" name="L484" href="#L484">484</a> }
+<a class="jxr_linenumber" name="L485" href="#L485">485</a>
+<a class="jxr_linenumber" name="L486" href="#L486">486</a> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">class</strong> SwapperEntry<T> {
+<a class="jxr_linenumber" name="L487" href="#L487">487</a> <strong class="jxr_keyword">private</strong> Class<T> forClass;
+<a class="jxr_linenumber" name="L488" href="#L488">488</a> <strong class="jxr_keyword">private</strong> Swapper<T> function;
+<a class="jxr_linenumber" name="L489" href="#L489">489</a>
+<a class="jxr_linenumber" name="L490" href="#L490">490</a> <strong class="jxr_keyword">private</strong> SwapperEntry(Class<T> forClass, Swapper<T> function) {
+<a class="jxr_linenumber" name="L491" href="#L491">491</a> <strong class="jxr_keyword">this</strong>.forClass = forClass;
+<a class="jxr_linenumber" name="L492" href="#L492">492</a> <strong class="jxr_keyword">this</strong>.function = function;
+<a class="jxr_linenumber" name="L493" href="#L493">493</a> }
+<a class="jxr_linenumber" name="L494" href="#L494">494</a> }
+<a class="jxr_linenumber" name="L495" href="#L495">495</a>
+<a class="jxr_linenumber" name="L496" href="#L496">496</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L497" href="#L497">497</a> <em class="jxr_javadoccomment"> * Default converter instance with standard settings and handlers.</em>
+<a class="jxr_linenumber" name="L498" href="#L498">498</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L499" href="#L499">499</a> <em class="jxr_javadoccomment"> * <p>This pre-configured instance provides comprehensive support for all common Java types</em>
+<a class="jxr_linenumber" name="L500" href="#L500">500</a> <em class="jxr_javadoccomment"> * with sensible default settings. It's suitable for most BCT testing scenarios and can be</em>
+<a class="jxr_linenumber" name="L501" href="#L501">501</a> <em class="jxr_javadoccomment"> * used directly without building a custom converter.</p></em>
+<a class="jxr_linenumber" name="L502" href="#L502">502</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L503" href="#L503">503</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Included Support:</h5></em>
+<a class="jxr_linenumber" name="L504" href="#L504">504</a> <em class="jxr_javadoccomment"> * <ul></em>
+<a class="jxr_linenumber" name="L505" href="#L505">505</a> <em class="jxr_javadoccomment"> * <li><b>Collections:</b> List, Set, Queue with bracket formatting</li></em>
+<a class="jxr_linenumber" name="L506" href="#L506">506</a> <em class="jxr_javadoccomment"> * <li><b>Maps:</b> Map, Properties with brace formatting</li></em>
+<a class="jxr_linenumber" name="L507" href="#L507">507</a> <em class="jxr_javadoccomment"> * <li><b>Arrays:</b> All array types with bracket formatting</li></em>
+<a class="jxr_linenumber" name="L508" href="#L508">508</a> <em class="jxr_javadoccomment"> * <li><b>Dates:</b> Date, Calendar with ISO-8601 formatting</li></em>
+<a class="jxr_linenumber" name="L509" href="#L509">509</a> <em class="jxr_javadoccomment"> * <li><b>Files/Streams:</b> File, InputStream, Reader content extraction</li></em>
+<a class="jxr_linenumber" name="L510" href="#L510">510</a> <em class="jxr_javadoccomment"> * <li><b>Reflection:</b> Class, Method, Constructor readable signatures</li></em>
+<a class="jxr_linenumber" name="L511" href="#L511">511</a> <em class="jxr_javadoccomment"> * <li><b>Enums:</b> name() representation</li></em>
+<a class="jxr_linenumber" name="L512" href="#L512">512</a> <em class="jxr_javadoccomment"> * <li><b>Wrappers:</b> Optional, Supplier, Future unwrapping</li></em>
+<a class="jxr_linenumber" name="L513" href="#L513">513</a> <em class="jxr_javadoccomment"> * </ul></em>
+<a class="jxr_linenumber" name="L514" href="#L514">514</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L515" href="#L515">515</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Default Settings:</h5></em>
+<a class="jxr_linenumber" name="L516" href="#L516">516</a> <em class="jxr_javadoccomment"> * <ul></em>
+<a class="jxr_linenumber" name="L517" href="#L517">517</a> <em class="jxr_javadoccomment"> * <li><code>nullValue</code> = <js>"&lt;null&gt;"</js></li></em>
+<a class="jxr_linenumber" name="L518" href="#L518">518</a> <em class="jxr_javadoccomment"> * <li><code>selfValue</code> = <js>"&lt;self&gt;"</js></li></em>
+<a class="jxr_linenumber" name="L519" href="#L519">519</a> <em class="jxr_javadoccomment"> * <li><code>classNameFormat</code> = <js>"simple"</js></li></em>
+<a class="jxr_linenumber" name="L520" href="#L520">520</a> <em class="jxr_javadoccomment"> * </ul></em>
+<a class="jxr_linenumber" name="L521" href="#L521">521</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L522" href="#L522">522</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Usage Example:</h5></em>
+<a class="jxr_linenumber" name="L523" href="#L523">523</a> <em class="jxr_javadoccomment"> * <p class='bjava'></em>
+<a class="jxr_linenumber" name="L524" href="#L524">524</a> <em class="jxr_javadoccomment"> * <jc>// Use default converter for assertions</jc></em>
+<a class="jxr_linenumber" name="L525" href="#L525">525</a> <em class="jxr_javadoccomment"> * <jk>var</jk> <jv>result</jv> = BasicBeanConverter.<jsf>DEFAULT</jsf>.stringify(<jv>myObject</jv>);</em>
+<a class="jxr_linenumber" name="L526" href="#L526">526</a> <em class="jxr_javadoccomment"> * <jk>var</jk> <jv>city</jv> = BasicBeanConverter.<jsf>DEFAULT</jsf>.getProperty(<jv>user</jv>, <js>"address.city"</js>);</em>
+<a class="jxr_linenumber" name="L527" href="#L527">527</a> <em class="jxr_javadoccomment"> * </p></em>
+<a class="jxr_linenumber" name="L528" href="#L528">528</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L529" href="#L529">529</a> <em class="jxr_javadoccomment"> * @see #builder()</em>
+<a class="jxr_linenumber" name="L530" href="#L530">530</a> <em class="jxr_javadoccomment"> * @see Builder#defaultSettings()</em>
+<a class="jxr_linenumber" name="L531" href="#L531">531</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L532" href="#L532">532</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <a name="BasicBeanConverter" href="../../../../../org/apache/juneau/junit/bct/BasicBeanConverter.html#BasicBeanConverter">BasicBeanConverter</a> DEFAULT = builder().defaultSettings().build();
+<a class="jxr_linenumber" name="L533" href="#L533">533</a>
+<a class="jxr_linenumber" name="L534" href="#L534">534</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L535" href="#L535">535</a> <em class="jxr_javadoccomment"> * Setting key for the string representation of null values.</em>
+<a class="jxr_linenumber" name="L536" href="#L536">536</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L537" href="#L537">537</a> <em class="jxr_javadoccomment"> * <p>Default value: <js>"&lt;null&gt;"</js></p></em>
+<a class="jxr_linenumber" name="L538" href="#L538">538</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L539" href="#L539">539</a> <em class="jxr_javadoccomment"> * <p>This setting controls how null values are displayed when stringified.</em>
+<a class="jxr_linenumber" name="L540" href="#L540">540</a> <em class="jxr_javadoccomment"> * Used by the converter when encountering null objects during conversion.</p></em>
+<a class="jxr_linenumber" name="L541" href="#L541">541</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L542" href="#L542">542</a> <em class="jxr_javadoccomment"> * @see Builder#addSetting(String, Object)</em>
+<a class="jxr_linenumber" name="L543" href="#L543">543</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L544" href="#L544">544</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> String SETTING_nullValue = <span class="jxr_string">"nullValue"</span>;
+<a class="jxr_linenumber" name="L545" href="#L545">545</a>
+<a class="jxr_linenumber" name="L546" href="#L546">546</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L547" href="#L547">547</a> <em class="jxr_javadoccomment"> * Setting key for the special property name that returns the object itself.</em>
+<a class="jxr_linenumber" name="L548" href="#L548">548</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L549" href="#L549">549</a> <em class="jxr_javadoccomment"> * <p>Default value: <js>"&lt;self&gt;"</js></p></em>
+<a class="jxr_linenumber" name="L550" href="#L550">550</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L551" href="#L551">551</a> <em class="jxr_javadoccomment"> * <p>This setting defines the property name that, when accessed, returns the</em>
+<a class="jxr_linenumber" name="L552" href="#L552">552</a> <em class="jxr_javadoccomment"> * object itself rather than a property of the object. Useful for self-referential</em>
+<a class="jxr_linenumber" name="L553" href="#L553">553</a> <em class="jxr_javadoccomment"> * property access in nested object navigation.</p></em>
+<a class="jxr_linenumber" name="L554" href="#L554">554</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L555" href="#L555">555</a> <em class="jxr_javadoccomment"> * @see Builder#addSetting(String, Object)</em>
+<a class="jxr_linenumber" name="L556" href="#L556">556</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L557" href="#L557">557</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> String SETTING_selfValue = <span class="jxr_string">"selfValue"</span>;
+<a class="jxr_linenumber" name="L558" href="#L558">558</a>
+<a class="jxr_linenumber" name="L559" href="#L559">559</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L560" href="#L560">560</a> <em class="jxr_javadoccomment"> * Setting key for the delimiter between collection elements and map entries.</em>
+<a class="jxr_linenumber" name="L561" href="#L561">561</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L562" href="#L562">562</a> <em class="jxr_javadoccomment"> * <p>Default value: <js>","</js></p></em>
+<a class="jxr_linenumber" name="L563" href="#L563">563</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L564" href="#L564">564</a> <em class="jxr_javadoccomment"> * <p>This setting controls the separator used between elements when converting</em>
+<a class="jxr_linenumber" name="L565" href="#L565">565</a> <em class="jxr_javadoccomment"> * collections, arrays, and maps to string representations.</p></em>
+<a class="jxr_linenumber" name="L566" href="#L566">566</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L567" href="#L567">567</a> <em class="jxr_javadoccomment"> * @see Builder#addSetting(String, Object)</em>
+<a class="jxr_linenumber" name="L568" href="#L568">568</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L569" href="#L569">569</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> String SETTING_fieldSeparator = <span class="jxr_string">"fieldSeparator"</span>;
+<a class="jxr_linenumber" name="L570" href="#L570">570</a>
+<a class="jxr_linenumber" name="L571" href="#L571">571</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L572" href="#L572">572</a> <em class="jxr_javadoccomment"> * Setting key for the prefix character(s) used around collection content.</em>
+<a class="jxr_linenumber" name="L573" href="#L573">573</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L574" href="#L574">574</a> <em class="jxr_javadoccomment"> * <p>Default value: <js>"["</js></p></em>
+<a class="jxr_linenumber" name="L575" href="#L575">575</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L576" href="#L576">576</a> <em class="jxr_javadoccomment"> * <p>This setting defines the opening bracket or prefix used when displaying</em>
+<a class="jxr_linenumber" name="L577" href="#L577">577</a> <em class="jxr_javadoccomment"> * collection and array contents in string format.</p></em>
+<a class="jxr_linenumber" name="L578" href="#L578">578</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L579" href="#L579">579</a> <em class="jxr_javadoccomment"> * @see Builder#addSetting(String, Object)</em>
+<a class="jxr_linenumber" name="L580" href="#L580">580</a> <em class="jxr_javadoccomment"> * @see #SETTING_collectionSuffix</em>
+<a class="jxr_linenumber" name="L581" href="#L581">581</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L582" href="#L582">582</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> String SETTING_collectionPrefix = <span class="jxr_string">"collectionPrefix"</span>;
+<a class="jxr_linenumber" name="L583" href="#L583">583</a>
+<a class="jxr_linenumber" name="L584" href="#L584">584</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L585" href="#L585">585</a> <em class="jxr_javadoccomment"> * Setting key for the suffix character(s) used around collection content.</em>
+<a class="jxr_linenumber" name="L586" href="#L586">586</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L587" href="#L587">587</a> <em class="jxr_javadoccomment"> * <p>Default value: <js>"]"</js></p></em>
+<a class="jxr_linenumber" name="L588" href="#L588">588</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L589" href="#L589">589</a> <em class="jxr_javadoccomment"> * <p>This setting defines the closing bracket or suffix used when displaying</em>
+<a class="jxr_linenumber" name="L590" href="#L590">590</a> <em class="jxr_javadoccomment"> * collection and array contents in string format.</p></em>
+<a class="jxr_linenumber" name="L591" href="#L591">591</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L592" href="#L592">592</a> <em class="jxr_javadoccomment"> * @see Builder#addSetting(String, Object)</em>
+<a class="jxr_linenumber" name="L593" href="#L593">593</a> <em class="jxr_javadoccomment"> * @see #SETTING_collectionPrefix</em>
+<a class="jxr_linenumber" name="L594" href="#L594">594</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L595" href="#L595">595</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> String SETTING_collectionSuffix = <span class="jxr_string">"collectionSuffix"</span>;
+<a class="jxr_linenumber" name="L596" href="#L596">596</a>
+<a class="jxr_linenumber" name="L597" href="#L597">597</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L598" href="#L598">598</a> <em class="jxr_javadoccomment"> * Setting key for the prefix character(s) used around map content.</em>
+<a class="jxr_linenumber" name="L599" href="#L599">599</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L600" href="#L600">600</a> <em class="jxr_javadoccomment"> * <p>Default value: <js>"{"</js></p></em>
+<a class="jxr_linenumber" name="L601" href="#L601">601</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L602" href="#L602">602</a> <em class="jxr_javadoccomment"> * <p>This setting defines the opening brace or prefix used when displaying</em>
+<a class="jxr_linenumber" name="L603" href="#L603">603</a> <em class="jxr_javadoccomment"> * map contents in string format.</p></em>
+<a class="jxr_linenumber" name="L604" href="#L604">604</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L605" href="#L605">605</a> <em class="jxr_javadoccomment"> * @see Builder#addSetting(String, Object)</em>
+<a class="jxr_linenumber" name="L606" href="#L606">606</a> <em class="jxr_javadoccomment"> * @see #SETTING_mapSuffix</em>
+<a class="jxr_linenumber" name="L607" href="#L607">607</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L608" href="#L608">608</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> String SETTING_mapPrefix = <span class="jxr_string">"mapPrefix"</span>;
+<a class="jxr_linenumber" name="L609" href="#L609">609</a>
+<a class="jxr_linenumber" name="L610" href="#L610">610</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L611" href="#L611">611</a> <em class="jxr_javadoccomment"> * Setting key for the suffix character(s) used around map content.</em>
+<a class="jxr_linenumber" name="L612" href="#L612">612</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L613" href="#L613">613</a> <em class="jxr_javadoccomment"> * <p>Default value: <js>"}"</js></p></em>
+<a class="jxr_linenumber" name="L614" href="#L614">614</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L615" href="#L615">615</a> <em class="jxr_javadoccomment"> * <p>This setting defines the closing brace or suffix used when displaying</em>
+<a class="jxr_linenumber" name="L616" href="#L616">616</a> <em class="jxr_javadoccomment"> * map contents in string format.</p></em>
+<a class="jxr_linenumber" name="L617" href="#L617">617</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L618" href="#L618">618</a> <em class="jxr_javadoccomment"> * @see Builder#addSetting(String, Object)</em>
+<a class="jxr_linenumber" name="L619" href="#L619">619</a> <em class="jxr_javadoccomment"> * @see #SETTING_mapPrefix</em>
+<a class="jxr_linenumber" name="L620" href="#L620">620</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L621" href="#L621">621</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> String SETTING_mapSuffix = <span class="jxr_string">"mapSuffix"</span>;
+<a class="jxr_linenumber" name="L622" href="#L622">622</a>
+<a class="jxr_linenumber" name="L623" href="#L623">623</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L624" href="#L624">624</a> <em class="jxr_javadoccomment"> * Setting key for the separator between map keys and values.</em>
+<a class="jxr_linenumber" name="L625" href="#L625">625</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L626" href="#L626">626</a> <em class="jxr_javadoccomment"> * <p>Default value: <js>"="</js></p></em>
+<a class="jxr_linenumber" name="L627" href="#L627">627</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L628" href="#L628">628</a> <em class="jxr_javadoccomment"> * <p>This setting controls the separator used between keys and values when</em>
+<a class="jxr_linenumber" name="L629" href="#L629">629</a> <em class="jxr_javadoccomment"> * converting map entries to string representations (e.g., "key=value").</p></em>
+<a class="jxr_linenumber" name="L630" href="#L630">630</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L631" href="#L631">631</a> <em class="jxr_javadoccomment"> * @see Builder#addSetting(String, Object)</em>
+<a class="jxr_linenumber" name="L632" href="#L632">632</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L633" href="#L633">633</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> String SETTING_mapEntrySeparator = <span class="jxr_string">"mapEntrySeparator"</span>;
+<a class="jxr_linenumber" name="L634" href="#L634">634</a>
+<a class="jxr_linenumber" name="L635" href="#L635">635</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L636" href="#L636">636</a> <em class="jxr_javadoccomment"> * Setting key for the DateTimeFormatter used for calendar objects.</em>
+<a class="jxr_linenumber" name="L637" href="#L637">637</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L638" href="#L638">638</a> <em class="jxr_javadoccomment"> * <p>Default value: <jsf>ISO_INSTANT</jsf></p></em>
+<a class="jxr_linenumber" name="L639" href="#L639">639</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L640" href="#L640">640</a> <em class="jxr_javadoccomment"> * <p>This setting defines the date/time format used when converting Calendar</em>
+<a class="jxr_linenumber" name="L641" href="#L641">641</a> <em class="jxr_javadoccomment"> * objects to string representations. Must be a valid DateTimeFormatter instance.</p></em>
+<a class="jxr_linenumber" name="L642" href="#L642">642</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L643" href="#L643">643</a> <em class="jxr_javadoccomment"> * @see Builder#addSetting(String, Object)</em>
+<a class="jxr_linenumber" name="L644" href="#L644">644</a> <em class="jxr_javadoccomment"> * @see java.time.format.DateTimeFormatter</em>
+<a class="jxr_linenumber" name="L645" href="#L645">645</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L646" href="#L646">646</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> String SETTING_calendarFormat = <span class="jxr_string">"calendarFormat"</span>;
+<a class="jxr_linenumber" name="L647" href="#L647">647</a>
+<a class="jxr_linenumber" name="L648" href="#L648">648</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L649" href="#L649">649</a> <em class="jxr_javadoccomment"> * Setting key for the format used when displaying class names.</em>
+<a class="jxr_linenumber" name="L650" href="#L650">650</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L651" href="#L651">651</a> <em class="jxr_javadoccomment"> * <p>Default value: <js>"simple"</js></p></em>
+<a class="jxr_linenumber" name="L652" href="#L652">652</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L653" href="#L653">653</a> <em class="jxr_javadoccomment"> * <p>This setting controls how class names are displayed in string representations.</em>
+<a class="jxr_linenumber" name="L654" href="#L654">654</a> <em class="jxr_javadoccomment"> * Valid values are:</p></em>
+<a class="jxr_linenumber" name="L655" href="#L655">655</a> <em class="jxr_javadoccomment"> * <ul></em>
+<a class="jxr_linenumber" name="L656" href="#L656">656</a> <em class="jxr_javadoccomment"> * <li><js>"simple"</js> - Simple class name only (e.g., "String")</li></em>
+<a class="jxr_linenumber" name="L657" href="#L657">657</a> <em class="jxr_javadoccomment"> * <li><js>"canonical"</js> - Canonical class name (e.g., "java.lang.String")</li></em>
+<a class="jxr_linenumber" name="L658" href="#L658">658</a> <em class="jxr_javadoccomment"> * <li><js>"full"</js> - Full class name with package (e.g., "java.lang.String")</li></em>
+<a class="jxr_linenumber" name="L659" href="#L659">659</a> <em class="jxr_javadoccomment"> * </ul></em>
+<a class="jxr_linenumber" name="L660" href="#L660">660</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L661" href="#L661">661</a> <em class="jxr_javadoccomment"> * @see Builder#addSetting(String, Object)</em>
+<a class="jxr_linenumber" name="L662" href="#L662">662</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L663" href="#L663">663</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> String SETTING_classNameFormat = <span class="jxr_string">"classNameFormat"</span>;
+<a class="jxr_linenumber" name="L664" href="#L664">664</a>
+<a class="jxr_linenumber" name="L665" href="#L665">665</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L666" href="#L666">666</a> <em class="jxr_javadoccomment"> * Creates a new builder for configuring a BasicBeanConverter instance.</em>
+<a class="jxr_linenumber" name="L667" href="#L667">667</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L668" href="#L668">668</a> <em class="jxr_javadoccomment"> * <p>The builder allows registration of custom stringifiers, listifiers, and swappers,</em>
+<a class="jxr_linenumber" name="L669" href="#L669">669</a> <em class="jxr_javadoccomment"> * as well as configuration of various formatting settings before building the converter.</p></em>
+<a class="jxr_linenumber" name="L670" href="#L670">670</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L671" href="#L671">671</a> <em class="jxr_javadoccomment"> * @return A new Builder instance</em>
+<a class="jxr_linenumber" name="L672" href="#L672">672</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L673" href="#L673">673</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> Builder builder() {
+<a class="jxr_linenumber" name="L674" href="#L674">674</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> Builder();
+<a class="jxr_linenumber" name="L675" href="#L675">675</a> }
+<a class="jxr_linenumber" name="L676" href="#L676">676</a>
+<a class="jxr_linenumber" name="L677" href="#L677">677</a> <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> List<StringifierEntry<?>> stringifiers;
+<a class="jxr_linenumber" name="L678" href="#L678">678</a> <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> List<ListifierEntry<?>> listifiers;
+<a class="jxr_linenumber" name="L679" href="#L679">679</a> <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> List<SwapperEntry<?>> swappers;
+<a class="jxr_linenumber" name="L680" href="#L680">680</a>
+<a class="jxr_linenumber" name="L681" href="#L681">681</a> <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> List<PropertyExtractor> propertyExtractors;
+<a class="jxr_linenumber" name="L682" href="#L682">682</a>
+<a class="jxr_linenumber" name="L683" href="#L683">683</a> <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> Map<String,Object> settings;
+<a class="jxr_linenumber" name="L684" href="#L684">684</a>
+<a class="jxr_linenumber" name="L685" href="#L685">685</a> <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> ConcurrentHashMap<Class,Optional<Stringifier<?>>> stringifierMap = <strong class="jxr_keyword">new</strong> ConcurrentHashMap<>();
+<a class="jxr_linenumber" name="L686" href="#L686">686</a>
+<a class="jxr_linenumber" name="L687" href="#L687">687</a> <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> ConcurrentHashMap<Class,Optional<Listifier<?>>> listifierMap = <strong class="jxr_keyword">new</strong> ConcurrentHashMap<>();
+<a class="jxr_linenumber" name="L688" href="#L688">688</a>
+<a class="jxr_linenumber" name="L689" href="#L689">689</a> <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> ConcurrentHashMap<Class,Optional<Swapper<?>>> swapperMap = <strong class="jxr_keyword">new</strong> ConcurrentHashMap<>();
+<a class="jxr_linenumber" name="L690" href="#L690">690</a>
+<a class="jxr_linenumber" name="L691" href="#L691">691</a> <strong class="jxr_keyword">protected</strong> <a name="BasicBeanConverter" href="../../../../../org/apache/juneau/junit/bct/BasicBeanConverter.html#BasicBeanConverter">BasicBeanConverter</a>(Builder b) {
+<a class="jxr_linenumber" name="L692" href="#L692">692</a> stringifiers = <strong class="jxr_keyword">new</strong> ArrayList<>(b.stringifiers);
+<a class="jxr_linenumber" name="L693" href="#L693">693</a> listifiers = <strong class="jxr_keyword">new</strong> ArrayList<>(b.listifiers);
+<a class="jxr_linenumber" name="L694" href="#L694">694</a> swappers = <strong class="jxr_keyword">new</strong> ArrayList<>(b.swappers);
+<a class="jxr_linenumber" name="L695" href="#L695">695</a> propertyExtractors = <strong class="jxr_keyword">new</strong> ArrayList<>(b.propertyExtractors);
+<a class="jxr_linenumber" name="L696" href="#L696">696</a> settings = <strong class="jxr_keyword">new</strong> HashMap<>(b.settings);
+<a class="jxr_linenumber" name="L697" href="#L697">697</a> Collections.reverse(stringifiers);
+<a class="jxr_linenumber" name="L698" href="#L698">698</a> Collections.reverse(listifiers);
+<a class="jxr_linenumber" name="L699" href="#L699">699</a> Collections.reverse(swappers);
+<a class="jxr_linenumber" name="L700" href="#L700">700</a> Collections.reverse(propertyExtractors);
+<a class="jxr_linenumber" name="L701" href="#L701">701</a> }
+<a class="jxr_linenumber" name="L702" href="#L702">702</a>
+<a class="jxr_linenumber" name="L703" href="#L703">703</a> @Override
+<a class="jxr_linenumber" name="L704" href="#L704">704</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> canListify(Object o) {
+<a class="jxr_linenumber" name="L705" href="#L705">705</a> o = swap(o);
+<a class="jxr_linenumber" name="L706" href="#L706">706</a> <strong class="jxr_keyword">if</strong> (o == <strong class="jxr_keyword">null</strong>)
+<a class="jxr_linenumber" name="L707" href="#L707">707</a> <strong class="jxr_keyword">return</strong> false;
+<a class="jxr_linenumber" name="L708" href="#L708">708</a> <strong class="jxr_keyword">var</strong> c = o.getClass();
+<a class="jxr_linenumber" name="L709" href="#L709">709</a> <strong class="jxr_keyword">return</strong> o instanceof List || c.isArray() || listifierMap.computeIfAbsent(c, <strong class="jxr_keyword">this</strong>::findListifier).isPresent();
+<a class="jxr_linenumber" name="L710" href="#L710">710</a> }
+<a class="jxr_linenumber" name="L711" href="#L711">711</a>
+<a class="jxr_linenumber" name="L712" href="#L712">712</a> @Override
+<a class="jxr_linenumber" name="L713" href="#L713">713</a> <strong class="jxr_keyword">public</strong> String getNested(Object o, NestedTokenizer.Token token) {
+<a class="jxr_linenumber" name="L714" href="#L714">714</a> assertArgNotNull(<span class="jxr_string">"token"</span>, token);
+<a class="jxr_linenumber" name="L715" href="#L715">715</a>
+<a class="jxr_linenumber" name="L716" href="#L716">716</a> <strong class="jxr_keyword">if</strong> (o == <strong class="jxr_keyword">null</strong>)
+<a class="jxr_linenumber" name="L717" href="#L717">717</a> <strong class="jxr_keyword">return</strong> getSetting(SETTING_nullValue, <strong class="jxr_keyword">null</strong>);
+<a class="jxr_linenumber" name="L718" href="#L718">718</a>
+<a class="jxr_linenumber" name="L719" href="#L719">719</a> <em class="jxr_comment">// Handle #{...} syntax for iterating over collections/arrays</em>
+<a class="jxr_linenumber" name="L720" href="#L720">720</a> <strong class="jxr_keyword">if</strong> (eq(<span class="jxr_string">"#"</span>, token.getValue()) && canListify(o)) {
+<a class="jxr_linenumber" name="L721" href="#L721">721</a> <strong class="jxr_keyword">return</strong> listify(o).stream().map(x -> token.getNested().stream().map(x2 -> getNested(x, x2)).collect(joining(<span class="jxr_string">","</span>, <span class="jxr_string">"{"</span>, <span class="jxr_string">"}"</span>))).collect(joining(<span class="jxr_string">","</span>, <span class="jxr_string">"["</span>, <span class="jxr_string">"]"</span>));
+<a class="jxr_linenumber" name="L722" href="#L722">722</a> }
+<a class="jxr_linenumber" name="L723" href="#L723">723</a>
+<a class="jxr_linenumber" name="L724" href="#L724">724</a> <em class="jxr_comment">// Original logic for regular property access</em>
+<a class="jxr_linenumber" name="L725" href="#L725">725</a> <strong class="jxr_keyword">var</strong> pn = token.getValue();
+<a class="jxr_linenumber" name="L726" href="#L726">726</a> <strong class="jxr_keyword">var</strong> selfValue = getSetting(SETTING_selfValue, <span class="jxr_string">"<self>"</span>);
+<a class="jxr_linenumber" name="L727" href="#L727">727</a>
+<a class="jxr_linenumber" name="L728" href="#L728">728</a> <em class="jxr_comment">// Handle special values</em>
+<a class="jxr_linenumber" name="L729" href="#L729">729</a> Object e;
+<a class="jxr_linenumber" name="L730" href="#L730">730</a> <strong class="jxr_keyword">if</strong> (pn.equals(selfValue)) {
+<a class="jxr_linenumber" name="L731" href="#L731">731</a> e = o; <em class="jxr_comment">// Return the object itself</em>
+<a class="jxr_linenumber" name="L732" href="#L732">732</a> } <strong class="jxr_keyword">else</strong> {
+<a class="jxr_linenumber" name="L733" href="#L733">733</a> e = ofNullable(getProperty(o, pn)).orElse(<strong class="jxr_keyword">null</strong>);
+<a class="jxr_linenumber" name="L734" href="#L734">734</a> }
+<a class="jxr_linenumber" name="L735" href="#L735">735</a> <strong class="jxr_keyword">if</strong> (e == <strong class="jxr_keyword">null</strong> || !token.hasNested())
+<a class="jxr_linenumber" name="L736" href="#L736">736</a> <strong class="jxr_keyword">return</strong> stringify(e);
+<a class="jxr_linenumber" name="L737" href="#L737">737</a> <strong class="jxr_keyword">return</strong> token.getNested().stream().map(x -> getNested(e, x)).map(<strong class="jxr_keyword">this</strong>::stringify).collect(joining(<span class="jxr_string">","</span>, <span class="jxr_string">"{"</span>, <span class="jxr_string">"}"</span>));
+<a class="jxr_linenumber" name="L738" href="#L738">738</a> }
+<a class="jxr_linenumber" name="L739" href="#L739">739</a>
+<a class="jxr_linenumber" name="L740" href="#L740">740</a> @Override
+<a class="jxr_linenumber" name="L741" href="#L741">741</a> <strong class="jxr_keyword">public</strong> Object getProperty(Object object, String name) {
+<a class="jxr_linenumber" name="L742" href="#L742">742</a> <strong class="jxr_keyword">var</strong> o = swap(object);
+<a class="jxr_linenumber" name="L743" href="#L743">743</a> <strong class="jxr_keyword">return</strong> propertyExtractors.stream().filter(x -> x.canExtract(<strong class="jxr_keyword">this</strong>, o, name)).findFirst()
+<a class="jxr_linenumber" name="L744" href="#L744">744</a> .orElseThrow(() -> runtimeException(<span class="jxr_string">"Could not find extractor for object of type {0}"</span>, o.getClass().getName())).extract(<strong class="jxr_keyword">this</strong>, o, name);
+<a class="jxr_linenumber" name="L745" href="#L745">745</a> }
+<a class="jxr_linenumber" name="L746" href="#L746">746</a>
+<a class="jxr_linenumber" name="L747" href="#L747">747</a> @Override
+<a class="jxr_linenumber" name="L748" href="#L748">748</a> @SuppressWarnings(<span class="jxr_string">"unchecked"</span>)
+<a class="jxr_linenumber" name="L749" href="#L749">749</a> <strong class="jxr_keyword">public</strong> <T> T getSetting(String key, T def) {
+<a class="jxr_linenumber" name="L750" href="#L750">750</a> <strong class="jxr_keyword">return</strong> (T)settings.getOrDefault(key, def);
+<a class="jxr_linenumber" name="L751" href="#L751">751</a> }
+<a class="jxr_linenumber" name="L752" href="#L752">752</a>
+<a class="jxr_linenumber" name="L753" href="#L753">753</a> @Override
+<a class="jxr_linenumber" name="L754" href="#L754">754</a> @SuppressWarnings(<span class="jxr_string">"unchecked"</span>)
+<a class="jxr_linenumber" name="L755" href="#L755">755</a> <strong class="jxr_keyword">public</strong> List<Object> listify(Object o) {
+<a class="jxr_linenumber" name="L756" href="#L756">756</a> assertArgNotNull(<span class="jxr_string">"o"</span>, o);
+<a class="jxr_linenumber" name="L757" href="#L757">757</a> o = swap(o);
+<a class="jxr_linenumber" name="L758" href="#L758">758</a> <strong class="jxr_keyword">if</strong> (o instanceof List)
+<a class="jxr_linenumber" name="L759" href="#L759">759</a> <strong class="jxr_keyword">return</strong> (List<Object>)o;
+<a class="jxr_linenumber" name="L760" href="#L760">760</a> <strong class="jxr_keyword">var</strong> c = o.getClass();
+<a class="jxr_linenumber" name="L761" href="#L761">761</a> <strong class="jxr_keyword">if</strong> (c.isArray())
+<a class="jxr_linenumber" name="L762" href="#L762">762</a> <strong class="jxr_keyword">return</strong> arrayToList(o);
+<a class="jxr_linenumber" name="L763" href="#L763">763</a> <strong class="jxr_keyword">var</strong> o2 = o;
+<a class="jxr_linenumber" name="L764" href="#L764">764</a> <strong class="jxr_keyword">return</strong> listifierMap.computeIfAbsent(c, <strong class="jxr_keyword">this</strong>::findListifier).map(x -> (<a name="Listifier" href="../../../../../org/apache/juneau/junit/bct/Listifier.html#Listifier">Listifier</a>)x).map(x -> (List<Object>)x.apply(<strong class="jxr_keyword">this</strong>, o2))
+<a class="jxr_linenumber" name="L765" href="#L765">765</a> .orElseThrow(() -> illegalArg(<span class="jxr_string">"Object of type {0} could not be converted to a list."</span>, scn(o2)));
+<a class="jxr_linenumber" name="L766" href="#L766">766</a> }
+<a class="jxr_linenumber" name="L767" href="#L767">767</a>
+<a class="jxr_linenumber" name="L768" href="#L768">768</a> @Override
+<a class="jxr_linenumber" name="L769" href="#L769">769</a> @SuppressWarnings(<span class="jxr_string">"unchecked"</span>)
+<a class="jxr_linenumber" name="L770" href="#L770">770</a> <strong class="jxr_keyword">public</strong> String stringify(Object o) {
+<a class="jxr_linenumber" name="L771" href="#L771">771</a> o = swap(o);
+<a class="jxr_linenumber" name="L772" href="#L772">772</a> <strong class="jxr_keyword">if</strong> (o == <strong class="jxr_keyword">null</strong>)
+<a class="jxr_linenumber" name="L773" href="#L773">773</a> <strong class="jxr_keyword">return</strong> getSetting(SETTING_nullValue, <strong class="jxr_keyword">null</strong>);
+<a class="jxr_linenumber" name="L774" href="#L774">774</a> <strong class="jxr_keyword">var</strong> c = o.getClass();
+<a class="jxr_linenumber" name="L775" href="#L775">775</a> <strong class="jxr_keyword">var</strong> stringifier = stringifierMap.computeIfAbsent(c, <strong class="jxr_keyword">this</strong>::findStringifier);
+<a class="jxr_linenumber" name="L776" href="#L776">776</a> <strong class="jxr_keyword">if</strong> (stringifier.isEmpty()) {
+<a class="jxr_linenumber" name="L777" href="#L777">777</a> stringifier = of(canListify(o) ? (bc, o2) -> bc.stringify(bc.listify(o2)) : (bc, o2) -> safeToString(o2));
+<a class="jxr_linenumber" name="L778" href="#L778">778</a> stringifierMap.putIfAbsent(c, stringifier);
+<a class="jxr_linenumber" name="L779" href="#L779">779</a> }
+<a class="jxr_linenumber" name="L780" href="#L780">780</a> <strong class="jxr_keyword">var</strong> o2 = o;
+<a class="jxr_linenumber" name="L781" href="#L781">781</a> <strong class="jxr_keyword">return</strong> stringifier.map(x -> (<a name="Stringifier" href="../../../../../org/apache/juneau/junit/bct/Stringifier.html#Stringifier">Stringifier</a>)x).map(x -> x.apply(<strong class="jxr_keyword">this</strong>, o2)).map(Utils::safeToString).orElse(<strong class="jxr_keyword">null</strong>);
+<a class="jxr_linenumber" name="L782" href="#L782">782</a> }
+<a class="jxr_linenumber" name="L783" href="#L783">783</a>
+<a class="jxr_linenumber" name="L784" href="#L784">784</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L785" href="#L785">785</a> <em class="jxr_javadoccomment"> * Builder class for configuring BasicBeanConverter instances.</em>
+<a class="jxr_linenumber" name="L786" href="#L786">786</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L787" href="#L787">787</a> <em class="jxr_javadoccomment"> * <p>This builder provides a fluent interface for registering custom type handlers</em>
+<a class="jxr_linenumber" name="L788" href="#L788">788</a> <em class="jxr_javadoccomment"> * and configuring conversion settings. All registration methods support method chaining</em>
+<a class="jxr_linenumber" name="L789" href="#L789">789</a> <em class="jxr_javadoccomment"> * for convenient configuration.</p></em>
+<a class="jxr_linenumber" name="L790" href="#L790">790</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L791" href="#L791">791</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Handler Registration:</h5></em>
+<a class="jxr_linenumber" name="L792" href="#L792">792</a> <em class="jxr_javadoccomment"> * <ul></em>
+<a class="jxr_linenumber" name="L793" href="#L793">793</a> <em class="jxr_javadoccomment"> * <li><b>Stringifiers:</b> Custom string conversion logic for specific types</li></em>
+<a class="jxr_linenumber" name="L794" href="#L794">794</a> <em class="jxr_javadoccomment"> * <li><b>Listifiers:</b> Custom list conversion logic for collection-like types</li></em>
+<a class="jxr_linenumber" name="L795" href="#L795">795</a> <em class="jxr_javadoccomment"> * <li><b>Swappers:</b> Pre-processing transformation logic for wrapper types</li></em>
+<a class="jxr_linenumber" name="L796" href="#L796">796</a> <em class="jxr_javadoccomment"> * </ul></em>
+<a class="jxr_linenumber" name="L797" href="#L797">797</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L798" href="#L798">798</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Registration Order:</h5></em>
+<a class="jxr_linenumber" name="L799" href="#L799">799</a> <em class="jxr_javadoccomment"> * <p>Handlers are checked in reverse registration order (last registered wins).</em>
+<a class="jxr_linenumber" name="L800" href="#L800">800</a> <em class="jxr_javadoccomment"> * This allows overriding default handlers by registering more specific ones later.</p></em>
+<a class="jxr_linenumber" name="L801" href="#L801">801</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L802" href="#L802">802</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Inheritance Support:</h5></em>
+<a class="jxr_linenumber" name="L803" href="#L803">803</a> <em class="jxr_javadoccomment"> * <p>All handlers support class inheritance and interface implementation.</em>
+<a class="jxr_linenumber" name="L804" href="#L804">804</a> <em class="jxr_javadoccomment"> * When looking up a handler, the system checks:</p></em>
+<a class="jxr_linenumber" name="L805" href="#L805">805</a> <em class="jxr_javadoccomment"> * <ol></em>
+<a class="jxr_linenumber" name="L806" href="#L806">806</a> <em class="jxr_javadoccomment"> * <li>Exact class match</li></em>
+<a class="jxr_linenumber" name="L807" href="#L807">807</a> <em class="jxr_javadoccomment"> * <li>Interface matches (in order of interface declaration)</li></em>
+<a class="jxr_linenumber" name="L808" href="#L808">808</a> <em class="jxr_javadoccomment"> * <li>Superclass matches (walking up the inheritance hierarchy)</li></em>
+<a class="jxr_linenumber" name="L809" href="#L809">809</a> <em class="jxr_javadoccomment"> * </ol></em>
+<a class="jxr_linenumber" name="L810" href="#L810">810</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L811" href="#L811">811</a> <em class="jxr_javadoccomment"> * <h5 class='section'>Usage Example:</h5></em>
+<a class="jxr_linenumber" name="L812" href="#L812">812</a> <em class="jxr_javadoccomment"> * <p class='bjava'></em>
+<a class="jxr_linenumber" name="L813" href="#L813">813</a> <em class="jxr_javadoccomment"> * <jk>var</jk> <jv>converter</jv> = BasicBeanConverter.<jsm>builder</jsm>()</em>
+<a class="jxr_linenumber" name="L814" href="#L814">814</a> <em class="jxr_javadoccomment"> * .defaultSettings()</em>
+<a class="jxr_linenumber" name="L815" href="#L815">815</a> <em class="jxr_javadoccomment"> * <jc>// Custom stringification for LocalDateTime</jc></em>
+<a class="jxr_linenumber" name="L816" href="#L816">816</a> <em class="jxr_javadoccomment"> * .addStringifier(LocalDateTime.<jk>class</jk>, (<jp>dt</jp>, <jp>conv</jp>) -></em>
+<a class="jxr_linenumber" name="L817" href="#L817">817</a> <em class="jxr_javadoccomment"> * <jp>dt</jp>.format(DateTimeFormatter.<jsf>ISO_LOCAL_DATE_TIME</jsf>))</em>
+<a class="jxr_linenumber" name="L818" href="#L818">818</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L819" href="#L819">819</a> <em class="jxr_javadoccomment"> * <jc>// Custom collection handling for custom type</jc></em>
+<a class="jxr_linenumber" name="L820" href="#L820">820</a> <em class="jxr_javadoccomment"> * .addListifier(MyIterable.<jk>class</jk>, (<jp>iter</jp>, <jp>conv</jp>) -></em>
+<a class="jxr_linenumber" name="L821" href="#L821">821</a> <em class="jxr_javadoccomment"> * <jp>iter</jp>.stream().collect(toList()))</em>
+<a class="jxr_linenumber" name="L822" href="#L822">822</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L823" href="#L823">823</a> <em class="jxr_javadoccomment"> * <jc>// Custom transformation for wrapper type</jc></em>
+<a class="jxr_linenumber" name="L824" href="#L824">824</a> <em class="jxr_javadoccomment"> * .addSwapper(LazyValue.<jk>class</jk>, (<jp>lazy</jp>, <jp>conv</jp>) -></em>
+<a class="jxr_linenumber" name="L825" href="#L825">825</a> <em class="jxr_javadoccomment"> * <jp>lazy</jp>.isComputed() ? <jp>lazy</jp>.get() : <jk>null</jk>)</em>
+<a class="jxr_linenumber" name="L826" href="#L826">826</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L827" href="#L827">827</a> <em class="jxr_javadoccomment"> * <jc>// Configure settings</jc></em>
+<a class="jxr_linenumber" name="L828" href="#L828">828</a> <em class="jxr_javadoccomment"> * .addSetting(<jsf>SETTING_nullValue</jsf>, <js>"&lt;null&gt;"</js>)</em>
+<a class="jxr_linenumber" name="L829" href="#L829">829</a> <em class="jxr_javadoccomment"> * .addSetting(<jsf>SETTING_fieldSeparator</jsf>, <js>" | "</js>)</em>
+<a class="jxr_linenumber" name="L830" href="#L830">830</a> <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="L831" href="#L831">831</a> <em class="jxr_javadoccomment"> * <jc>// Add default handlers for common types</jc></em>
+<a class="jxr_linenumber" name="L832" href="#L832">832</a> <em class="jxr_javadoccomment"> * .defaultSettings()</em>
+<a class="jxr_linenumber" name="L833" href="#L833">833</a> <em class="jxr_javadoccomment"> * .build();</em>
+<a class="jxr_linenumber" name="L834" href="#L834">834</a> <em class="jxr_javadoccomment"> * </p></em>
+<a class="jxr_linenumber" name="L835" href="#L835">835</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L836" href="#L836">836</a>
+<a class="jxr_linenumber" name="L837" href="#L837">837</a> @Override
+<a class="jxr_linenumber" name="L838" href="#L838">838</a> @SuppressWarnings(<span class="jxr_string">"unchecked"</span>)
+<a class="jxr_linenumber" name="L839" href="#L839">839</a> <strong class="jxr_keyword">public</strong> Object swap(Object o) {
+<a class="jxr_linenumber" name="L840" href="#L840">840</a> <strong class="jxr_keyword">if</strong> (o == <strong class="jxr_keyword">null</strong>)
+<a class="jxr_linenumber" name="L841" href="#L841">841</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="L842" href="#L842">842</a> <strong class="jxr_keyword">var</strong> c = o.getClass();
+<a class="jxr_linenumber" name="L843" href="#L843">843</a> <strong class="jxr_keyword">var</strong> swapper = swapperMap.computeIfAbsent(c, <strong class="jxr_keyword">this</strong>::findSwapper);
+<a class="jxr_linenumber" name="L844" href="#L844">844</a> <strong class="jxr_keyword">if</strong> (swapper.isPresent())
+<a class="jxr_linenumber" name="L845" href="#L845">845</a> <strong class="jxr_keyword">return</strong> swap(swapper.map(x -> (<a name="Swapper" href="../../../../../org/apache/juneau/junit/bct/Swapper.html#Swapper">Swapper</a>)x).map(x -> x.apply(<strong class="jxr_keyword">this</strong>, o)).orElse(<strong class="jxr_keyword">null</strong>));
+<a class="jxr_linenumber" name="L846" href="#L846">846</a> <strong class="jxr_keyword">return</strong> o;
+<a class="jxr_linenumber" name="L847" href="#L847">847</a> }
+<a class="jxr_linenumber" name="L848" href="#L848">848</a>
+<a class="jxr_linenumber" name="L849" href="#L849">849</a> <strong class="jxr_keyword">private</strong> Optional<Listifier<?>> findListifier(Class<?> c) {
+<a class="jxr_linenumber" name="L850" href="#L850">850</a> <strong class="jxr_keyword">if</strong> (c == <strong class="jxr_keyword">null</strong>)
+<a class="jxr_linenumber" name="L851" href="#L851">851</a> <strong class="jxr_keyword">return</strong> empty();
+<a class="jxr_linenumber" name="L852" href="#L852">852</a> <strong class="jxr_keyword">var</strong> l = listifiers.stream().filter(x -> x.forClass.isAssignableFrom(c)).findFirst().orElse(<strong class="jxr_keyword">null</strong>);
+<a class="jxr_linenumber" name="L853" href="#L853">853</a> <strong class="jxr_keyword">if</strong> (nn(l))
+<a class="jxr_linenumber" name="L854" href="#L854">854</a> <strong class="jxr_keyword">return</strong> of(l.function);
+<a class="jxr_linenumber" name="L855" href="#L855">855</a> <strong class="jxr_keyword">return</strong> findListifier(c.getSuperclass());
+<a class="jxr_linenumber" name="L856" href="#L856">856</a> }
+<a class="jxr_linenumber" name="L857" href="#L857">857</a>
+<a class="jxr_linenumber" name="L858" href="#L858">858</a> <strong class="jxr_keyword">private</strong> Optional<Stringifier<?>> findStringifier(Class<?> c) {
+<a class="jxr_linenumber" name="L859" href="#L859">859</a> <strong class="jxr_keyword">if</strong> (c == <strong class="jxr_keyword">null</strong>)
+<a class="jxr_linenumber" name="L860" href="#L860">860</a> <strong class="jxr_keyword">return</strong> empty();
+<a class="jxr_linenumber" name="L861" href="#L861">861</a> <strong class="jxr_keyword">var</strong> s = stringifiers.stream().filter(x -> x.forClass.isAssignableFrom(c)).findFirst().orElse(<strong class="jxr_keyword">null</strong>);
+<a class="jxr_linenumber" name="L862" href="#L862">862</a> <strong class="jxr_keyword">if</strong> (nn(s))
+<a class="jxr_linenumber" name="L863" href="#L863">863</a> <strong class="jxr_keyword">return</strong> of(s.function);
+<a class="jxr_linenumber" name="L864" href="#L864">864</a> <strong class="jxr_keyword">return</strong> findStringifier(c.getSuperclass());
+<a class="jxr_linenumber" name="L865" href="#L865">865</a> }
+<a class="jxr_linenumber" name="L866" href="#L866">866</a>
+<a class="jxr_linenumber" name="L867" href="#L867">867</a> <strong class="jxr_keyword">private</strong> Optional<Swapper<?>> findSwapper(Class<?> c) {
+<a class="jxr_linenumber" name="L868" href="#L868">868</a> <strong class="jxr_keyword">if</strong> (c == <strong class="jxr_keyword">null</strong>)
+<a class="jxr_linenumber" name="L869" href="#L869">869</a> <strong class="jxr_keyword">return</strong> empty();
+<a class="jxr_linenumber" name="L870" href="#L870">870</a> <strong class="jxr_keyword">var</strong> s = swappers.stream().filter(x -> x.forClass.isAssignableFrom(c)).findFirst().orElse(<strong class="jxr_keyword">null</strong>);
+<a class="jxr_linenumber" name="L871" href="#L871">871</a> <strong class="jxr_keyword">if</strong> (nn(s))
+<a class="jxr_linenumber" name="L872" href="#L872">872</a> <strong class="jxr_keyword">return</strong> of(s.function);
+<a class="jxr_linenumber" name="L873" href="#L873">873</a> <strong class="jxr_keyword">return</strong> findSwapper(c.getSuperclass());
+<a class="jxr_linenumber" name="L874" href="#L874">874</a> }
+<a class="jxr_linenumber" name="L875" href="#L875">875</a> }
</pre>
<hr/>
<div id="footer">© 2016–2025 <a href="https://www.apache.org/">The Apache Software Foundation</a></div>
diff --git a/site/xref/org/apache/juneau/rest/RestContext.html b/site/xref/org/apache/juneau/rest/RestContext.html
index 18016971cf..a695fe9785 100644
--- a/site/xref/org/apache/juneau/rest/RestContext.html
+++ b/site/xref/org/apache/juneau/rest/RestContext.html
@@ -977,11 +977,11 @@
<a class="jxr_linenumber" name="L969" href="#L969">969</a> <em class="jxr_javadoccomment"> * <li class='jm'>{@link #config()}</em>
<a class="jxr_linenumber" name="L970" href="#L970">970</a> <em class="jxr_javadoccomment"> * </ul></em>
<a class="jxr_linenumber" name="L971" href="#L971">971</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L972" href="#L972">972</a> <em class="jxr_javadoccomment"> * @param config The new config file.</em>
+<a class="jxr_linenumber" name="L972" href="#L972">972</a> <em class="jxr_javadoccomment"> * @param value The new config file.</em>
<a class="jxr_linenumber" name="L973" href="#L973">973</a> <em class="jxr_javadoccomment"> * @return This object.</em>
<a class="jxr_linenumber" name="L974" href="#L974">974</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L975" href="#L975">975</a> <strong class="jxr_keyword">public</strong> Builder config(<a name="Config" href="../../../../org/apache/juneau/config/Config.html#Config">Config</a> config) {
-<a class="jxr_linenumber" name="L976" href="#L976">976</a> <strong class="jxr_keyword">this</strong>.config = config;
+<a class="jxr_linenumber" name="L975" href="#L975">975</a> <strong class="jxr_keyword">public</strong> Builder config(<a name="Config" href="../../../../org/apache/juneau/config/Config.html#Config">Config</a> value) {
+<a class="jxr_linenumber" name="L976" href="#L976">976</a> <strong class="jxr_keyword">this</strong>.config = value;
<a class="jxr_linenumber" name="L977" href="#L977">977</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>;
<a class="jxr_linenumber" name="L978" href="#L978">978</a> }
<a class="jxr_linenumber" name="L979" href="#L979">979</a>
diff --git a/site/xref/org/apache/juneau/rest/staticfile/StaticFiles.html b/site/xref/org/apache/juneau/rest/staticfile/StaticFiles.html
index fcc61acc8c..ce918be8f9 100644
--- a/site/xref/org/apache/juneau/rest/staticfile/StaticFiles.html
+++ b/site/xref/org/apache/juneau/rest/staticfile/StaticFiles.html
@@ -161,22 +161,22 @@
<a class="jxr_linenumber" name="L153" href="#L153">153</a> <em class="jxr_javadoccomment">/**</em>
<a class="jxr_linenumber" name="L154" href="#L154">154</a> <em class="jxr_javadoccomment"> * Replaces the MIME types registry used for determining content types.</em>
<a class="jxr_linenumber" name="L155" href="#L155">155</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L156" href="#L156">156</a> <em class="jxr_javadoccomment"> * @param mimeTypes The new MIME types registry.</em>
+<a class="jxr_linenumber" name="L156" href="#L156">156</a> <em class="jxr_javadoccomment"> * @param value The new MIME types registry.</em>
<a class="jxr_linenumber" name="L157" href="#L157">157</a> <em class="jxr_javadoccomment"> * @return This object.</em>
<a class="jxr_linenumber" name="L158" href="#L158">158</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L159" href="#L159">159</a> <strong class="jxr_keyword">public</strong> Builder mimeTypes(<a name="MimeTypeDetector" href="../../../../../org/apache/juneau/common/utils/MimeTypeDetector.html#MimeTypeDetector">MimeTypeDetector</a> mimeTypes) {
-<a class="jxr_linenumber" name="L160" href="#L160">160</a> <strong class="jxr_keyword">this</strong>.mimeTypes = mimeTypes;
+<a class="jxr_linenumber" name="L159" href="#L159">159</a> <strong class="jxr_keyword">public</strong> Builder mimeTypes(<a name="MimeTypeDetector" href="../../../../../org/apache/juneau/common/utils/MimeTypeDetector.html#MimeTypeDetector">MimeTypeDetector</a> value) {
+<a class="jxr_linenumber" name="L160" href="#L160">160</a> <strong class="jxr_keyword">this</strong>.mimeTypes = value;
<a class="jxr_linenumber" name="L161" href="#L161">161</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>;
<a class="jxr_linenumber" name="L162" href="#L162">162</a> }
<a class="jxr_linenumber" name="L163" href="#L163">163</a>
<a class="jxr_linenumber" name="L164" href="#L164">164</a> <em class="jxr_javadoccomment">/**</em>
<a class="jxr_linenumber" name="L165" href="#L165">165</a> <em class="jxr_javadoccomment"> * Adds a file system directory to the lookup paths.</em>
<a class="jxr_linenumber" name="L166" href="#L166">166</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="L167" href="#L167">167</a> <em class="jxr_javadoccomment"> * @param path The directory path.</em>
+<a class="jxr_linenumber" name="L167" href="#L167">167</a> <em class="jxr_javadoccomment"> * @param value The directory path.</em>
<a class="jxr_linenumber" name="L168" href="#L168">168</a> <em class="jxr_javadoccomment"> * @return This object.</em>
<a class="jxr_linenumber" name="L169" href="#L169">169</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="L170" href="#L170">170</a> <strong class="jxr_keyword">public</strong> Builder path(Path path) {
-<a class="jxr_linenumber" name="L171" href="#L171">171</a> fileFinder.path(path);
+<a class="jxr_linenumber" name="L170" href="#L170">170</a> <strong class="jxr_keyword">public</strong> Builder path(Path value) {
+<a class="jxr_linenumber" name="L171" href="#L171">171</a> fileFinder.path(value);
<a class="jxr_linenumber" name="L172" href="#L172">172</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>;
<a class="jxr_linenumber" name="L173" href="#L173">173</a> }
<a class="jxr_linenumber" name="L174" href="#L174">174</a>