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/12/12 23:52:46 UTC

(juneau) branch asf-staging updated: Deploy documentation staging from 82ea6d092a2319038bf095881a14b2a89f4e8ca7 82ea6d092a2319038bf095881a14b2a89f4e8ca7

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 5c74ba32ef Deploy documentation staging from 82ea6d092a2319038bf095881a14b2a89f4e8ca7 82ea6d092a2319038bf095881a14b2a89f4e8ca7
5c74ba32ef is described below

commit 5c74ba32ef29159a4ab547720dbc7019fae8b4fb
Author: github-actions[bot] <gi...@users.noreply.github.com>
AuthorDate: Fri Dec 12 23:52:41 2025 +0000

    Deploy documentation staging from 82ea6d092a2319038bf095881a14b2a89f4e8ca7 82ea6d092a2319038bf095881a14b2a89f4e8ca7
---
 site/xref/org/apache/juneau/BeanPropertyMeta.html  |    2 +-
 .../org/apache/juneau/BeanTraverseSession.html     |  803 ++++++------
 .../org/apache/juneau/collections/JsonMap.html     |    2 +-
 .../juneau/commons/utils/CollectionUtils.html      | 1347 ++++++++++----------
 .../apache/juneau/commons/utils/StringUtils.html   |    2 +-
 site/xref/org/apache/juneau/rest/RestSession.html  |    2 +-
 .../juneau/rest/httppart/RequestPathParams.html    |    2 +-
 .../apache/juneau/rest/mock/MockPathResolver.html  |  443 +++----
 .../org/apache/juneau/rest/util/UrlPathMatch.html  |  253 ++--
 .../org/apache/juneau/serializer/Serializer.html   |    2 +-
 10 files changed, 1432 insertions(+), 1426 deletions(-)

diff --git a/site/xref/org/apache/juneau/BeanPropertyMeta.html b/site/xref/org/apache/juneau/BeanPropertyMeta.html
index 0b8f46431e..b95c607084 100644
--- a/site/xref/org/apache/juneau/BeanPropertyMeta.html
+++ b/site/xref/org/apache/juneau/BeanPropertyMeta.html
@@ -838,7 +838,7 @@
 <a class="jxr_linenumber" name="L830" href="#L830">830</a> 				<strong class="jxr_keyword">return</strong> (Map)field.get(bean);
 <a class="jxr_linenumber" name="L831" href="#L831">831</a> 			<strong class="jxr_keyword">throw</strong> bex(beanMeta.getClassMeta(), <span class="jxr_string">"Getter or public field not defined on property ''{0}''"</span>, name);
 <a class="jxr_linenumber" name="L832" href="#L832">832</a> 		}
-<a class="jxr_linenumber" name="L833" href="#L833">833</a> 		<strong class="jxr_keyword">return</strong> Collections.EMPTY_MAP;
+<a class="jxr_linenumber" name="L833" href="#L833">833</a> 		<strong class="jxr_keyword">return</strong> mape();
 <a class="jxr_linenumber" name="L834" href="#L834">834</a> 	}
 <a class="jxr_linenumber" name="L835" href="#L835">835</a> 
 <a class="jxr_linenumber" name="L836" href="#L836">836</a> 	<em class="jxr_javadoccomment">/**</em>
diff --git a/site/xref/org/apache/juneau/BeanTraverseSession.html b/site/xref/org/apache/juneau/BeanTraverseSession.html
index 06268b8a38..a2b62746eb 100644
--- a/site/xref/org/apache/juneau/BeanTraverseSession.html
+++ b/site/xref/org/apache/juneau/BeanTraverseSession.html
@@ -25,407 +25,408 @@
 <a class="jxr_linenumber" name="L17" href="#L17">17</a>  <strong class="jxr_keyword">package</strong> org.apache.juneau;
 <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.collections.JsonMap.*;
-<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.commons.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.text.*;
-<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.collections.*;
-<a class="jxr_linenumber" name="L27" href="#L27">27</a>  <strong class="jxr_keyword">import</strong> org.apache.juneau.commons.utils.*;
-<a class="jxr_linenumber" name="L28" href="#L28">28</a>  
-<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"> * ContextSession that lives for the duration of a single use of {@link BeanTraverseContext}.</em>
-<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"> * &lt;p&gt;</em>
-<a class="jxr_linenumber" name="L33" href="#L33">33</a>  <em class="jxr_javadoccomment"> * Used by serializers and other classes that traverse POJOs for the following purposes:</em>
-<a class="jxr_linenumber" name="L34" href="#L34">34</a>  <em class="jxr_javadoccomment"> * &lt;ul class='spaced-list'&gt;</em>
-<a class="jxr_linenumber" name="L35" href="#L35">35</a>  <em class="jxr_javadoccomment"> * 	&lt;li&gt;</em>
-<a class="jxr_linenumber" name="L36" href="#L36">36</a>  <em class="jxr_javadoccomment"> * 		Keeping track of how deep it is in a model for indentation purposes.</em>
-<a class="jxr_linenumber" name="L37" href="#L37">37</a>  <em class="jxr_javadoccomment"> * 	&lt;li&gt;</em>
-<a class="jxr_linenumber" name="L38" href="#L38">38</a>  <em class="jxr_javadoccomment"> * 		Ensuring infinite loops don't occur by setting a limit on how deep to traverse a model.</em>
-<a class="jxr_linenumber" name="L39" href="#L39">39</a>  <em class="jxr_javadoccomment"> * 	&lt;li&gt;</em>
-<a class="jxr_linenumber" name="L40" href="#L40">40</a>  <em class="jxr_javadoccomment"> * 		Ensuring infinite loops don't occur from loops in the model (when detectRecursions is enabled.</em>
-<a class="jxr_linenumber" name="L41" href="#L41">41</a>  <em class="jxr_javadoccomment"> * &lt;/ul&gt;</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"> * &lt;h5 class='section'&gt;Notes:&lt;/h5&gt;&lt;ul&gt;</em>
-<a class="jxr_linenumber" name="L44" href="#L44">44</a>  <em class="jxr_javadoccomment"> * 	&lt;li class='warn'&gt;This class is not thread safe and is typically discarded after one use.</em>
-<a class="jxr_linenumber" name="L45" href="#L45">45</a>  <em class="jxr_javadoccomment"> * &lt;/ul&gt;</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>  <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">class</strong> <a name="BeanTraverseSession" href="../../../org/apache/juneau/BeanTraverseSession.html#BeanTraverseSession">BeanTraverseSession</a> <strong class="jxr_keyword">extends</strong> BeanSession {
-<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">	 * Builder class.</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>  	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">abstract</strong> <strong class="jxr_keyword">class</strong> Builder <strong class="jxr_keyword">extends</strong> BeanSession.Builder {
-<a class="jxr_linenumber" name="L53" href="#L53">53</a>  
-<a class="jxr_linenumber" name="L54" href="#L54">54</a>  		BeanTraverseContext ctx;
-<a class="jxr_linenumber" name="L55" href="#L55">55</a>  		<strong class="jxr_keyword">int</strong> initialDepth;
-<a class="jxr_linenumber" name="L56" href="#L56">56</a>  
-<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">		 * Constructor</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">		 * @param ctx The context creating this session.</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>  		<strong class="jxr_keyword">protected</strong> Builder(<a name="BeanTraverseContext" href="../../../org/apache/juneau/BeanTraverseContext.html#BeanTraverseContext">BeanTraverseContext</a> ctx) {
-<a class="jxr_linenumber" name="L63" href="#L63">63</a>  			<strong class="jxr_keyword">super</strong>(ctx.getBeanContext());
-<a class="jxr_linenumber" name="L64" href="#L64">64</a>  			<strong class="jxr_keyword">this</strong>.ctx = ctx;
-<a class="jxr_linenumber" name="L65" href="#L65">65</a>  			initialDepth = ctx.initialDepth;
-<a class="jxr_linenumber" name="L66" href="#L66">66</a>  		}
-<a class="jxr_linenumber" name="L67" href="#L67">67</a>  
-<a class="jxr_linenumber" name="L68" href="#L68">68</a>  		@Override <em class="jxr_comment">/* Overridden from Builder */</em>
-<a class="jxr_linenumber" name="L69" href="#L69">69</a>  		<strong class="jxr_keyword">public</strong> &lt;T&gt; Builder apply(Class&lt;T&gt; type, Consumer&lt;T&gt; apply) {
-<a class="jxr_linenumber" name="L70" href="#L70">70</a>  			<strong class="jxr_keyword">super</strong>.apply(type, apply);
-<a class="jxr_linenumber" name="L71" href="#L71">71</a>  			<strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>;
-<a class="jxr_linenumber" name="L72" href="#L72">72</a>  		}
-<a class="jxr_linenumber" name="L73" href="#L73">73</a>  
-<a class="jxr_linenumber" name="L74" href="#L74">74</a>  		@Override <em class="jxr_comment">/* Overridden from Builder */</em>
-<a class="jxr_linenumber" name="L75" href="#L75">75</a>  		<strong class="jxr_keyword">public</strong> Builder debug(Boolean value) {
-<a class="jxr_linenumber" name="L76" href="#L76">76</a>  			<strong class="jxr_keyword">super</strong>.debug(value);
-<a class="jxr_linenumber" name="L77" href="#L77">77</a>  			<strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>;
-<a class="jxr_linenumber" name="L78" href="#L78">78</a>  		}
-<a class="jxr_linenumber" name="L79" href="#L79">79</a>  
-<a class="jxr_linenumber" name="L80" href="#L80">80</a>  		@Override <em class="jxr_comment">/* Overridden from Builder */</em>
-<a class="jxr_linenumber" name="L81" href="#L81">81</a>  		<strong class="jxr_keyword">public</strong> Builder locale(Locale value) {
-<a class="jxr_linenumber" name="L82" href="#L82">82</a>  			<strong class="jxr_keyword">super</strong>.locale(value);
-<a class="jxr_linenumber" name="L83" href="#L83">83</a>  			<strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>;
-<a class="jxr_linenumber" name="L84" href="#L84">84</a>  		}
-<a class="jxr_linenumber" name="L85" href="#L85">85</a>  
-<a class="jxr_linenumber" name="L86" href="#L86">86</a>  		@Override <em class="jxr_comment">/* Overridden from Builder */</em>
-<a class="jxr_linenumber" name="L87" href="#L87">87</a>  		<strong class="jxr_keyword">public</strong> Builder localeDefault(Locale value) {
-<a class="jxr_linenumber" name="L88" href="#L88">88</a>  			<strong class="jxr_keyword">super</strong>.localeDefault(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>  
-<a class="jxr_linenumber" name="L92" href="#L92">92</a>  		@Override <em class="jxr_comment">/* Overridden from Builder */</em>
-<a class="jxr_linenumber" name="L93" href="#L93">93</a>  		<strong class="jxr_keyword">public</strong> Builder mediaType(<a name="MediaType" href="../../../org/apache/juneau/MediaType.html#MediaType">MediaType</a> value) {
-<a class="jxr_linenumber" name="L94" href="#L94">94</a>  			<strong class="jxr_keyword">super</strong>.mediaType(value);
-<a class="jxr_linenumber" name="L95" href="#L95">95</a>  			<strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>;
-<a class="jxr_linenumber" name="L96" href="#L96">96</a>  		}
-<a class="jxr_linenumber" name="L97" href="#L97">97</a>  
-<a class="jxr_linenumber" name="L98" href="#L98">98</a>  		@Override <em class="jxr_comment">/* Overridden from Builder */</em>
-<a class="jxr_linenumber" name="L99" href="#L99">99</a>  		<strong class="jxr_keyword">public</strong> Builder mediaTypeDefault(<a name="MediaType" href="../../../org/apache/juneau/MediaType.html#MediaType">MediaType</a> value) {
-<a class="jxr_linenumber" name="L100" href="#L100">100</a> 			<strong class="jxr_keyword">super</strong>.mediaTypeDefault(value);
-<a class="jxr_linenumber" name="L101" href="#L101">101</a> 			<strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>;
-<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> 		@Override <em class="jxr_comment">/* Overridden from Builder */</em>
-<a class="jxr_linenumber" name="L105" href="#L105">105</a> 		<strong class="jxr_keyword">public</strong> Builder properties(Map&lt;String,Object&gt; value) {
-<a class="jxr_linenumber" name="L106" href="#L106">106</a> 			<strong class="jxr_keyword">super</strong>.properties(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> 		@Override <em class="jxr_comment">/* Overridden from Builder */</em>
-<a class="jxr_linenumber" name="L111" href="#L111">111</a> 		<strong class="jxr_keyword">public</strong> Builder property(String key, Object value) {
-<a class="jxr_linenumber" name="L112" href="#L112">112</a> 			<strong class="jxr_keyword">super</strong>.property(key, value);
-<a class="jxr_linenumber" name="L113" href="#L113">113</a> 			<strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>;
-<a class="jxr_linenumber" name="L114" href="#L114">114</a> 		}
-<a class="jxr_linenumber" name="L115" href="#L115">115</a> 
-<a class="jxr_linenumber" name="L116" href="#L116">116</a> 		@Override <em class="jxr_comment">/* Overridden from Builder */</em>
-<a class="jxr_linenumber" name="L117" href="#L117">117</a> 		<strong class="jxr_keyword">public</strong> Builder timeZone(TimeZone value) {
-<a class="jxr_linenumber" name="L118" href="#L118">118</a> 			<strong class="jxr_keyword">super</strong>.timeZone(value);
-<a class="jxr_linenumber" name="L119" href="#L119">119</a> 			<strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>;
-<a class="jxr_linenumber" name="L120" href="#L120">120</a> 		}
-<a class="jxr_linenumber" name="L121" href="#L121">121</a> 
-<a class="jxr_linenumber" name="L122" href="#L122">122</a> 		@Override <em class="jxr_comment">/* Overridden from Builder */</em>
-<a class="jxr_linenumber" name="L123" href="#L123">123</a> 		<strong class="jxr_keyword">public</strong> Builder timeZoneDefault(TimeZone value) {
-<a class="jxr_linenumber" name="L124" href="#L124">124</a> 			<strong class="jxr_keyword">super</strong>.timeZoneDefault(value);
-<a class="jxr_linenumber" name="L125" href="#L125">125</a> 			<strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>;
-<a class="jxr_linenumber" name="L126" href="#L126">126</a> 		}
-<a class="jxr_linenumber" name="L127" href="#L127">127</a> 
-<a class="jxr_linenumber" name="L128" href="#L128">128</a> 		@Override <em class="jxr_comment">/* Overridden from Builder */</em>
-<a class="jxr_linenumber" name="L129" href="#L129">129</a> 		<strong class="jxr_keyword">public</strong> Builder unmodifiable() {
-<a class="jxr_linenumber" name="L130" href="#L130">130</a> 			<strong class="jxr_keyword">super</strong>.unmodifiable();
-<a class="jxr_linenumber" name="L131" href="#L131">131</a> 			<strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>;
-<a class="jxr_linenumber" name="L132" href="#L132">132</a> 		}
-<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> 	<strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">class</strong> StackElement {
-<a class="jxr_linenumber" name="L136" href="#L136">136</a> 		<strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong> depth;
-<a class="jxr_linenumber" name="L137" href="#L137">137</a> 		<strong class="jxr_keyword">final</strong> String name;
-<a class="jxr_linenumber" name="L138" href="#L138">138</a> 		<strong class="jxr_keyword">final</strong> Object o;
-<a class="jxr_linenumber" name="L139" href="#L139">139</a> 		<strong class="jxr_keyword">final</strong> ClassMeta&lt;?&gt; aType;
-<a class="jxr_linenumber" name="L140" href="#L140">140</a> 
-<a class="jxr_linenumber" name="L141" href="#L141">141</a> 		StackElement(<strong class="jxr_keyword">int</strong> depth, String name, Object o, ClassMeta&lt;?&gt; aType) {
-<a class="jxr_linenumber" name="L142" href="#L142">142</a> 			<strong class="jxr_keyword">this</strong>.depth = depth;
-<a class="jxr_linenumber" name="L143" href="#L143">143</a> 			<strong class="jxr_keyword">this</strong>.name = name;
-<a class="jxr_linenumber" name="L144" href="#L144">144</a> 			<strong class="jxr_keyword">this</strong>.o = o;
-<a class="jxr_linenumber" name="L145" href="#L145">145</a> 			<strong class="jxr_keyword">this</strong>.aType = aType;
-<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> 		String toString(<strong class="jxr_keyword">boolean</strong> simple) {
-<a class="jxr_linenumber" name="L149" href="#L149">149</a> 			<strong class="jxr_keyword">var</strong> sb = <strong class="jxr_keyword">new</strong> StringBuilder().append('[').append(depth).append(']').append(' ');
-<a class="jxr_linenumber" name="L150" href="#L150">150</a> 			sb.append(isEmpty(name) ? <span class="jxr_string">"&lt;noname&gt;"</span> : name).append(':');
-<a class="jxr_linenumber" name="L151" href="#L151">151</a> 			sb.append(aType.toString(simple));
-<a class="jxr_linenumber" name="L152" href="#L152">152</a> 			<strong class="jxr_keyword">if</strong> (aType != aType.getSerializedClassMeta(BeanTraverseSession.<strong class="jxr_keyword">this</strong>))
-<a class="jxr_linenumber" name="L153" href="#L153">153</a> 				sb.append('/').append(aType.getSerializedClassMeta(BeanTraverseSession.<strong class="jxr_keyword">this</strong>).toString(simple));
-<a class="jxr_linenumber" name="L154" href="#L154">154</a> 			<strong class="jxr_keyword">return</strong> sb.toString();
-<a class="jxr_linenumber" name="L155" href="#L155">155</a> 		}
-<a class="jxr_linenumber" name="L156" href="#L156">156</a> 	}
-<a class="jxr_linenumber" name="L157" href="#L157">157</a> 
-<a class="jxr_linenumber" name="L158" href="#L158">158</a> 	<strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <a name="BeanTraverseContext" href="../../../org/apache/juneau/BeanTraverseContext.html#BeanTraverseContext">BeanTraverseContext</a> ctx;
-<a class="jxr_linenumber" name="L159" href="#L159">159</a> 	<strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> Map&lt;Object,Object&gt; set;                                           <em class="jxr_comment">// Contains the current objects in the current branch of the model.</em>
-<a class="jxr_linenumber" name="L160" href="#L160">160</a> 
-<a class="jxr_linenumber" name="L161" href="#L161">161</a> 	<strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> LinkedList&lt;StackElement&gt; stack = <strong class="jxr_keyword">new</strong> LinkedList&lt;&gt;();              <em class="jxr_comment">// Contains the current objects in the current branch of the model.</em>
-<a class="jxr_linenumber" name="L162" href="#L162">162</a> 	<em class="jxr_comment">// Writable properties</em>
-<a class="jxr_linenumber" name="L163" href="#L163">163</a> 	<strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> isBottom;                                                       <em class="jxr_comment">// If 'true', then we're at a leaf in the model (i.e. a String, Number, Boolean, or null).</em>
-<a class="jxr_linenumber" name="L164" href="#L164">164</a> 	<strong class="jxr_keyword">private</strong> BeanPropertyMeta currentProperty;
-<a class="jxr_linenumber" name="L165" href="#L165">165</a> 
-<a class="jxr_linenumber" name="L166" href="#L166">166</a> 	<strong class="jxr_keyword">private</strong> ClassMeta&lt;?&gt; currentClass;
-<a class="jxr_linenumber" name="L167" href="#L167">167</a> 
-<a class="jxr_linenumber" name="L168" href="#L168">168</a> 	<em class="jxr_javadoccomment">/** The current indentation depth into the model. */</em>
-<a class="jxr_linenumber" name="L169" href="#L169">169</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">int</strong> indent;
-<a class="jxr_linenumber" name="L170" href="#L170">170</a> 
-<a class="jxr_linenumber" name="L171" href="#L171">171</a> 	<strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">int</strong> depth;
-<a class="jxr_linenumber" name="L172" href="#L172">172</a> 
-<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">	 * Constructor.</em>
-<a class="jxr_linenumber" name="L175" href="#L175">175</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L176" href="#L176">176</a> <em class="jxr_javadoccomment">	 * @param builder The builder for this object.</em>
-<a class="jxr_linenumber" name="L177" href="#L177">177</a> <em class="jxr_javadoccomment">	 */</em>
-<a class="jxr_linenumber" name="L178" href="#L178">178</a> 	<strong class="jxr_keyword">protected</strong> <a name="BeanTraverseSession" href="../../../org/apache/juneau/BeanTraverseSession.html#BeanTraverseSession">BeanTraverseSession</a>(Builder builder) {
-<a class="jxr_linenumber" name="L179" href="#L179">179</a> 		<strong class="jxr_keyword">super</strong>(builder);
-<a class="jxr_linenumber" name="L180" href="#L180">180</a> 		ctx = builder.ctx;
-<a class="jxr_linenumber" name="L181" href="#L181">181</a> 		indent = builder.initialDepth;
-<a class="jxr_linenumber" name="L182" href="#L182">182</a> 		<strong class="jxr_keyword">if</strong> (isDetectRecursions() || isDebug()) {
-<a class="jxr_linenumber" name="L183" href="#L183">183</a> 			set = <strong class="jxr_keyword">new</strong> IdentityHashMap&lt;&gt;();
-<a class="jxr_linenumber" name="L184" href="#L184">184</a> 		} <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="L185" href="#L185">185</a> 			set = Collections.emptyMap();
-<a class="jxr_linenumber" name="L186" href="#L186">186</a> 		}
-<a class="jxr_linenumber" name="L187" href="#L187">187</a> 	}
-<a class="jxr_linenumber" name="L188" href="#L188">188</a> 
-<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">	 * Initial depth.</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">	 * @see BeanTraverseContext.Builder#initialDepth(int)</em>
-<a class="jxr_linenumber" name="L193" href="#L193">193</a> <em class="jxr_javadoccomment">	 * @return</em>
-<a class="jxr_linenumber" name="L194" href="#L194">194</a> <em class="jxr_javadoccomment">	 * 	The initial indentation level at the root.</em>
-<a class="jxr_linenumber" name="L195" href="#L195">195</a> <em class="jxr_javadoccomment">	 */</em>
-<a class="jxr_linenumber" name="L196" href="#L196">196</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong> getInitialDepth() { <strong class="jxr_keyword">return</strong> ctx.getInitialDepth(); }
-<a class="jxr_linenumber" name="L197" href="#L197">197</a> 
-<a class="jxr_linenumber" name="L198" href="#L198">198</a> 	<em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L199" href="#L199">199</a> <em class="jxr_javadoccomment">	 * Returns information used to determine at what location in the parse a failure occurred.</em>
-<a class="jxr_linenumber" name="L200" href="#L200">200</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L201" href="#L201">201</a> <em class="jxr_javadoccomment">	 * @return A map, typically containing something like &lt;c&gt;{line:123,column:456,currentProperty:"foobar"}&lt;/c&gt;</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> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">final</strong> <a name="JsonMap" href="../../../org/apache/juneau/collections/JsonMap.html#JsonMap">JsonMap</a> getLastLocation() {
-<a class="jxr_linenumber" name="L204" href="#L204">204</a> 		Predicate&lt;Object&gt; nn = Utils::nn;
-<a class="jxr_linenumber" name="L205" href="#L205">205</a> 		Predicate&lt;Collection&lt;?&gt;&gt; nec = Utils::isNotEmpty;
-<a class="jxr_linenumber" name="L206" href="#L206">206</a> 		<em class="jxr_comment">// @formatter:off</em>
-<a class="jxr_linenumber" name="L207" href="#L207">207</a> 		<strong class="jxr_keyword">return</strong> <a name="JsonMap" href="../../../org/apache/juneau/collections/JsonMap.html#JsonMap">JsonMap</a>
-<a class="jxr_linenumber" name="L208" href="#L208">208</a> 			.create()
-<a class="jxr_linenumber" name="L209" href="#L209">209</a> 			.appendIf(nn, <span class="jxr_string">"currentClass"</span>, currentClass)
-<a class="jxr_linenumber" name="L210" href="#L210">210</a> 			.appendIf(nn, <span class="jxr_string">"currentProperty"</span>, currentProperty)
-<a class="jxr_linenumber" name="L211" href="#L211">211</a> 			.appendIf(nec, <span class="jxr_string">"stack"</span>, stack);
-<a class="jxr_linenumber" name="L212" href="#L212">212</a> 		<em class="jxr_comment">// @formatter:on</em>
-<a class="jxr_linenumber" name="L213" href="#L213">213</a> 	}
-<a class="jxr_linenumber" name="L214" href="#L214">214</a> 
-<a class="jxr_linenumber" name="L215" href="#L215">215</a> 	<em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L216" href="#L216">216</a> <em class="jxr_javadoccomment">	 * Max traversal depth.</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 BeanTraverseContext.Builder#maxDepth(int)</em>
-<a class="jxr_linenumber" name="L219" href="#L219">219</a> <em class="jxr_javadoccomment">	 * @return</em>
-<a class="jxr_linenumber" name="L220" href="#L220">220</a> <em class="jxr_javadoccomment">	 * 	The depth at which traversal is aborted if depth is reached in the POJO tree.</em>
-<a class="jxr_linenumber" name="L221" href="#L221">221</a> <em class="jxr_javadoccomment">	 *	&lt;br&gt;If this depth is exceeded, an exception is thrown.</em>
-<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> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong> getMaxDepth() { <strong class="jxr_keyword">return</strong> ctx.getMaxDepth(); }
-<a class="jxr_linenumber" name="L224" href="#L224">224</a> 
-<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">	 * Automatically detect POJO recursions.</em>
-<a class="jxr_linenumber" name="L227" href="#L227">227</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L228" href="#L228">228</a> <em class="jxr_javadoccomment">	 * @see BeanTraverseContext.Builder#detectRecursions()</em>
-<a class="jxr_linenumber" name="L229" href="#L229">229</a> <em class="jxr_javadoccomment">	 * @return</em>
-<a class="jxr_linenumber" name="L230" href="#L230">230</a> <em class="jxr_javadoccomment">	 * 	&lt;jk&gt;true&lt;/jk&gt; if recursions should be checked for during traversal.</em>
-<a class="jxr_linenumber" name="L231" href="#L231">231</a> <em class="jxr_javadoccomment">	 */</em>
-<a class="jxr_linenumber" name="L232" href="#L232">232</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">boolean</strong> isDetectRecursions() { <strong class="jxr_keyword">return</strong> ctx.isDetectRecursions(); }
-<a class="jxr_linenumber" name="L233" href="#L233">233</a> 
-<a class="jxr_linenumber" name="L234" href="#L234">234</a> 	<em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L235" href="#L235">235</a> <em class="jxr_javadoccomment">	 * Ignore recursion errors.</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">	 * @see BeanTraverseContext.Builder#ignoreRecursions()</em>
-<a class="jxr_linenumber" name="L238" href="#L238">238</a> <em class="jxr_javadoccomment">	 * @return</em>
-<a class="jxr_linenumber" name="L239" href="#L239">239</a> <em class="jxr_javadoccomment">	 * 	&lt;jk&gt;true&lt;/jk&gt; if when we encounter the same object when traversing a tree, we set the value to &lt;jk&gt;null&lt;/jk&gt;.</em>
-<a class="jxr_linenumber" name="L240" href="#L240">240</a> <em class="jxr_javadoccomment">	 * 	&lt;br&gt;Otherwise, a {@link BeanRecursionException} is thrown with the message &lt;js&gt;"Recursion occurred, stack=..."&lt;/js&gt;.</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> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">boolean</strong> isIgnoreRecursions() { <strong class="jxr_keyword">return</strong> ctx.isIgnoreRecursions(); }
-<a class="jxr_linenumber" name="L243" href="#L243">243</a> 
-<a class="jxr_linenumber" name="L244" href="#L244">244</a> 	<em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L245" href="#L245">245</a> <em class="jxr_javadoccomment">	 * Returns the inner type of an {@link Optional}.</em>
-<a class="jxr_linenumber" name="L246" href="#L246">246</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L247" href="#L247">247</a> <em class="jxr_javadoccomment">	 * @param cm The meta to check.</em>
-<a class="jxr_linenumber" name="L248" href="#L248">248</a> <em class="jxr_javadoccomment">	 * @return The inner type of an {@link Optional}.</em>
-<a class="jxr_linenumber" name="L249" href="#L249">249</a> <em class="jxr_javadoccomment">	 */</em>
-<a class="jxr_linenumber" name="L250" href="#L250">250</a> 	<strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">final</strong> ClassMeta&lt;?&gt; getOptionalType(ClassMeta&lt;?&gt; cm) {
-<a class="jxr_linenumber" name="L251" href="#L251">251</a> 		<strong class="jxr_keyword">if</strong> (cm.isOptional())
-<a class="jxr_linenumber" name="L252" href="#L252">252</a> 			<strong class="jxr_keyword">return</strong> getOptionalType(cm.getElementType());
-<a class="jxr_linenumber" name="L253" href="#L253">253</a> 		<strong class="jxr_keyword">return</strong> cm;
-<a class="jxr_linenumber" name="L254" href="#L254">254</a> 	}
-<a class="jxr_linenumber" name="L255" href="#L255">255</a> 
-<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">	 * If the specified object is an {@link Optional}, returns the inner object.</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">	 * @param o The object to check.</em>
-<a class="jxr_linenumber" name="L260" href="#L260">260</a> <em class="jxr_javadoccomment">	 * @return The inner object if it's an {@link Optional}, &lt;jk&gt;null&lt;/jk&gt; if it's &lt;jk&gt;null&lt;/jk&gt;, or else the same object.</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> 	<strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">final</strong> Object getOptionalValue(Object o) {
-<a class="jxr_linenumber" name="L263" href="#L263">263</a> 		<strong class="jxr_keyword">if</strong> (o == <strong class="jxr_keyword">null</strong>)
-<a class="jxr_linenumber" name="L264" href="#L264">264</a> 			<strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="L265" href="#L265">265</a> 		<strong class="jxr_keyword">if</strong> (o instanceof Optional&lt;?&gt; o2)
-<a class="jxr_linenumber" name="L266" href="#L266">266</a> 			<strong class="jxr_keyword">return</strong> getOptionalValue(o2.orElse(<strong class="jxr_keyword">null</strong>));
-<a class="jxr_linenumber" name="L267" href="#L267">267</a> 		<strong class="jxr_keyword">return</strong> o;
-<a class="jxr_linenumber" name="L268" href="#L268">268</a> 	}
-<a class="jxr_linenumber" name="L269" href="#L269">269</a> 
-<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> <em class="jxr_javadoccomment">	 * Returns the current stack trace.</em>
-<a class="jxr_linenumber" name="L272" href="#L272">272</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L273" href="#L273">273</a> <em class="jxr_javadoccomment">	 * @param full</em>
-<a class="jxr_linenumber" name="L274" href="#L274">274</a> <em class="jxr_javadoccomment">	 * 	If &lt;jk&gt;true&lt;/jk&gt;, returns a full stack trace.</em>
-<a class="jxr_linenumber" name="L275" href="#L275">275</a> <em class="jxr_javadoccomment">	 * @return The current stack trace.</em>
-<a class="jxr_linenumber" name="L276" href="#L276">276</a> <em class="jxr_javadoccomment">	 */</em>
-<a class="jxr_linenumber" name="L277" href="#L277">277</a> 	<strong class="jxr_keyword">protected</strong> String getStack(<strong class="jxr_keyword">boolean</strong> full) {
-<a class="jxr_linenumber" name="L278" href="#L278">278</a> 		<strong class="jxr_keyword">var</strong> sb = <strong class="jxr_keyword">new</strong> StringBuilder();
-<a class="jxr_linenumber" name="L279" href="#L279">279</a> 		stack.forEach(x -&gt; {
-<a class="jxr_linenumber" name="L280" href="#L280">280</a> 			<strong class="jxr_keyword">if</strong> (full) {
-<a class="jxr_linenumber" name="L281" href="#L281">281</a> 				sb.append(<span class="jxr_string">"\n\t"</span>);
-<a class="jxr_linenumber" name="L282" href="#L282">282</a> 				<strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">var</strong> i = 1; i &lt; x.depth; i++)
-<a class="jxr_linenumber" name="L283" href="#L283">283</a> 					sb.append(<span class="jxr_string">"  "</span>);
-<a class="jxr_linenumber" name="L284" href="#L284">284</a> 				<strong class="jxr_keyword">if</strong> (x.depth &gt; 0)
-<a class="jxr_linenumber" name="L285" href="#L285">285</a> 					sb.append(<span class="jxr_string">"-&gt;"</span>);
-<a class="jxr_linenumber" name="L286" href="#L286">286</a> 				sb.append(x.toString(false));
-<a class="jxr_linenumber" name="L287" href="#L287">287</a> 			} <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="L288" href="#L288">288</a> 				sb.append(<span class="jxr_string">" &gt; "</span>).append(x.toString(<strong class="jxr_keyword">true</strong>));
-<a class="jxr_linenumber" name="L289" href="#L289">289</a> 			}
-<a class="jxr_linenumber" name="L290" href="#L290">290</a> 		});
-<a class="jxr_linenumber" name="L291" href="#L291">291</a> 		<strong class="jxr_keyword">return</strong> sb.toString();
-<a class="jxr_linenumber" name="L292" href="#L292">292</a> 	}
-<a class="jxr_linenumber" name="L293" href="#L293">293</a> 
-<a class="jxr_linenumber" name="L294" href="#L294">294</a> 	<em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L295" href="#L295">295</a> <em class="jxr_javadoccomment">	 * Same as {@link ClassMeta#isOptional()} but gracefully handles a null {@link ClassMeta}.</em>
-<a class="jxr_linenumber" name="L296" href="#L296">296</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L297" href="#L297">297</a> <em class="jxr_javadoccomment">	 * @param cm The meta to check.</em>
-<a class="jxr_linenumber" name="L298" href="#L298">298</a> <em class="jxr_javadoccomment">	 * @return &lt;jk&gt;true&lt;/jk&gt; if the specified meta is an {@link Optional}.</em>
-<a class="jxr_linenumber" name="L299" href="#L299">299</a> <em class="jxr_javadoccomment">	 */</em>
-<a class="jxr_linenumber" name="L300" href="#L300">300</a> 	<strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> isOptional(ClassMeta&lt;?&gt; cm) {
-<a class="jxr_linenumber" name="L301" href="#L301">301</a> 		<strong class="jxr_keyword">return</strong> (nn(cm) &amp;&amp; cm.isOptional());
-<a class="jxr_linenumber" name="L302" href="#L302">302</a> 	}
-<a class="jxr_linenumber" name="L303" href="#L303">303</a> 
-<a class="jxr_linenumber" name="L304" href="#L304">304</a> 	<em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L305" href="#L305">305</a> <em class="jxr_javadoccomment">	 * Returns &lt;jk&gt;true&lt;/jk&gt; if we're processing the root node.</em>
-<a class="jxr_linenumber" name="L306" href="#L306">306</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L307" href="#L307">307</a> <em class="jxr_javadoccomment">	 * &lt;p&gt;</em>
-<a class="jxr_linenumber" name="L308" href="#L308">308</a> <em class="jxr_javadoccomment">	 * Must be called after {@link #push(String, Object, ClassMeta)} and before {@link #pop()}.</em>
-<a class="jxr_linenumber" name="L309" href="#L309">309</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L310" href="#L310">310</a> <em class="jxr_javadoccomment">	 * @return &lt;jk&gt;true&lt;/jk&gt; if we're processing the root node.</em>
-<a class="jxr_linenumber" name="L311" href="#L311">311</a> <em class="jxr_javadoccomment">	 */</em>
-<a class="jxr_linenumber" name="L312" href="#L312">312</a> 	<strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">boolean</strong> isRoot() { <strong class="jxr_keyword">return</strong> depth == 1; }
-<a class="jxr_linenumber" name="L313" href="#L313">313</a> 
-<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">	 * Logs a warning message.</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">	 * @param t The throwable that was thrown (if there was one).</em>
-<a class="jxr_linenumber" name="L318" href="#L318">318</a> <em class="jxr_javadoccomment">	 * @param msg The warning message.</em>
-<a class="jxr_linenumber" name="L319" href="#L319">319</a> <em class="jxr_javadoccomment">	 * @param args Optional {@link MessageFormat}-style arguments.</em>
-<a class="jxr_linenumber" name="L320" href="#L320">320</a> <em class="jxr_javadoccomment">	 */</em>
-<a class="jxr_linenumber" name="L321" href="#L321">321</a> 	<strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">void</strong> onError(Throwable t, String msg, Object...args) {
-<a class="jxr_linenumber" name="L322" href="#L322">322</a> 		<strong class="jxr_keyword">super</strong>.addWarning(msg, args);
-<a class="jxr_linenumber" name="L323" href="#L323">323</a> 	}
-<a class="jxr_linenumber" name="L324" href="#L324">324</a> 
-<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">	 * Pop an object off the stack.</em>
-<a class="jxr_linenumber" name="L327" href="#L327">327</a> <em class="jxr_javadoccomment">	 */</em>
-<a class="jxr_linenumber" name="L328" href="#L328">328</a> 	<strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">void</strong> pop() {
-<a class="jxr_linenumber" name="L329" href="#L329">329</a> 		indent--;
-<a class="jxr_linenumber" name="L330" href="#L330">330</a> 		depth--;
-<a class="jxr_linenumber" name="L331" href="#L331">331</a> 		<strong class="jxr_keyword">if</strong> ((isDetectRecursions() || isDebug()) &amp;&amp; ! isBottom) {
-<a class="jxr_linenumber" name="L332" href="#L332">332</a> 			Object o = stack.removeLast().o;
-<a class="jxr_linenumber" name="L333" href="#L333">333</a> 			Object o2 = set.remove(o);
-<a class="jxr_linenumber" name="L334" href="#L334">334</a> 			<strong class="jxr_keyword">if</strong> (o2 == <strong class="jxr_keyword">null</strong>)
-<a class="jxr_linenumber" name="L335" href="#L335">335</a> 				onError(<strong class="jxr_keyword">null</strong>, <span class="jxr_string">"Couldn't remove object of type ''{0}'' on attribute ''{1}'' from object stack."</span>, cn(o), stack);
-<a class="jxr_linenumber" name="L336" href="#L336">336</a> 		}
-<a class="jxr_linenumber" name="L337" href="#L337">337</a> 		isBottom = false;
-<a class="jxr_linenumber" name="L338" href="#L338">338</a> 	}
-<a class="jxr_linenumber" name="L339" href="#L339">339</a> 
-<a class="jxr_linenumber" name="L340" href="#L340">340</a> 	@Override <em class="jxr_comment">/* Overridden from ContextSession */</em>
-<a class="jxr_linenumber" name="L341" href="#L341">341</a> 	<strong class="jxr_keyword">protected</strong> <a name="JsonMap" href="../../../org/apache/juneau/collections/JsonMap.html#JsonMap">JsonMap</a> properties() {
-<a class="jxr_linenumber" name="L342" href="#L342">342</a> 		<strong class="jxr_keyword">return</strong> filteredMap(<span class="jxr_string">"indent"</span>, indent, <span class="jxr_string">"depth"</span>, depth);
-<a class="jxr_linenumber" name="L343" href="#L343">343</a> 	}
-<a class="jxr_linenumber" name="L344" href="#L344">344</a> 
-<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">	 * Push the specified object onto the stack.</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 attrName The attribute name.</em>
-<a class="jxr_linenumber" name="L349" href="#L349">349</a> <em class="jxr_javadoccomment">	 * @param o The current object being traversed.</em>
-<a class="jxr_linenumber" name="L350" href="#L350">350</a> <em class="jxr_javadoccomment">	 * @param eType The expected class type.</em>
-<a class="jxr_linenumber" name="L351" href="#L351">351</a> <em class="jxr_javadoccomment">	 * @return</em>
-<a class="jxr_linenumber" name="L352" href="#L352">352</a> <em class="jxr_javadoccomment">	 * 	The {@link ClassMeta} of the object so that &lt;c&gt;instanceof&lt;/c&gt; operations only need to be performed</em>
-<a class="jxr_linenumber" name="L353" href="#L353">353</a> <em class="jxr_javadoccomment">	 * 	once (since they can be expensive).</em>
-<a class="jxr_linenumber" name="L354" href="#L354">354</a> <em class="jxr_javadoccomment">	 * @throws BeanRecursionException If recursion occurred.</em>
-<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> 	<strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">final</strong> ClassMeta&lt;?&gt; push(String attrName, Object o, ClassMeta&lt;?&gt; eType) <strong class="jxr_keyword">throws</strong> <a name="BeanRecursionException" href="../../../org/apache/juneau/BeanRecursionException.html#BeanRecursionException">BeanRecursionException</a> {
-<a class="jxr_linenumber" name="L357" href="#L357">357</a> 		indent++;
-<a class="jxr_linenumber" name="L358" href="#L358">358</a> 		depth++;
-<a class="jxr_linenumber" name="L359" href="#L359">359</a> 		isBottom = <strong class="jxr_keyword">true</strong>;
-<a class="jxr_linenumber" name="L360" href="#L360">360</a> 		<strong class="jxr_keyword">if</strong> (o == <strong class="jxr_keyword">null</strong>)
-<a class="jxr_linenumber" name="L361" href="#L361">361</a> 			<strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="L362" href="#L362">362</a> 		<strong class="jxr_keyword">var</strong> c = o.getClass();
-<a class="jxr_linenumber" name="L363" href="#L363">363</a> 		<strong class="jxr_keyword">var</strong> cm = (nn(eType) &amp;&amp; c == eType.<strong class="jxr_keyword">inner</strong>()) ? eType : ((o instanceof <a name="ClassMeta" href="../../../org/apache/juneau/ClassMeta.html#ClassMeta">ClassMeta</a>) ? (ClassMeta&lt;?&gt;)o : getClassMeta(c));
-<a class="jxr_linenumber" name="L364" href="#L364">364</a> 		<strong class="jxr_keyword">if</strong> (cm.isCharSequence() || cm.isNumber() || cm.isBoolean())
-<a class="jxr_linenumber" name="L365" href="#L365">365</a> 			<strong class="jxr_keyword">return</strong> cm;
-<a class="jxr_linenumber" name="L366" href="#L366">366</a> 		<strong class="jxr_keyword">if</strong> (depth &gt; getMaxDepth())
-<a class="jxr_linenumber" name="L367" href="#L367">367</a> 			<strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="L368" href="#L368">368</a> 		<strong class="jxr_keyword">if</strong> (isDetectRecursions() || isDebug()) {
-<a class="jxr_linenumber" name="L369" href="#L369">369</a> 			<strong class="jxr_keyword">if</strong> (willRecurse(attrName, o, cm))
-<a class="jxr_linenumber" name="L370" href="#L370">370</a> 				<strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="L371" href="#L371">371</a> 			isBottom = false;
-<a class="jxr_linenumber" name="L372" href="#L372">372</a> 			stack.add(<strong class="jxr_keyword">new</strong> StackElement(stack.size(), attrName, o, cm));
-<a class="jxr_linenumber" name="L373" href="#L373">373</a> 			set.put(o, o);
-<a class="jxr_linenumber" name="L374" href="#L374">374</a> 		}
-<a class="jxr_linenumber" name="L375" href="#L375">375</a> 		<strong class="jxr_keyword">return</strong> cm;
-<a class="jxr_linenumber" name="L376" href="#L376">376</a> 	}
-<a class="jxr_linenumber" name="L377" href="#L377">377</a> 
-<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> <em class="jxr_javadoccomment">	 * Sets the current class being traversed for proper error messages.</em>
-<a class="jxr_linenumber" name="L380" href="#L380">380</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L381" href="#L381">381</a> <em class="jxr_javadoccomment">	 * @param currentClass The current class being traversed.</em>
-<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> 	<strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">void</strong> setCurrentClass(ClassMeta&lt;?&gt; currentClass) { <strong class="jxr_keyword">this</strong>.currentClass = currentClass; }
-<a class="jxr_linenumber" name="L384" href="#L384">384</a> 
-<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">	 * Sets the current bean property being traversed for proper error messages.</em>
-<a class="jxr_linenumber" name="L387" href="#L387">387</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L388" href="#L388">388</a> <em class="jxr_javadoccomment">	 * @param currentProperty The current property being traversed.</em>
-<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> 	<strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">void</strong> setCurrentProperty(BeanPropertyMeta currentProperty) { <strong class="jxr_keyword">this</strong>.currentProperty = currentProperty; }
-<a class="jxr_linenumber" name="L391" href="#L391">391</a> 
-<a class="jxr_linenumber" name="L392" href="#L392">392</a> 	<em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L393" href="#L393">393</a> <em class="jxr_javadoccomment">	 * Returns &lt;jk&gt;true&lt;/jk&gt; if we're about to exceed the max depth for the document.</em>
-<a class="jxr_linenumber" name="L394" href="#L394">394</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L395" href="#L395">395</a> <em class="jxr_javadoccomment">	 * @return &lt;jk&gt;true&lt;/jk&gt; if we're about to exceed the max depth for the document.</em>
-<a class="jxr_linenumber" name="L396" href="#L396">396</a> <em class="jxr_javadoccomment">	 */</em>
-<a class="jxr_linenumber" name="L397" href="#L397">397</a> 	<strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">boolean</strong> willExceedDepth() {
-<a class="jxr_linenumber" name="L398" href="#L398">398</a> 		<strong class="jxr_keyword">return</strong> (depth &gt;= getMaxDepth());
-<a class="jxr_linenumber" name="L399" href="#L399">399</a> 	}
-<a class="jxr_linenumber" name="L400" href="#L400">400</a> 
-<a class="jxr_linenumber" name="L401" href="#L401">401</a> 	<em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L402" href="#L402">402</a> <em class="jxr_javadoccomment">	 * Returns &lt;jk&gt;true&lt;/jk&gt; if {@link BeanTraverseContext.Builder#detectRecursions()} is enabled, and the specified</em>
-<a class="jxr_linenumber" name="L403" href="#L403">403</a> <em class="jxr_javadoccomment">	 * object is already higher up in the traversal chain.</em>
-<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">	 * @param attrName The bean property attribute name, or some other identifier.</em>
-<a class="jxr_linenumber" name="L406" href="#L406">406</a> <em class="jxr_javadoccomment">	 * @param o The object to check for recursion.</em>
-<a class="jxr_linenumber" name="L407" href="#L407">407</a> <em class="jxr_javadoccomment">	 * @param cm The metadata on the object class.</em>
-<a class="jxr_linenumber" name="L408" href="#L408">408</a> <em class="jxr_javadoccomment">	 * @return &lt;jk&gt;true&lt;/jk&gt; if recursion detected.</em>
-<a class="jxr_linenumber" name="L409" href="#L409">409</a> <em class="jxr_javadoccomment">	 * @throws BeanRecursionException If recursion occurred.</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">protected</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">boolean</strong> willRecurse(String attrName, Object o, ClassMeta&lt;?&gt; cm) <strong class="jxr_keyword">throws</strong> <a name="BeanRecursionException" href="../../../org/apache/juneau/BeanRecursionException.html#BeanRecursionException">BeanRecursionException</a> {
-<a class="jxr_linenumber" name="L412" href="#L412">412</a> 		<strong class="jxr_keyword">if</strong> (! (isDetectRecursions() || isDebug()) || ! set.containsKey(o))
-<a class="jxr_linenumber" name="L413" href="#L413">413</a> 			<strong class="jxr_keyword">return</strong> false;
-<a class="jxr_linenumber" name="L414" href="#L414">414</a> 		<strong class="jxr_keyword">if</strong> (isIgnoreRecursions() &amp;&amp; ! isDebug())
-<a class="jxr_linenumber" name="L415" href="#L415">415</a> 			<strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
-<a class="jxr_linenumber" name="L416" href="#L416">416</a> 
-<a class="jxr_linenumber" name="L417" href="#L417">417</a> 		stack.add(<strong class="jxr_keyword">new</strong> StackElement(stack.size(), attrName, o, cm));
-<a class="jxr_linenumber" name="L418" href="#L418">418</a> 		<strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> <a name="BeanRecursionException" href="../../../org/apache/juneau/BeanRecursionException.html#BeanRecursionException">BeanRecursionException</a>(<span class="jxr_string">"Recursion occurred, stack={0}"</span>, getStack(<strong class="jxr_keyword">true</strong>));
-<a class="jxr_linenumber" name="L419" href="#L419">419</a> 	}
-<a class="jxr_linenumber" name="L420" href="#L420">420</a> }
+<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.commons.utils.CollectionUtils.*;
+<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.commons.utils.Utils.*;
+<a class="jxr_linenumber" name="L22" href="#L22">22</a>  
+<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <strong class="jxr_keyword">import</strong> java.text.*;
+<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">import</strong> java.util.*;
+<a class="jxr_linenumber" name="L25" href="#L25">25</a>  <strong class="jxr_keyword">import</strong> java.util.function.*;
+<a class="jxr_linenumber" name="L26" href="#L26">26</a>  
+<a class="jxr_linenumber" name="L27" href="#L27">27</a>  <strong class="jxr_keyword">import</strong> org.apache.juneau.collections.*;
+<a class="jxr_linenumber" name="L28" href="#L28">28</a>  <strong class="jxr_keyword">import</strong> org.apache.juneau.commons.utils.*;
+<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"> * ContextSession that lives for the duration of a single use of {@link BeanTraverseContext}.</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"> * &lt;p&gt;</em>
+<a class="jxr_linenumber" name="L34" href="#L34">34</a>  <em class="jxr_javadoccomment"> * Used by serializers and other classes that traverse POJOs for the following purposes:</em>
+<a class="jxr_linenumber" name="L35" href="#L35">35</a>  <em class="jxr_javadoccomment"> * &lt;ul class='spaced-list'&gt;</em>
+<a class="jxr_linenumber" name="L36" href="#L36">36</a>  <em class="jxr_javadoccomment"> * 	&lt;li&gt;</em>
+<a class="jxr_linenumber" name="L37" href="#L37">37</a>  <em class="jxr_javadoccomment"> * 		Keeping track of how deep it is in a model for indentation purposes.</em>
+<a class="jxr_linenumber" name="L38" href="#L38">38</a>  <em class="jxr_javadoccomment"> * 	&lt;li&gt;</em>
+<a class="jxr_linenumber" name="L39" href="#L39">39</a>  <em class="jxr_javadoccomment"> * 		Ensuring infinite loops don't occur by setting a limit on how deep to traverse a model.</em>
+<a class="jxr_linenumber" name="L40" href="#L40">40</a>  <em class="jxr_javadoccomment"> * 	&lt;li&gt;</em>
+<a class="jxr_linenumber" name="L41" href="#L41">41</a>  <em class="jxr_javadoccomment"> * 		Ensuring infinite loops don't occur from loops in the model (when detectRecursions is enabled.</em>
+<a class="jxr_linenumber" name="L42" href="#L42">42</a>  <em class="jxr_javadoccomment"> * &lt;/ul&gt;</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"> * &lt;h5 class='section'&gt;Notes:&lt;/h5&gt;&lt;ul&gt;</em>
+<a class="jxr_linenumber" name="L45" href="#L45">45</a>  <em class="jxr_javadoccomment"> * 	&lt;li class='warn'&gt;This class is not thread safe and is typically discarded after one use.</em>
+<a class="jxr_linenumber" name="L46" href="#L46">46</a>  <em class="jxr_javadoccomment"> * &lt;/ul&gt;</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>  <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="L49" href="#L49">49</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a name="BeanTraverseSession" href="../../../org/apache/juneau/BeanTraverseSession.html#BeanTraverseSession">BeanTraverseSession</a> <strong class="jxr_keyword">extends</strong> BeanSession {
+<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">	 * Builder class.</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>  	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">abstract</strong> <strong class="jxr_keyword">class</strong> Builder <strong class="jxr_keyword">extends</strong> BeanSession.Builder {
+<a class="jxr_linenumber" name="L54" href="#L54">54</a>  
+<a class="jxr_linenumber" name="L55" href="#L55">55</a>  		BeanTraverseContext ctx;
+<a class="jxr_linenumber" name="L56" href="#L56">56</a>  		<strong class="jxr_keyword">int</strong> initialDepth;
+<a class="jxr_linenumber" name="L57" href="#L57">57</a>  
+<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">		 * Constructor</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">		 * @param ctx The context creating this session.</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>  		<strong class="jxr_keyword">protected</strong> Builder(<a name="BeanTraverseContext" href="../../../org/apache/juneau/BeanTraverseContext.html#BeanTraverseContext">BeanTraverseContext</a> ctx) {
+<a class="jxr_linenumber" name="L64" href="#L64">64</a>  			<strong class="jxr_keyword">super</strong>(ctx.getBeanContext());
+<a class="jxr_linenumber" name="L65" href="#L65">65</a>  			<strong class="jxr_keyword">this</strong>.ctx = ctx;
+<a class="jxr_linenumber" name="L66" href="#L66">66</a>  			initialDepth = ctx.initialDepth;
+<a class="jxr_linenumber" name="L67" href="#L67">67</a>  		}
+<a class="jxr_linenumber" name="L68" href="#L68">68</a>  
+<a class="jxr_linenumber" name="L69" href="#L69">69</a>  		@Override <em class="jxr_comment">/* Overridden from Builder */</em>
+<a class="jxr_linenumber" name="L70" href="#L70">70</a>  		<strong class="jxr_keyword">public</strong> &lt;T&gt; Builder apply(Class&lt;T&gt; type, Consumer&lt;T&gt; apply) {
+<a class="jxr_linenumber" name="L71" href="#L71">71</a>  			<strong class="jxr_keyword">super</strong>.apply(type, apply);
+<a class="jxr_linenumber" name="L72" href="#L72">72</a>  			<strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>;
+<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>  		@Override <em class="jxr_comment">/* Overridden from Builder */</em>
+<a class="jxr_linenumber" name="L76" href="#L76">76</a>  		<strong class="jxr_keyword">public</strong> Builder debug(Boolean value) {
+<a class="jxr_linenumber" name="L77" href="#L77">77</a>  			<strong class="jxr_keyword">super</strong>.debug(value);
+<a class="jxr_linenumber" name="L78" href="#L78">78</a>  			<strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>;
+<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>  		@Override <em class="jxr_comment">/* Overridden from Builder */</em>
+<a class="jxr_linenumber" name="L82" href="#L82">82</a>  		<strong class="jxr_keyword">public</strong> Builder locale(Locale value) {
+<a class="jxr_linenumber" name="L83" href="#L83">83</a>  			<strong class="jxr_keyword">super</strong>.locale(value);
+<a class="jxr_linenumber" name="L84" href="#L84">84</a>  			<strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>;
+<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 Builder */</em>
+<a class="jxr_linenumber" name="L88" href="#L88">88</a>  		<strong class="jxr_keyword">public</strong> Builder localeDefault(Locale value) {
+<a class="jxr_linenumber" name="L89" href="#L89">89</a>  			<strong class="jxr_keyword">super</strong>.localeDefault(value);
+<a class="jxr_linenumber" name="L90" href="#L90">90</a>  			<strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>;
+<a class="jxr_linenumber" name="L91" href="#L91">91</a>  		}
+<a class="jxr_linenumber" name="L92" href="#L92">92</a>  
+<a class="jxr_linenumber" name="L93" href="#L93">93</a>  		@Override <em class="jxr_comment">/* Overridden from Builder */</em>
+<a class="jxr_linenumber" name="L94" href="#L94">94</a>  		<strong class="jxr_keyword">public</strong> Builder mediaType(<a name="MediaType" href="../../../org/apache/juneau/MediaType.html#MediaType">MediaType</a> value) {
+<a class="jxr_linenumber" name="L95" href="#L95">95</a>  			<strong class="jxr_keyword">super</strong>.mediaType(value);
+<a class="jxr_linenumber" name="L96" href="#L96">96</a>  			<strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>;
+<a class="jxr_linenumber" name="L97" href="#L97">97</a>  		}
+<a class="jxr_linenumber" name="L98" href="#L98">98</a>  
+<a class="jxr_linenumber" name="L99" href="#L99">99</a>  		@Override <em class="jxr_comment">/* Overridden from Builder */</em>
+<a class="jxr_linenumber" name="L100" href="#L100">100</a> 		<strong class="jxr_keyword">public</strong> Builder mediaTypeDefault(<a name="MediaType" href="../../../org/apache/juneau/MediaType.html#MediaType">MediaType</a> value) {
+<a class="jxr_linenumber" name="L101" href="#L101">101</a> 			<strong class="jxr_keyword">super</strong>.mediaTypeDefault(value);
+<a class="jxr_linenumber" name="L102" href="#L102">102</a> 			<strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>;
+<a class="jxr_linenumber" name="L103" href="#L103">103</a> 		}
+<a class="jxr_linenumber" name="L104" href="#L104">104</a> 
+<a class="jxr_linenumber" name="L105" href="#L105">105</a> 		@Override <em class="jxr_comment">/* Overridden from Builder */</em>
+<a class="jxr_linenumber" name="L106" href="#L106">106</a> 		<strong class="jxr_keyword">public</strong> Builder properties(Map&lt;String,Object&gt; value) {
+<a class="jxr_linenumber" name="L107" href="#L107">107</a> 			<strong class="jxr_keyword">super</strong>.properties(value);
+<a class="jxr_linenumber" name="L108" href="#L108">108</a> 			<strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>;
+<a class="jxr_linenumber" name="L109" href="#L109">109</a> 		}
+<a class="jxr_linenumber" name="L110" href="#L110">110</a> 
+<a class="jxr_linenumber" name="L111" href="#L111">111</a> 		@Override <em class="jxr_comment">/* Overridden from Builder */</em>
+<a class="jxr_linenumber" name="L112" href="#L112">112</a> 		<strong class="jxr_keyword">public</strong> Builder property(String key, Object value) {
+<a class="jxr_linenumber" name="L113" href="#L113">113</a> 			<strong class="jxr_keyword">super</strong>.property(key, value);
+<a class="jxr_linenumber" name="L114" href="#L114">114</a> 			<strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>;
+<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> 		@Override <em class="jxr_comment">/* Overridden from Builder */</em>
+<a class="jxr_linenumber" name="L118" href="#L118">118</a> 		<strong class="jxr_keyword">public</strong> Builder timeZone(TimeZone value) {
+<a class="jxr_linenumber" name="L119" href="#L119">119</a> 			<strong class="jxr_keyword">super</strong>.timeZone(value);
+<a class="jxr_linenumber" name="L120" href="#L120">120</a> 			<strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>;
+<a class="jxr_linenumber" name="L121" href="#L121">121</a> 		}
+<a class="jxr_linenumber" name="L122" href="#L122">122</a> 
+<a class="jxr_linenumber" name="L123" href="#L123">123</a> 		@Override <em class="jxr_comment">/* Overridden from Builder */</em>
+<a class="jxr_linenumber" name="L124" href="#L124">124</a> 		<strong class="jxr_keyword">public</strong> Builder timeZoneDefault(TimeZone value) {
+<a class="jxr_linenumber" name="L125" href="#L125">125</a> 			<strong class="jxr_keyword">super</strong>.timeZoneDefault(value);
+<a class="jxr_linenumber" name="L126" href="#L126">126</a> 			<strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>;
+<a class="jxr_linenumber" name="L127" href="#L127">127</a> 		}
+<a class="jxr_linenumber" name="L128" href="#L128">128</a> 
+<a class="jxr_linenumber" name="L129" href="#L129">129</a> 		@Override <em class="jxr_comment">/* Overridden from Builder */</em>
+<a class="jxr_linenumber" name="L130" href="#L130">130</a> 		<strong class="jxr_keyword">public</strong> Builder unmodifiable() {
+<a class="jxr_linenumber" name="L131" href="#L131">131</a> 			<strong class="jxr_keyword">super</strong>.unmodifiable();
+<a class="jxr_linenumber" name="L132" href="#L132">132</a> 			<strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>;
+<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> 
+<a class="jxr_linenumber" name="L136" href="#L136">136</a> 	<strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">class</strong> StackElement {
+<a class="jxr_linenumber" name="L137" href="#L137">137</a> 		<strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong> depth;
+<a class="jxr_linenumber" name="L138" href="#L138">138</a> 		<strong class="jxr_keyword">final</strong> String name;
+<a class="jxr_linenumber" name="L139" href="#L139">139</a> 		<strong class="jxr_keyword">final</strong> Object o;
+<a class="jxr_linenumber" name="L140" href="#L140">140</a> 		<strong class="jxr_keyword">final</strong> ClassMeta&lt;?&gt; aType;
+<a class="jxr_linenumber" name="L141" href="#L141">141</a> 
+<a class="jxr_linenumber" name="L142" href="#L142">142</a> 		StackElement(<strong class="jxr_keyword">int</strong> depth, String name, Object o, ClassMeta&lt;?&gt; aType) {
+<a class="jxr_linenumber" name="L143" href="#L143">143</a> 			<strong class="jxr_keyword">this</strong>.depth = depth;
+<a class="jxr_linenumber" name="L144" href="#L144">144</a> 			<strong class="jxr_keyword">this</strong>.name = name;
+<a class="jxr_linenumber" name="L145" href="#L145">145</a> 			<strong class="jxr_keyword">this</strong>.o = o;
+<a class="jxr_linenumber" name="L146" href="#L146">146</a> 			<strong class="jxr_keyword">this</strong>.aType = aType;
+<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> 		String toString(<strong class="jxr_keyword">boolean</strong> simple) {
+<a class="jxr_linenumber" name="L150" href="#L150">150</a> 			<strong class="jxr_keyword">var</strong> sb = <strong class="jxr_keyword">new</strong> StringBuilder().append('[').append(depth).append(']').append(' ');
+<a class="jxr_linenumber" name="L151" href="#L151">151</a> 			sb.append(isEmpty(name) ? <span class="jxr_string">"&lt;noname&gt;"</span> : name).append(':');
+<a class="jxr_linenumber" name="L152" href="#L152">152</a> 			sb.append(aType.toString(simple));
+<a class="jxr_linenumber" name="L153" href="#L153">153</a> 			<strong class="jxr_keyword">if</strong> (aType != aType.getSerializedClassMeta(BeanTraverseSession.<strong class="jxr_keyword">this</strong>))
+<a class="jxr_linenumber" name="L154" href="#L154">154</a> 				sb.append('/').append(aType.getSerializedClassMeta(BeanTraverseSession.<strong class="jxr_keyword">this</strong>).toString(simple));
+<a class="jxr_linenumber" name="L155" href="#L155">155</a> 			<strong class="jxr_keyword">return</strong> sb.toString();
+<a class="jxr_linenumber" name="L156" href="#L156">156</a> 		}
+<a class="jxr_linenumber" name="L157" href="#L157">157</a> 	}
+<a class="jxr_linenumber" name="L158" href="#L158">158</a> 
+<a class="jxr_linenumber" name="L159" href="#L159">159</a> 	<strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <a name="BeanTraverseContext" href="../../../org/apache/juneau/BeanTraverseContext.html#BeanTraverseContext">BeanTraverseContext</a> ctx;
+<a class="jxr_linenumber" name="L160" href="#L160">160</a> 	<strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> Map&lt;Object,Object&gt; set;                                           <em class="jxr_comment">// Contains the current objects in the current branch of the model.</em>
+<a class="jxr_linenumber" name="L161" href="#L161">161</a> 
+<a class="jxr_linenumber" name="L162" href="#L162">162</a> 	<strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> LinkedList&lt;StackElement&gt; stack = <strong class="jxr_keyword">new</strong> LinkedList&lt;&gt;();              <em class="jxr_comment">// Contains the current objects in the current branch of the model.</em>
+<a class="jxr_linenumber" name="L163" href="#L163">163</a> 	<em class="jxr_comment">// Writable properties</em>
+<a class="jxr_linenumber" name="L164" href="#L164">164</a> 	<strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> isBottom;                                                       <em class="jxr_comment">// If 'true', then we're at a leaf in the model (i.e. a String, Number, Boolean, or null).</em>
+<a class="jxr_linenumber" name="L165" href="#L165">165</a> 	<strong class="jxr_keyword">private</strong> BeanPropertyMeta currentProperty;
+<a class="jxr_linenumber" name="L166" href="#L166">166</a> 
+<a class="jxr_linenumber" name="L167" href="#L167">167</a> 	<strong class="jxr_keyword">private</strong> ClassMeta&lt;?&gt; currentClass;
+<a class="jxr_linenumber" name="L168" href="#L168">168</a> 
+<a class="jxr_linenumber" name="L169" href="#L169">169</a> 	<em class="jxr_javadoccomment">/** The current indentation depth into the model. */</em>
+<a class="jxr_linenumber" name="L170" href="#L170">170</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">int</strong> indent;
+<a class="jxr_linenumber" name="L171" href="#L171">171</a> 
+<a class="jxr_linenumber" name="L172" href="#L172">172</a> 	<strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">int</strong> depth;
+<a class="jxr_linenumber" name="L173" href="#L173">173</a> 
+<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">	 * Constructor.</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 builder The builder for this object.</em>
+<a class="jxr_linenumber" name="L178" href="#L178">178</a> <em class="jxr_javadoccomment">	 */</em>
+<a class="jxr_linenumber" name="L179" href="#L179">179</a> 	<strong class="jxr_keyword">protected</strong> <a name="BeanTraverseSession" href="../../../org/apache/juneau/BeanTraverseSession.html#BeanTraverseSession">BeanTraverseSession</a>(Builder builder) {
+<a class="jxr_linenumber" name="L180" href="#L180">180</a> 		<strong class="jxr_keyword">super</strong>(builder);
+<a class="jxr_linenumber" name="L181" href="#L181">181</a> 		ctx = builder.ctx;
+<a class="jxr_linenumber" name="L182" href="#L182">182</a> 		indent = builder.initialDepth;
+<a class="jxr_linenumber" name="L183" href="#L183">183</a> 		<strong class="jxr_keyword">if</strong> (isDetectRecursions() || isDebug()) {
+<a class="jxr_linenumber" name="L184" href="#L184">184</a> 			set = <strong class="jxr_keyword">new</strong> IdentityHashMap&lt;&gt;();
+<a class="jxr_linenumber" name="L185" href="#L185">185</a> 		} <strong class="jxr_keyword">else</strong> {
+<a class="jxr_linenumber" name="L186" href="#L186">186</a> 			set = mape();
+<a class="jxr_linenumber" name="L187" href="#L187">187</a> 		}
+<a class="jxr_linenumber" name="L188" href="#L188">188</a> 	}
+<a class="jxr_linenumber" name="L189" href="#L189">189</a> 
+<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">	 * Initial depth.</em>
+<a class="jxr_linenumber" name="L192" href="#L192">192</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L193" href="#L193">193</a> <em class="jxr_javadoccomment">	 * @see BeanTraverseContext.Builder#initialDepth(int)</em>
+<a class="jxr_linenumber" name="L194" href="#L194">194</a> <em class="jxr_javadoccomment">	 * @return</em>
+<a class="jxr_linenumber" name="L195" href="#L195">195</a> <em class="jxr_javadoccomment">	 * 	The initial indentation level at the root.</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> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong> getInitialDepth() { <strong class="jxr_keyword">return</strong> ctx.getInitialDepth(); }
+<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>
+<a class="jxr_linenumber" name="L200" href="#L200">200</a> <em class="jxr_javadoccomment">	 * Returns information used to determine at what location in the parse a failure occurred.</em>
+<a class="jxr_linenumber" name="L201" href="#L201">201</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L202" href="#L202">202</a> <em class="jxr_javadoccomment">	 * @return A map, typically containing something like &lt;c&gt;{line:123,column:456,currentProperty:"foobar"}&lt;/c&gt;</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> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">final</strong> <a name="JsonMap" href="../../../org/apache/juneau/collections/JsonMap.html#JsonMap">JsonMap</a> getLastLocation() {
+<a class="jxr_linenumber" name="L205" href="#L205">205</a> 		Predicate&lt;Object&gt; nn = Utils::nn;
+<a class="jxr_linenumber" name="L206" href="#L206">206</a> 		Predicate&lt;Collection&lt;?&gt;&gt; nec = Utils::isNotEmpty;
+<a class="jxr_linenumber" name="L207" href="#L207">207</a> 		<em class="jxr_comment">// @formatter:off</em>
+<a class="jxr_linenumber" name="L208" href="#L208">208</a> 		<strong class="jxr_keyword">return</strong> <a name="JsonMap" href="../../../org/apache/juneau/collections/JsonMap.html#JsonMap">JsonMap</a>
+<a class="jxr_linenumber" name="L209" href="#L209">209</a> 			.create()
+<a class="jxr_linenumber" name="L210" href="#L210">210</a> 			.appendIf(nn, <span class="jxr_string">"currentClass"</span>, currentClass)
+<a class="jxr_linenumber" name="L211" href="#L211">211</a> 			.appendIf(nn, <span class="jxr_string">"currentProperty"</span>, currentProperty)
+<a class="jxr_linenumber" name="L212" href="#L212">212</a> 			.appendIf(nec, <span class="jxr_string">"stack"</span>, stack);
+<a class="jxr_linenumber" name="L213" href="#L213">213</a> 		<em class="jxr_comment">// @formatter:on</em>
+<a class="jxr_linenumber" name="L214" href="#L214">214</a> 	}
+<a class="jxr_linenumber" name="L215" href="#L215">215</a> 
+<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">	 * Max traversal depth.</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> <em class="jxr_javadoccomment">	 * @see BeanTraverseContext.Builder#maxDepth(int)</em>
+<a class="jxr_linenumber" name="L220" href="#L220">220</a> <em class="jxr_javadoccomment">	 * @return</em>
+<a class="jxr_linenumber" name="L221" href="#L221">221</a> <em class="jxr_javadoccomment">	 * 	The depth at which traversal is aborted if depth is reached in the POJO tree.</em>
+<a class="jxr_linenumber" name="L222" href="#L222">222</a> <em class="jxr_javadoccomment">	 *	&lt;br&gt;If this depth is exceeded, an exception is thrown.</em>
+<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> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong> getMaxDepth() { <strong class="jxr_keyword">return</strong> ctx.getMaxDepth(); }
+<a class="jxr_linenumber" name="L225" href="#L225">225</a> 
+<a class="jxr_linenumber" name="L226" href="#L226">226</a> 	<em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L227" href="#L227">227</a> <em class="jxr_javadoccomment">	 * Automatically detect POJO recursions.</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">	 * @see BeanTraverseContext.Builder#detectRecursions()</em>
+<a class="jxr_linenumber" name="L230" href="#L230">230</a> <em class="jxr_javadoccomment">	 * @return</em>
+<a class="jxr_linenumber" name="L231" href="#L231">231</a> <em class="jxr_javadoccomment">	 * 	&lt;jk&gt;true&lt;/jk&gt; if recursions should be checked for during traversal.</em>
+<a class="jxr_linenumber" name="L232" href="#L232">232</a> <em class="jxr_javadoccomment">	 */</em>
+<a class="jxr_linenumber" name="L233" href="#L233">233</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">boolean</strong> isDetectRecursions() { <strong class="jxr_keyword">return</strong> ctx.isDetectRecursions(); }
+<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">	 * Ignore recursion errors.</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">	 * @see BeanTraverseContext.Builder#ignoreRecursions()</em>
+<a class="jxr_linenumber" name="L239" href="#L239">239</a> <em class="jxr_javadoccomment">	 * @return</em>
+<a class="jxr_linenumber" name="L240" href="#L240">240</a> <em class="jxr_javadoccomment">	 * 	&lt;jk&gt;true&lt;/jk&gt; if when we encounter the same object when traversing a tree, we set the value to &lt;jk&gt;null&lt;/jk&gt;.</em>
+<a class="jxr_linenumber" name="L241" href="#L241">241</a> <em class="jxr_javadoccomment">	 * 	&lt;br&gt;Otherwise, a {@link BeanRecursionException} is thrown with the message &lt;js&gt;"Recursion occurred, stack=..."&lt;/js&gt;.</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> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">boolean</strong> isIgnoreRecursions() { <strong class="jxr_keyword">return</strong> ctx.isIgnoreRecursions(); }
+<a class="jxr_linenumber" name="L244" href="#L244">244</a> 
+<a class="jxr_linenumber" name="L245" href="#L245">245</a> 	<em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L246" href="#L246">246</a> <em class="jxr_javadoccomment">	 * Returns the inner type of an {@link Optional}.</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">	 * @param cm The meta to check.</em>
+<a class="jxr_linenumber" name="L249" href="#L249">249</a> <em class="jxr_javadoccomment">	 * @return The inner type of an {@link Optional}.</em>
+<a class="jxr_linenumber" name="L250" href="#L250">250</a> <em class="jxr_javadoccomment">	 */</em>
+<a class="jxr_linenumber" name="L251" href="#L251">251</a> 	<strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">final</strong> ClassMeta&lt;?&gt; getOptionalType(ClassMeta&lt;?&gt; cm) {
+<a class="jxr_linenumber" name="L252" href="#L252">252</a> 		<strong class="jxr_keyword">if</strong> (cm.isOptional())
+<a class="jxr_linenumber" name="L253" href="#L253">253</a> 			<strong class="jxr_keyword">return</strong> getOptionalType(cm.getElementType());
+<a class="jxr_linenumber" name="L254" href="#L254">254</a> 		<strong class="jxr_keyword">return</strong> cm;
+<a class="jxr_linenumber" name="L255" href="#L255">255</a> 	}
+<a class="jxr_linenumber" name="L256" href="#L256">256</a> 
+<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">	 * If the specified object is an {@link Optional}, returns the inner object.</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">	 * @param o The object to check.</em>
+<a class="jxr_linenumber" name="L261" href="#L261">261</a> <em class="jxr_javadoccomment">	 * @return The inner object if it's an {@link Optional}, &lt;jk&gt;null&lt;/jk&gt; if it's &lt;jk&gt;null&lt;/jk&gt;, or else the same object.</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> 	<strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">final</strong> Object getOptionalValue(Object o) {
+<a class="jxr_linenumber" name="L264" href="#L264">264</a> 		<strong class="jxr_keyword">if</strong> (o == <strong class="jxr_keyword">null</strong>)
+<a class="jxr_linenumber" name="L265" href="#L265">265</a> 			<strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="L266" href="#L266">266</a> 		<strong class="jxr_keyword">if</strong> (o instanceof Optional&lt;?&gt; o2)
+<a class="jxr_linenumber" name="L267" href="#L267">267</a> 			<strong class="jxr_keyword">return</strong> getOptionalValue(o2.orElse(<strong class="jxr_keyword">null</strong>));
+<a class="jxr_linenumber" name="L268" href="#L268">268</a> 		<strong class="jxr_keyword">return</strong> o;
+<a class="jxr_linenumber" name="L269" href="#L269">269</a> 	}
+<a class="jxr_linenumber" name="L270" href="#L270">270</a> 
+<a class="jxr_linenumber" name="L271" href="#L271">271</a> 	<em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L272" href="#L272">272</a> <em class="jxr_javadoccomment">	 * Returns the current stack trace.</em>
+<a class="jxr_linenumber" name="L273" href="#L273">273</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L274" href="#L274">274</a> <em class="jxr_javadoccomment">	 * @param full</em>
+<a class="jxr_linenumber" name="L275" href="#L275">275</a> <em class="jxr_javadoccomment">	 * 	If &lt;jk&gt;true&lt;/jk&gt;, returns a full stack trace.</em>
+<a class="jxr_linenumber" name="L276" href="#L276">276</a> <em class="jxr_javadoccomment">	 * @return The current stack trace.</em>
+<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> 	<strong class="jxr_keyword">protected</strong> String getStack(<strong class="jxr_keyword">boolean</strong> full) {
+<a class="jxr_linenumber" name="L279" href="#L279">279</a> 		<strong class="jxr_keyword">var</strong> sb = <strong class="jxr_keyword">new</strong> StringBuilder();
+<a class="jxr_linenumber" name="L280" href="#L280">280</a> 		stack.forEach(x -&gt; {
+<a class="jxr_linenumber" name="L281" href="#L281">281</a> 			<strong class="jxr_keyword">if</strong> (full) {
+<a class="jxr_linenumber" name="L282" href="#L282">282</a> 				sb.append(<span class="jxr_string">"\n\t"</span>);
+<a class="jxr_linenumber" name="L283" href="#L283">283</a> 				<strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">var</strong> i = 1; i &lt; x.depth; i++)
+<a class="jxr_linenumber" name="L284" href="#L284">284</a> 					sb.append(<span class="jxr_string">"  "</span>);
+<a class="jxr_linenumber" name="L285" href="#L285">285</a> 				<strong class="jxr_keyword">if</strong> (x.depth &gt; 0)
+<a class="jxr_linenumber" name="L286" href="#L286">286</a> 					sb.append(<span class="jxr_string">"-&gt;"</span>);
+<a class="jxr_linenumber" name="L287" href="#L287">287</a> 				sb.append(x.toString(false));
+<a class="jxr_linenumber" name="L288" href="#L288">288</a> 			} <strong class="jxr_keyword">else</strong> {
+<a class="jxr_linenumber" name="L289" href="#L289">289</a> 				sb.append(<span class="jxr_string">" &gt; "</span>).append(x.toString(<strong class="jxr_keyword">true</strong>));
+<a class="jxr_linenumber" name="L290" href="#L290">290</a> 			}
+<a class="jxr_linenumber" name="L291" href="#L291">291</a> 		});
+<a class="jxr_linenumber" name="L292" href="#L292">292</a> 		<strong class="jxr_keyword">return</strong> sb.toString();
+<a class="jxr_linenumber" name="L293" href="#L293">293</a> 	}
+<a class="jxr_linenumber" name="L294" href="#L294">294</a> 
+<a class="jxr_linenumber" name="L295" href="#L295">295</a> 	<em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L296" href="#L296">296</a> <em class="jxr_javadoccomment">	 * Same as {@link ClassMeta#isOptional()} but gracefully handles a null {@link ClassMeta}.</em>
+<a class="jxr_linenumber" name="L297" href="#L297">297</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L298" href="#L298">298</a> <em class="jxr_javadoccomment">	 * @param cm The meta to check.</em>
+<a class="jxr_linenumber" name="L299" href="#L299">299</a> <em class="jxr_javadoccomment">	 * @return &lt;jk&gt;true&lt;/jk&gt; if the specified meta is an {@link Optional}.</em>
+<a class="jxr_linenumber" name="L300" href="#L300">300</a> <em class="jxr_javadoccomment">	 */</em>
+<a class="jxr_linenumber" name="L301" href="#L301">301</a> 	<strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> isOptional(ClassMeta&lt;?&gt; cm) {
+<a class="jxr_linenumber" name="L302" href="#L302">302</a> 		<strong class="jxr_keyword">return</strong> (nn(cm) &amp;&amp; cm.isOptional());
+<a class="jxr_linenumber" name="L303" href="#L303">303</a> 	}
+<a class="jxr_linenumber" name="L304" href="#L304">304</a> 
+<a class="jxr_linenumber" name="L305" href="#L305">305</a> 	<em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L306" href="#L306">306</a> <em class="jxr_javadoccomment">	 * Returns &lt;jk&gt;true&lt;/jk&gt; if we're processing the root node.</em>
+<a class="jxr_linenumber" name="L307" href="#L307">307</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L308" href="#L308">308</a> <em class="jxr_javadoccomment">	 * &lt;p&gt;</em>
+<a class="jxr_linenumber" name="L309" href="#L309">309</a> <em class="jxr_javadoccomment">	 * Must be called after {@link #push(String, Object, ClassMeta)} and before {@link #pop()}.</em>
+<a class="jxr_linenumber" name="L310" href="#L310">310</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L311" href="#L311">311</a> <em class="jxr_javadoccomment">	 * @return &lt;jk&gt;true&lt;/jk&gt; if we're processing the root node.</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> 	<strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">boolean</strong> isRoot() { <strong class="jxr_keyword">return</strong> depth == 1; }
+<a class="jxr_linenumber" name="L314" href="#L314">314</a> 
+<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">	 * Logs a warning message.</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">	 * @param t The throwable that was thrown (if there was one).</em>
+<a class="jxr_linenumber" name="L319" href="#L319">319</a> <em class="jxr_javadoccomment">	 * @param msg The warning message.</em>
+<a class="jxr_linenumber" name="L320" href="#L320">320</a> <em class="jxr_javadoccomment">	 * @param args Optional {@link MessageFormat}-style arguments.</em>
+<a class="jxr_linenumber" name="L321" href="#L321">321</a> <em class="jxr_javadoccomment">	 */</em>
+<a class="jxr_linenumber" name="L322" href="#L322">322</a> 	<strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">void</strong> onError(Throwable t, String msg, Object...args) {
+<a class="jxr_linenumber" name="L323" href="#L323">323</a> 		<strong class="jxr_keyword">super</strong>.addWarning(msg, args);
+<a class="jxr_linenumber" name="L324" href="#L324">324</a> 	}
+<a class="jxr_linenumber" name="L325" href="#L325">325</a> 
+<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">	 * Pop an object off the stack.</em>
+<a class="jxr_linenumber" name="L328" href="#L328">328</a> <em class="jxr_javadoccomment">	 */</em>
+<a class="jxr_linenumber" name="L329" href="#L329">329</a> 	<strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">void</strong> pop() {
+<a class="jxr_linenumber" name="L330" href="#L330">330</a> 		indent--;
+<a class="jxr_linenumber" name="L331" href="#L331">331</a> 		depth--;
+<a class="jxr_linenumber" name="L332" href="#L332">332</a> 		<strong class="jxr_keyword">if</strong> ((isDetectRecursions() || isDebug()) &amp;&amp; ! isBottom) {
+<a class="jxr_linenumber" name="L333" href="#L333">333</a> 			Object o = stack.removeLast().o;
+<a class="jxr_linenumber" name="L334" href="#L334">334</a> 			Object o2 = set.remove(o);
+<a class="jxr_linenumber" name="L335" href="#L335">335</a> 			<strong class="jxr_keyword">if</strong> (o2 == <strong class="jxr_keyword">null</strong>)
+<a class="jxr_linenumber" name="L336" href="#L336">336</a> 				onError(<strong class="jxr_keyword">null</strong>, <span class="jxr_string">"Couldn't remove object of type ''{0}'' on attribute ''{1}'' from object stack."</span>, cn(o), stack);
+<a class="jxr_linenumber" name="L337" href="#L337">337</a> 		}
+<a class="jxr_linenumber" name="L338" href="#L338">338</a> 		isBottom = false;
+<a class="jxr_linenumber" name="L339" href="#L339">339</a> 	}
+<a class="jxr_linenumber" name="L340" href="#L340">340</a> 
+<a class="jxr_linenumber" name="L341" href="#L341">341</a> 	@Override <em class="jxr_comment">/* Overridden from ContextSession */</em>
+<a class="jxr_linenumber" name="L342" href="#L342">342</a> 	<strong class="jxr_keyword">protected</strong> <a name="JsonMap" href="../../../org/apache/juneau/collections/JsonMap.html#JsonMap">JsonMap</a> properties() {
+<a class="jxr_linenumber" name="L343" href="#L343">343</a> 		<strong class="jxr_keyword">return</strong> filteredMap(<span class="jxr_string">"indent"</span>, indent, <span class="jxr_string">"depth"</span>, depth);
+<a class="jxr_linenumber" name="L344" href="#L344">344</a> 	}
+<a class="jxr_linenumber" name="L345" href="#L345">345</a> 
+<a class="jxr_linenumber" name="L346" href="#L346">346</a> 	<em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L347" href="#L347">347</a> <em class="jxr_javadoccomment">	 * Push the specified object onto the stack.</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 attrName The attribute name.</em>
+<a class="jxr_linenumber" name="L350" href="#L350">350</a> <em class="jxr_javadoccomment">	 * @param o The current object being traversed.</em>
+<a class="jxr_linenumber" name="L351" href="#L351">351</a> <em class="jxr_javadoccomment">	 * @param eType The expected class type.</em>
+<a class="jxr_linenumber" name="L352" href="#L352">352</a> <em class="jxr_javadoccomment">	 * @return</em>
+<a class="jxr_linenumber" name="L353" href="#L353">353</a> <em class="jxr_javadoccomment">	 * 	The {@link ClassMeta} of the object so that &lt;c&gt;instanceof&lt;/c&gt; operations only need to be performed</em>
+<a class="jxr_linenumber" name="L354" href="#L354">354</a> <em class="jxr_javadoccomment">	 * 	once (since they can be expensive).</em>
+<a class="jxr_linenumber" name="L355" href="#L355">355</a> <em class="jxr_javadoccomment">	 * @throws BeanRecursionException If recursion occurred.</em>
+<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> 	<strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">final</strong> ClassMeta&lt;?&gt; push(String attrName, Object o, ClassMeta&lt;?&gt; eType) <strong class="jxr_keyword">throws</strong> <a name="BeanRecursionException" href="../../../org/apache/juneau/BeanRecursionException.html#BeanRecursionException">BeanRecursionException</a> {
+<a class="jxr_linenumber" name="L358" href="#L358">358</a> 		indent++;
+<a class="jxr_linenumber" name="L359" href="#L359">359</a> 		depth++;
+<a class="jxr_linenumber" name="L360" href="#L360">360</a> 		isBottom = <strong class="jxr_keyword">true</strong>;
+<a class="jxr_linenumber" name="L361" href="#L361">361</a> 		<strong class="jxr_keyword">if</strong> (o == <strong class="jxr_keyword">null</strong>)
+<a class="jxr_linenumber" name="L362" href="#L362">362</a> 			<strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="L363" href="#L363">363</a> 		<strong class="jxr_keyword">var</strong> c = o.getClass();
+<a class="jxr_linenumber" name="L364" href="#L364">364</a> 		<strong class="jxr_keyword">var</strong> cm = (nn(eType) &amp;&amp; c == eType.<strong class="jxr_keyword">inner</strong>()) ? eType : ((o instanceof <a name="ClassMeta" href="../../../org/apache/juneau/ClassMeta.html#ClassMeta">ClassMeta</a>) ? (ClassMeta&lt;?&gt;)o : getClassMeta(c));
+<a class="jxr_linenumber" name="L365" href="#L365">365</a> 		<strong class="jxr_keyword">if</strong> (cm.isCharSequence() || cm.isNumber() || cm.isBoolean())
+<a class="jxr_linenumber" name="L366" href="#L366">366</a> 			<strong class="jxr_keyword">return</strong> cm;
+<a class="jxr_linenumber" name="L367" href="#L367">367</a> 		<strong class="jxr_keyword">if</strong> (depth &gt; getMaxDepth())
+<a class="jxr_linenumber" name="L368" href="#L368">368</a> 			<strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="L369" href="#L369">369</a> 		<strong class="jxr_keyword">if</strong> (isDetectRecursions() || isDebug()) {
+<a class="jxr_linenumber" name="L370" href="#L370">370</a> 			<strong class="jxr_keyword">if</strong> (willRecurse(attrName, o, cm))
+<a class="jxr_linenumber" name="L371" href="#L371">371</a> 				<strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="L372" href="#L372">372</a> 			isBottom = false;
+<a class="jxr_linenumber" name="L373" href="#L373">373</a> 			stack.add(<strong class="jxr_keyword">new</strong> StackElement(stack.size(), attrName, o, cm));
+<a class="jxr_linenumber" name="L374" href="#L374">374</a> 			set.put(o, o);
+<a class="jxr_linenumber" name="L375" href="#L375">375</a> 		}
+<a class="jxr_linenumber" name="L376" href="#L376">376</a> 		<strong class="jxr_keyword">return</strong> cm;
+<a class="jxr_linenumber" name="L377" href="#L377">377</a> 	}
+<a class="jxr_linenumber" name="L378" href="#L378">378</a> 
+<a class="jxr_linenumber" name="L379" href="#L379">379</a> 	<em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L380" href="#L380">380</a> <em class="jxr_javadoccomment">	 * Sets the current class being traversed for proper error messages.</em>
+<a class="jxr_linenumber" name="L381" href="#L381">381</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L382" href="#L382">382</a> <em class="jxr_javadoccomment">	 * @param currentClass The current class being traversed.</em>
+<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> 	<strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">void</strong> setCurrentClass(ClassMeta&lt;?&gt; currentClass) { <strong class="jxr_keyword">this</strong>.currentClass = currentClass; }
+<a class="jxr_linenumber" name="L385" href="#L385">385</a> 
+<a class="jxr_linenumber" name="L386" href="#L386">386</a> 	<em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L387" href="#L387">387</a> <em class="jxr_javadoccomment">	 * Sets the current bean property being traversed for proper error messages.</em>
+<a class="jxr_linenumber" name="L388" href="#L388">388</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L389" href="#L389">389</a> <em class="jxr_javadoccomment">	 * @param currentProperty The current property being traversed.</em>
+<a class="jxr_linenumber" name="L390" href="#L390">390</a> <em class="jxr_javadoccomment">	 */</em>
+<a class="jxr_linenumber" name="L391" href="#L391">391</a> 	<strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">void</strong> setCurrentProperty(BeanPropertyMeta currentProperty) { <strong class="jxr_keyword">this</strong>.currentProperty = currentProperty; }
+<a class="jxr_linenumber" name="L392" href="#L392">392</a> 
+<a class="jxr_linenumber" name="L393" href="#L393">393</a> 	<em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L394" href="#L394">394</a> <em class="jxr_javadoccomment">	 * Returns &lt;jk&gt;true&lt;/jk&gt; if we're about to exceed the max depth for the document.</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">	 * @return &lt;jk&gt;true&lt;/jk&gt; if we're about to exceed the max depth for the document.</em>
+<a class="jxr_linenumber" name="L397" href="#L397">397</a> <em class="jxr_javadoccomment">	 */</em>
+<a class="jxr_linenumber" name="L398" href="#L398">398</a> 	<strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">boolean</strong> willExceedDepth() {
+<a class="jxr_linenumber" name="L399" href="#L399">399</a> 		<strong class="jxr_keyword">return</strong> (depth &gt;= getMaxDepth());
+<a class="jxr_linenumber" name="L400" href="#L400">400</a> 	}
+<a class="jxr_linenumber" name="L401" href="#L401">401</a> 
+<a class="jxr_linenumber" name="L402" href="#L402">402</a> 	<em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L403" href="#L403">403</a> <em class="jxr_javadoccomment">	 * Returns &lt;jk&gt;true&lt;/jk&gt; if {@link BeanTraverseContext.Builder#detectRecursions()} is enabled, and the specified</em>
+<a class="jxr_linenumber" name="L404" href="#L404">404</a> <em class="jxr_javadoccomment">	 * object is already higher up in the traversal chain.</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">	 * @param attrName The bean property attribute name, or some other identifier.</em>
+<a class="jxr_linenumber" name="L407" href="#L407">407</a> <em class="jxr_javadoccomment">	 * @param o The object to check for recursion.</em>
+<a class="jxr_linenumber" name="L408" href="#L408">408</a> <em class="jxr_javadoccomment">	 * @param cm The metadata on the object class.</em>
+<a class="jxr_linenumber" name="L409" href="#L409">409</a> <em class="jxr_javadoccomment">	 * @return &lt;jk&gt;true&lt;/jk&gt; if recursion detected.</em>
+<a class="jxr_linenumber" name="L410" href="#L410">410</a> <em class="jxr_javadoccomment">	 * @throws BeanRecursionException If recursion occurred.</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> 	<strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">boolean</strong> willRecurse(String attrName, Object o, ClassMeta&lt;?&gt; cm) <strong class="jxr_keyword">throws</strong> <a name="BeanRecursionException" href="../../../org/apache/juneau/BeanRecursionException.html#BeanRecursionException">BeanRecursionException</a> {
+<a class="jxr_linenumber" name="L413" href="#L413">413</a> 		<strong class="jxr_keyword">if</strong> (! (isDetectRecursions() || isDebug()) || ! set.containsKey(o))
+<a class="jxr_linenumber" name="L414" href="#L414">414</a> 			<strong class="jxr_keyword">return</strong> false;
+<a class="jxr_linenumber" name="L415" href="#L415">415</a> 		<strong class="jxr_keyword">if</strong> (isIgnoreRecursions() &amp;&amp; ! isDebug())
+<a class="jxr_linenumber" name="L416" href="#L416">416</a> 			<strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
+<a class="jxr_linenumber" name="L417" href="#L417">417</a> 
+<a class="jxr_linenumber" name="L418" href="#L418">418</a> 		stack.add(<strong class="jxr_keyword">new</strong> StackElement(stack.size(), attrName, o, cm));
+<a class="jxr_linenumber" name="L419" href="#L419">419</a> 		<strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> <a name="BeanRecursionException" href="../../../org/apache/juneau/BeanRecursionException.html#BeanRecursionException">BeanRecursionException</a>(<span class="jxr_string">"Recursion occurred, stack={0}"</span>, getStack(<strong class="jxr_keyword">true</strong>));
+<a class="jxr_linenumber" name="L420" href="#L420">420</a> 	}
+<a class="jxr_linenumber" name="L421" href="#L421">421</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/collections/JsonMap.html b/site/xref/org/apache/juneau/collections/JsonMap.html
index 9be6799f03..238cba81e4 100644
--- a/site/xref/org/apache/juneau/collections/JsonMap.html
+++ b/site/xref/org/apache/juneau/collections/JsonMap.html
@@ -169,7 +169,7 @@
 <a class="jxr_linenumber" name="L161" href="#L161">161</a> 
 <a class="jxr_linenumber" name="L162" href="#L162">162</a> 		@Override <em class="jxr_comment">/* Overridden from Map */</em>
 <a class="jxr_linenumber" name="L163" href="#L163">163</a> 		<strong class="jxr_keyword">public</strong> Collection&lt;Object&gt; values() {
-<a class="jxr_linenumber" name="L164" href="#L164">164</a> 			<strong class="jxr_keyword">return</strong> Collections.emptyMap().values();
+<a class="jxr_linenumber" name="L164" href="#L164">164</a> 			<strong class="jxr_keyword">return</strong> mape().values();
 <a class="jxr_linenumber" name="L165" href="#L165">165</a> 		}
 <a class="jxr_linenumber" name="L166" href="#L166">166</a> 	};
 <a class="jxr_linenumber" name="L167" href="#L167">167</a> 
diff --git a/site/xref/org/apache/juneau/commons/utils/CollectionUtils.html b/site/xref/org/apache/juneau/commons/utils/CollectionUtils.html
index 9b4781f4e8..3874d2e6cb 100644
--- a/site/xref/org/apache/juneau/commons/utils/CollectionUtils.html
+++ b/site/xref/org/apache/juneau/commons/utils/CollectionUtils.html
@@ -1592,685 +1592,688 @@
 <a class="jxr_linenumber" name="L1584" href="#L1584">1584</a> 		<strong class="jxr_keyword">return</strong> Collections.emptyMap();
 <a class="jxr_linenumber" name="L1585" href="#L1585">1585</a> 	}
 <a class="jxr_linenumber" name="L1586" href="#L1586">1586</a> 
-<a class="jxr_linenumber" name="L1587" href="#L1587">1587</a> 	<em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L1588" href="#L1588">1588</a> <em class="jxr_javadoccomment">	 * Returns a null map.</em>
-<a class="jxr_linenumber" name="L1589" href="#L1589">1589</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L1590" href="#L1590">1590</a> <em class="jxr_javadoccomment">	 * @param &lt;K&gt; The key type.</em>
-<a class="jxr_linenumber" name="L1591" href="#L1591">1591</a> <em class="jxr_javadoccomment">	 * @param &lt;V&gt; The value type.</em>
-<a class="jxr_linenumber" name="L1592" href="#L1592">1592</a> <em class="jxr_javadoccomment">	 * @param keyType The key type class.</em>
-<a class="jxr_linenumber" name="L1593" href="#L1593">1593</a> <em class="jxr_javadoccomment">	 * @param valueType The value type class.</em>
-<a class="jxr_linenumber" name="L1594" href="#L1594">1594</a> <em class="jxr_javadoccomment">	 * @return &lt;jk&gt;null&lt;/jk&gt;.</em>
-<a class="jxr_linenumber" name="L1595" href="#L1595">1595</a> <em class="jxr_javadoccomment">	 */</em>
-<a class="jxr_linenumber" name="L1596" href="#L1596">1596</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;K,V&gt; Map&lt;K,V&gt; mapn(Class&lt;K&gt; keyType, Class&lt;V&gt; valueType) {
-<a class="jxr_linenumber" name="L1597" href="#L1597">1597</a> 		<strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="L1598" href="#L1598">1598</a> 	}
-<a class="jxr_linenumber" name="L1599" href="#L1599">1599</a> 
-<a class="jxr_linenumber" name="L1600" href="#L1600">1600</a> 	<em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L1601" href="#L1601">1601</a> <em class="jxr_javadoccomment">	 * Convenience method for creating a {@link LinkedHashMap}.</em>
-<a class="jxr_linenumber" name="L1602" href="#L1602">1602</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L1603" href="#L1603">1603</a> <em class="jxr_javadoccomment">	 * @param &lt;K&gt; The key type.</em>
-<a class="jxr_linenumber" name="L1604" href="#L1604">1604</a> <em class="jxr_javadoccomment">	 * @param &lt;V&gt; The value type.</em>
-<a class="jxr_linenumber" name="L1605" href="#L1605">1605</a> <em class="jxr_javadoccomment">	 * @param keyType The key type.</em>
-<a class="jxr_linenumber" name="L1606" href="#L1606">1606</a> <em class="jxr_javadoccomment">	 * @param valueType The value type.</em>
-<a class="jxr_linenumber" name="L1607" href="#L1607">1607</a> <em class="jxr_javadoccomment">	 * @return A new modifiable map.</em>
-<a class="jxr_linenumber" name="L1608" href="#L1608">1608</a> <em class="jxr_javadoccomment">	 */</em>
-<a class="jxr_linenumber" name="L1609" href="#L1609">1609</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;K,V&gt; LinkedHashMap&lt;K,V&gt; mapOf(Class&lt;K&gt; keyType, Class&lt;V&gt; valueType) {
-<a class="jxr_linenumber" name="L1610" href="#L1610">1610</a> 		<strong class="jxr_keyword">return</strong> map();
-<a class="jxr_linenumber" name="L1611" href="#L1611">1611</a> 	}
-<a class="jxr_linenumber" name="L1612" href="#L1612">1612</a> 
-<a class="jxr_linenumber" name="L1613" href="#L1613">1613</a> 	<em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L1614" href="#L1614">1614</a> <em class="jxr_javadoccomment">	 * Returns &lt;jk&gt;null&lt;/jk&gt; for the specified array type.</em>
-<a class="jxr_linenumber" name="L1615" href="#L1615">1615</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L1616" href="#L1616">1616</a> <em class="jxr_javadoccomment">	 * @param &lt;T&gt; The component type.</em>
-<a class="jxr_linenumber" name="L1617" href="#L1617">1617</a> <em class="jxr_javadoccomment">	 * @param type The component type class.</em>
-<a class="jxr_linenumber" name="L1618" href="#L1618">1618</a> <em class="jxr_javadoccomment">	 * @return &lt;jk&gt;null&lt;/jk&gt;.</em>
-<a class="jxr_linenumber" name="L1619" href="#L1619">1619</a> <em class="jxr_javadoccomment">	 */</em>
-<a class="jxr_linenumber" name="L1620" href="#L1620">1620</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;T&gt; T[] na(Class&lt;T&gt; type) {
-<a class="jxr_linenumber" name="L1621" href="#L1621">1621</a> 		<strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="L1622" href="#L1622">1622</a> 	}
-<a class="jxr_linenumber" name="L1623" href="#L1623">1623</a> 
-<a class="jxr_linenumber" name="L1624" href="#L1624">1624</a> 	<em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L1625" href="#L1625">1625</a> <em class="jxr_javadoccomment">	 * Adds all the specified values to the specified collection.</em>
-<a class="jxr_linenumber" name="L1626" href="#L1626">1626</a> <em class="jxr_javadoccomment">	 * Creates a new set if the value is &lt;jk&gt;null&lt;/jk&gt;.</em>
-<a class="jxr_linenumber" name="L1627" href="#L1627">1627</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L1628" href="#L1628">1628</a> <em class="jxr_javadoccomment">	 * @param &lt;E&gt; The element type.</em>
-<a class="jxr_linenumber" name="L1629" href="#L1629">1629</a> <em class="jxr_javadoccomment">	 * @param value The collection to add to.</em>
-<a class="jxr_linenumber" name="L1630" href="#L1630">1630</a> <em class="jxr_javadoccomment">	 * @param entries The entries to add.</em>
-<a class="jxr_linenumber" name="L1631" href="#L1631">1631</a> <em class="jxr_javadoccomment">	 * @return The set.</em>
-<a class="jxr_linenumber" name="L1632" href="#L1632">1632</a> <em class="jxr_javadoccomment">	 */</em>
-<a class="jxr_linenumber" name="L1633" href="#L1633">1633</a> 	@SafeVarargs
-<a class="jxr_linenumber" name="L1634" href="#L1634">1634</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;E&gt; List&lt;E&gt; prependAll(List&lt;E&gt; value, E...entries) {
-<a class="jxr_linenumber" name="L1635" href="#L1635">1635</a> 		<strong class="jxr_keyword">if</strong> (nn(entries)) {
-<a class="jxr_linenumber" name="L1636" href="#L1636">1636</a> 			<strong class="jxr_keyword">if</strong> (value == <strong class="jxr_keyword">null</strong>)
-<a class="jxr_linenumber" name="L1637" href="#L1637">1637</a> 				value = list(entries);
-<a class="jxr_linenumber" name="L1638" href="#L1638">1638</a> 			<strong class="jxr_keyword">else</strong>
-<a class="jxr_linenumber" name="L1639" href="#L1639">1639</a> 				value.addAll(0, l(entries));
-<a class="jxr_linenumber" name="L1640" href="#L1640">1640</a> 		}
-<a class="jxr_linenumber" name="L1641" href="#L1641">1641</a> 		<strong class="jxr_keyword">return</strong> value;
-<a class="jxr_linenumber" name="L1642" href="#L1642">1642</a> 	}
-<a class="jxr_linenumber" name="L1643" href="#L1643">1643</a> 
-<a class="jxr_linenumber" name="L1644" href="#L1644">1644</a> 	<em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L1645" href="#L1645">1645</a> <em class="jxr_javadoccomment">	 * Reverses the entries in an array.</em>
-<a class="jxr_linenumber" name="L1646" href="#L1646">1646</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L1647" href="#L1647">1647</a> <em class="jxr_javadoccomment">	 * @param &lt;E&gt; The element type.</em>
-<a class="jxr_linenumber" name="L1648" href="#L1648">1648</a> <em class="jxr_javadoccomment">	 * @param array The array to reverse.</em>
-<a class="jxr_linenumber" name="L1649" href="#L1649">1649</a> <em class="jxr_javadoccomment">	 * @return The same array.</em>
-<a class="jxr_linenumber" name="L1650" href="#L1650">1650</a> <em class="jxr_javadoccomment">	 */</em>
-<a class="jxr_linenumber" name="L1651" href="#L1651">1651</a> 	<em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L1652" href="#L1652">1652</a> <em class="jxr_javadoccomment">	 * Reverses the elements in the specified array in-place.</em>
-<a class="jxr_linenumber" name="L1653" href="#L1653">1653</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L1654" href="#L1654">1654</a> <em class="jxr_javadoccomment">	 * @param &lt;E&gt; The element type.</em>
-<a class="jxr_linenumber" name="L1655" href="#L1655">1655</a> <em class="jxr_javadoccomment">	 * @param array The array to reverse.</em>
-<a class="jxr_linenumber" name="L1656" href="#L1656">1656</a> <em class="jxr_javadoccomment">	 * @return The same array, reversed.</em>
-<a class="jxr_linenumber" name="L1657" href="#L1657">1657</a> <em class="jxr_javadoccomment">	 */</em>
-<a class="jxr_linenumber" name="L1658" href="#L1658">1658</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;E&gt; E[] reverse(E[] array) {
-<a class="jxr_linenumber" name="L1659" href="#L1659">1659</a> 		<strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">var</strong> i = 0; i &lt; array.length / 2; i++) {
-<a class="jxr_linenumber" name="L1660" href="#L1660">1660</a> 			E temp = array[i];
-<a class="jxr_linenumber" name="L1661" href="#L1661">1661</a> 			array[i] = array[array.length - i - 1];
-<a class="jxr_linenumber" name="L1662" href="#L1662">1662</a> 			array[array.length - i - 1] = temp;
-<a class="jxr_linenumber" name="L1663" href="#L1663">1663</a> 		}
-<a class="jxr_linenumber" name="L1664" href="#L1664">1664</a> 		<strong class="jxr_keyword">return</strong> array;
-<a class="jxr_linenumber" name="L1665" href="#L1665">1665</a> 	}
-<a class="jxr_linenumber" name="L1666" href="#L1666">1666</a> 
-<a class="jxr_linenumber" name="L1667" href="#L1667">1667</a> 	<em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L1668" href="#L1668">1668</a> <em class="jxr_javadoccomment">	 * Returns a reversed view of the specified list.</em>
-<a class="jxr_linenumber" name="L1669" href="#L1669">1669</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L1670" href="#L1670">1670</a> <em class="jxr_javadoccomment">	 * &lt;p&gt;</em>
-<a class="jxr_linenumber" name="L1671" href="#L1671">1671</a> <em class="jxr_javadoccomment">	 * The returned list is a live view that reflects changes to the original list.</em>
+<a class="jxr_linenumber" name="L1587" href="#L1587">1587</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;K,V&gt; Map&lt;K,V&gt; mape() {
+<a class="jxr_linenumber" name="L1588" href="#L1588">1588</a> 		<strong class="jxr_keyword">return</strong> Collections.emptyMap();
+<a class="jxr_linenumber" name="L1589" href="#L1589">1589</a> 	}
+<a class="jxr_linenumber" name="L1590" href="#L1590">1590</a> 	<em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L1591" href="#L1591">1591</a> <em class="jxr_javadoccomment">	 * Returns a null map.</em>
+<a class="jxr_linenumber" name="L1592" href="#L1592">1592</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L1593" href="#L1593">1593</a> <em class="jxr_javadoccomment">	 * @param &lt;K&gt; The key type.</em>
+<a class="jxr_linenumber" name="L1594" href="#L1594">1594</a> <em class="jxr_javadoccomment">	 * @param &lt;V&gt; The value type.</em>
+<a class="jxr_linenumber" name="L1595" href="#L1595">1595</a> <em class="jxr_javadoccomment">	 * @param keyType The key type class.</em>
+<a class="jxr_linenumber" name="L1596" href="#L1596">1596</a> <em class="jxr_javadoccomment">	 * @param valueType The value type class.</em>
+<a class="jxr_linenumber" name="L1597" href="#L1597">1597</a> <em class="jxr_javadoccomment">	 * @return &lt;jk&gt;null&lt;/jk&gt;.</em>
+<a class="jxr_linenumber" name="L1598" href="#L1598">1598</a> <em class="jxr_javadoccomment">	 */</em>
+<a class="jxr_linenumber" name="L1599" href="#L1599">1599</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;K,V&gt; Map&lt;K,V&gt; mapn(Class&lt;K&gt; keyType, Class&lt;V&gt; valueType) {
+<a class="jxr_linenumber" name="L1600" href="#L1600">1600</a> 		<strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="L1601" href="#L1601">1601</a> 	}
+<a class="jxr_linenumber" name="L1602" href="#L1602">1602</a> 
+<a class="jxr_linenumber" name="L1603" href="#L1603">1603</a> 	<em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L1604" href="#L1604">1604</a> <em class="jxr_javadoccomment">	 * Convenience method for creating a {@link LinkedHashMap}.</em>
+<a class="jxr_linenumber" name="L1605" href="#L1605">1605</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L1606" href="#L1606">1606</a> <em class="jxr_javadoccomment">	 * @param &lt;K&gt; The key type.</em>
+<a class="jxr_linenumber" name="L1607" href="#L1607">1607</a> <em class="jxr_javadoccomment">	 * @param &lt;V&gt; The value type.</em>
+<a class="jxr_linenumber" name="L1608" href="#L1608">1608</a> <em class="jxr_javadoccomment">	 * @param keyType The key type.</em>
+<a class="jxr_linenumber" name="L1609" href="#L1609">1609</a> <em class="jxr_javadoccomment">	 * @param valueType The value type.</em>
+<a class="jxr_linenumber" name="L1610" href="#L1610">1610</a> <em class="jxr_javadoccomment">	 * @return A new modifiable map.</em>
+<a class="jxr_linenumber" name="L1611" href="#L1611">1611</a> <em class="jxr_javadoccomment">	 */</em>
+<a class="jxr_linenumber" name="L1612" href="#L1612">1612</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;K,V&gt; LinkedHashMap&lt;K,V&gt; mapOf(Class&lt;K&gt; keyType, Class&lt;V&gt; valueType) {
+<a class="jxr_linenumber" name="L1613" href="#L1613">1613</a> 		<strong class="jxr_keyword">return</strong> map();
+<a class="jxr_linenumber" name="L1614" href="#L1614">1614</a> 	}
+<a class="jxr_linenumber" name="L1615" href="#L1615">1615</a> 
+<a class="jxr_linenumber" name="L1616" href="#L1616">1616</a> 	<em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L1617" href="#L1617">1617</a> <em class="jxr_javadoccomment">	 * Returns &lt;jk&gt;null&lt;/jk&gt; for the specified array type.</em>
+<a class="jxr_linenumber" name="L1618" href="#L1618">1618</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L1619" href="#L1619">1619</a> <em class="jxr_javadoccomment">	 * @param &lt;T&gt; The component type.</em>
+<a class="jxr_linenumber" name="L1620" href="#L1620">1620</a> <em class="jxr_javadoccomment">	 * @param type The component type class.</em>
+<a class="jxr_linenumber" name="L1621" href="#L1621">1621</a> <em class="jxr_javadoccomment">	 * @return &lt;jk&gt;null&lt;/jk&gt;.</em>
+<a class="jxr_linenumber" name="L1622" href="#L1622">1622</a> <em class="jxr_javadoccomment">	 */</em>
+<a class="jxr_linenumber" name="L1623" href="#L1623">1623</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;T&gt; T[] na(Class&lt;T&gt; type) {
+<a class="jxr_linenumber" name="L1624" href="#L1624">1624</a> 		<strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="L1625" href="#L1625">1625</a> 	}
+<a class="jxr_linenumber" name="L1626" href="#L1626">1626</a> 
+<a class="jxr_linenumber" name="L1627" href="#L1627">1627</a> 	<em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L1628" href="#L1628">1628</a> <em class="jxr_javadoccomment">	 * Adds all the specified values to the specified collection.</em>
+<a class="jxr_linenumber" name="L1629" href="#L1629">1629</a> <em class="jxr_javadoccomment">	 * Creates a new set if the value is &lt;jk&gt;null&lt;/jk&gt;.</em>
+<a class="jxr_linenumber" name="L1630" href="#L1630">1630</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L1631" href="#L1631">1631</a> <em class="jxr_javadoccomment">	 * @param &lt;E&gt; The element type.</em>
+<a class="jxr_linenumber" name="L1632" href="#L1632">1632</a> <em class="jxr_javadoccomment">	 * @param value The collection to add to.</em>
+<a class="jxr_linenumber" name="L1633" href="#L1633">1633</a> <em class="jxr_javadoccomment">	 * @param entries The entries to add.</em>
+<a class="jxr_linenumber" name="L1634" href="#L1634">1634</a> <em class="jxr_javadoccomment">	 * @return The set.</em>
+<a class="jxr_linenumber" name="L1635" href="#L1635">1635</a> <em class="jxr_javadoccomment">	 */</em>
+<a class="jxr_linenumber" name="L1636" href="#L1636">1636</a> 	@SafeVarargs
+<a class="jxr_linenumber" name="L1637" href="#L1637">1637</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;E&gt; List&lt;E&gt; prependAll(List&lt;E&gt; value, E...entries) {
+<a class="jxr_linenumber" name="L1638" href="#L1638">1638</a> 		<strong class="jxr_keyword">if</strong> (nn(entries)) {
+<a class="jxr_linenumber" name="L1639" href="#L1639">1639</a> 			<strong class="jxr_keyword">if</strong> (value == <strong class="jxr_keyword">null</strong>)
+<a class="jxr_linenumber" name="L1640" href="#L1640">1640</a> 				value = list(entries);
+<a class="jxr_linenumber" name="L1641" href="#L1641">1641</a> 			<strong class="jxr_keyword">else</strong>
+<a class="jxr_linenumber" name="L1642" href="#L1642">1642</a> 				value.addAll(0, l(entries));
+<a class="jxr_linenumber" name="L1643" href="#L1643">1643</a> 		}
+<a class="jxr_linenumber" name="L1644" href="#L1644">1644</a> 		<strong class="jxr_keyword">return</strong> value;
+<a class="jxr_linenumber" name="L1645" href="#L1645">1645</a> 	}
+<a class="jxr_linenumber" name="L1646" href="#L1646">1646</a> 
+<a class="jxr_linenumber" name="L1647" href="#L1647">1647</a> 	<em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L1648" href="#L1648">1648</a> <em class="jxr_javadoccomment">	 * Reverses the entries in an array.</em>
+<a class="jxr_linenumber" name="L1649" href="#L1649">1649</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L1650" href="#L1650">1650</a> <em class="jxr_javadoccomment">	 * @param &lt;E&gt; The element type.</em>
+<a class="jxr_linenumber" name="L1651" href="#L1651">1651</a> <em class="jxr_javadoccomment">	 * @param array The array to reverse.</em>
+<a class="jxr_linenumber" name="L1652" href="#L1652">1652</a> <em class="jxr_javadoccomment">	 * @return The same array.</em>
+<a class="jxr_linenumber" name="L1653" href="#L1653">1653</a> <em class="jxr_javadoccomment">	 */</em>
+<a class="jxr_linenumber" name="L1654" href="#L1654">1654</a> 	<em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L1655" href="#L1655">1655</a> <em class="jxr_javadoccomment">	 * Reverses the elements in the specified array in-place.</em>
+<a class="jxr_linenumber" name="L1656" href="#L1656">1656</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L1657" href="#L1657">1657</a> <em class="jxr_javadoccomment">	 * @param &lt;E&gt; The element type.</em>
+<a class="jxr_linenumber" name="L1658" href="#L1658">1658</a> <em class="jxr_javadoccomment">	 * @param array The array to reverse.</em>
+<a class="jxr_linenumber" name="L1659" href="#L1659">1659</a> <em class="jxr_javadoccomment">	 * @return The same array, reversed.</em>
+<a class="jxr_linenumber" name="L1660" href="#L1660">1660</a> <em class="jxr_javadoccomment">	 */</em>
+<a class="jxr_linenumber" name="L1661" href="#L1661">1661</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;E&gt; E[] reverse(E[] array) {
+<a class="jxr_linenumber" name="L1662" href="#L1662">1662</a> 		<strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">var</strong> i = 0; i &lt; array.length / 2; i++) {
+<a class="jxr_linenumber" name="L1663" href="#L1663">1663</a> 			E temp = array[i];
+<a class="jxr_linenumber" name="L1664" href="#L1664">1664</a> 			array[i] = array[array.length - i - 1];
+<a class="jxr_linenumber" name="L1665" href="#L1665">1665</a> 			array[array.length - i - 1] = temp;
+<a class="jxr_linenumber" name="L1666" href="#L1666">1666</a> 		}
+<a class="jxr_linenumber" name="L1667" href="#L1667">1667</a> 		<strong class="jxr_keyword">return</strong> array;
+<a class="jxr_linenumber" name="L1668" href="#L1668">1668</a> 	}
+<a class="jxr_linenumber" name="L1669" href="#L1669">1669</a> 
+<a class="jxr_linenumber" name="L1670" href="#L1670">1670</a> 	<em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L1671" href="#L1671">1671</a> <em class="jxr_javadoccomment">	 * Returns a reversed view of the specified list.</em>
 <a class="jxr_linenumber" name="L1672" href="#L1672">1672</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L1673" href="#L1673">1673</a> <em class="jxr_javadoccomment">	 * @param &lt;E&gt; The element type.</em>
-<a class="jxr_linenumber" name="L1674" href="#L1674">1674</a> <em class="jxr_javadoccomment">	 * @param list The list to reverse.</em>
-<a class="jxr_linenumber" name="L1675" href="#L1675">1675</a> <em class="jxr_javadoccomment">	 * @return A reversed view of the list.</em>
-<a class="jxr_linenumber" name="L1676" href="#L1676">1676</a> <em class="jxr_javadoccomment">	 */</em>
-<a class="jxr_linenumber" name="L1677" href="#L1677">1677</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;E&gt; List&lt;E&gt; reverse(List&lt;E&gt; list) {
-<a class="jxr_linenumber" name="L1678" href="#L1678">1678</a> 		<strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> ReversedList&lt;&gt;(list);
-<a class="jxr_linenumber" name="L1679" href="#L1679">1679</a> 	}
-<a class="jxr_linenumber" name="L1680" href="#L1680">1680</a> 
-<a class="jxr_linenumber" name="L1681" href="#L1681">1681</a> 	<em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L1682" href="#L1682">1682</a> <em class="jxr_javadoccomment">	 * Returns a reverse stream of the specified list.</em>
-<a class="jxr_linenumber" name="L1683" href="#L1683">1683</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L1684" href="#L1684">1684</a> <em class="jxr_javadoccomment">	 * &lt;h5 class='section'&gt;Example:&lt;/h5&gt;</em>
-<a class="jxr_linenumber" name="L1685" href="#L1685">1685</a> <em class="jxr_javadoccomment">	 * &lt;p class='bjava'&gt;</em>
-<a class="jxr_linenumber" name="L1686" href="#L1686">1686</a> <em class="jxr_javadoccomment">	 * 	List&amp;lt;String&amp;gt; &lt;jv&gt;list&lt;/jv&gt; = &lt;jsm&gt;list&lt;/jsm&gt;(&lt;js&gt;"a"&lt;/js&gt;, &lt;js&gt;"b"&lt;/js&gt;, &lt;js&gt;"c"&lt;/js&gt;);</em>
-<a class="jxr_linenumber" name="L1687" href="#L1687">1687</a> <em class="jxr_javadoccomment">	 * 	Stream&amp;lt;String&amp;gt; &lt;jv&gt;reversed&lt;/jv&gt; = &lt;jsm&gt;rstream&lt;/jsm&gt;(&lt;jv&gt;list&lt;/jv&gt;);</em>
-<a class="jxr_linenumber" name="L1688" href="#L1688">1688</a> <em class="jxr_javadoccomment">	 * 	&lt;jc&gt;// Produces stream: "c", "b", "a"&lt;/jc&gt;</em>
-<a class="jxr_linenumber" name="L1689" href="#L1689">1689</a> <em class="jxr_javadoccomment">	 * &lt;/p&gt;</em>
-<a class="jxr_linenumber" name="L1690" href="#L1690">1690</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L1691" href="#L1691">1691</a> <em class="jxr_javadoccomment">	 * @param &lt;T&gt; The element type.</em>
-<a class="jxr_linenumber" name="L1692" href="#L1692">1692</a> <em class="jxr_javadoccomment">	 * @param value The list to stream in reverse order. Can be &lt;jk&gt;null&lt;/jk&gt;.</em>
-<a class="jxr_linenumber" name="L1693" href="#L1693">1693</a> <em class="jxr_javadoccomment">	 * @return A stream of the list elements in reverse order, or an empty stream if the list is &lt;jk&gt;null&lt;/jk&gt; or empty.</em>
-<a class="jxr_linenumber" name="L1694" href="#L1694">1694</a> <em class="jxr_javadoccomment">	 */</em>
-<a class="jxr_linenumber" name="L1695" href="#L1695">1695</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;T&gt; Stream&lt;T&gt; rstream(List&lt;T&gt; value) {
-<a class="jxr_linenumber" name="L1696" href="#L1696">1696</a> 		<strong class="jxr_keyword">if</strong> (value == <strong class="jxr_keyword">null</strong> || value.isEmpty())
-<a class="jxr_linenumber" name="L1697" href="#L1697">1697</a> 			<strong class="jxr_keyword">return</strong> Stream.empty();
-<a class="jxr_linenumber" name="L1698" href="#L1698">1698</a> 		<strong class="jxr_keyword">return</strong> IntStream.range(0, value.size()).mapToObj(i -&gt; value.get(value.size() - 1 - i));
-<a class="jxr_linenumber" name="L1699" href="#L1699">1699</a> 	}
-<a class="jxr_linenumber" name="L1700" href="#L1700">1700</a> 
-<a class="jxr_linenumber" name="L1701" href="#L1701">1701</a> 	<em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L1702" href="#L1702">1702</a> <em class="jxr_javadoccomment">	 * Shortcut for creating a modifiable set out of an array of values.</em>
-<a class="jxr_linenumber" name="L1703" href="#L1703">1703</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L1704" href="#L1704">1704</a> <em class="jxr_javadoccomment">	 * @param &lt;T&gt; The element type.</em>
-<a class="jxr_linenumber" name="L1705" href="#L1705">1705</a> <em class="jxr_javadoccomment">	 * @param values The values to add to the set.</em>
-<a class="jxr_linenumber" name="L1706" href="#L1706">1706</a> <em class="jxr_javadoccomment">	 * @return A modifiable LinkedHashSet containing the specified values.</em>
-<a class="jxr_linenumber" name="L1707" href="#L1707">1707</a> <em class="jxr_javadoccomment">	 */</em>
-<a class="jxr_linenumber" name="L1708" href="#L1708">1708</a> 	@SafeVarargs
-<a class="jxr_linenumber" name="L1709" href="#L1709">1709</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;T&gt; LinkedHashSet&lt;T&gt; set(T...values) {  <em class="jxr_comment">// NOSONAR</em>
-<a class="jxr_linenumber" name="L1710" href="#L1710">1710</a> 		assertArgNotNull(<span class="jxr_string">"values"</span>, values);
-<a class="jxr_linenumber" name="L1711" href="#L1711">1711</a> 		<strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> LinkedHashSet&lt;&gt;(Arrays.asList(values));
-<a class="jxr_linenumber" name="L1712" href="#L1712">1712</a> 	}
-<a class="jxr_linenumber" name="L1713" href="#L1713">1713</a> 
-<a class="jxr_linenumber" name="L1714" href="#L1714">1714</a> 	<em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L1715" href="#L1715">1715</a> <em class="jxr_javadoccomment">	 * Returns an empty immutable set.</em>
-<a class="jxr_linenumber" name="L1716" href="#L1716">1716</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L1717" href="#L1717">1717</a> <em class="jxr_javadoccomment">	 * &lt;p&gt;</em>
-<a class="jxr_linenumber" name="L1718" href="#L1718">1718</a> <em class="jxr_javadoccomment">	 * This is a convenience method that returns {@link Collections#emptySet()}.</em>
+<a class="jxr_linenumber" name="L1673" href="#L1673">1673</a> <em class="jxr_javadoccomment">	 * &lt;p&gt;</em>
+<a class="jxr_linenumber" name="L1674" href="#L1674">1674</a> <em class="jxr_javadoccomment">	 * The returned list is a live view that reflects changes to the original list.</em>
+<a class="jxr_linenumber" name="L1675" href="#L1675">1675</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L1676" href="#L1676">1676</a> <em class="jxr_javadoccomment">	 * @param &lt;E&gt; The element type.</em>
+<a class="jxr_linenumber" name="L1677" href="#L1677">1677</a> <em class="jxr_javadoccomment">	 * @param list The list to reverse.</em>
+<a class="jxr_linenumber" name="L1678" href="#L1678">1678</a> <em class="jxr_javadoccomment">	 * @return A reversed view of the list.</em>
+<a class="jxr_linenumber" name="L1679" href="#L1679">1679</a> <em class="jxr_javadoccomment">	 */</em>
+<a class="jxr_linenumber" name="L1680" href="#L1680">1680</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;E&gt; List&lt;E&gt; reverse(List&lt;E&gt; list) {
+<a class="jxr_linenumber" name="L1681" href="#L1681">1681</a> 		<strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> ReversedList&lt;&gt;(list);
+<a class="jxr_linenumber" name="L1682" href="#L1682">1682</a> 	}
+<a class="jxr_linenumber" name="L1683" href="#L1683">1683</a> 
+<a class="jxr_linenumber" name="L1684" href="#L1684">1684</a> 	<em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L1685" href="#L1685">1685</a> <em class="jxr_javadoccomment">	 * Returns a reverse stream of the specified list.</em>
+<a class="jxr_linenumber" name="L1686" href="#L1686">1686</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L1687" href="#L1687">1687</a> <em class="jxr_javadoccomment">	 * &lt;h5 class='section'&gt;Example:&lt;/h5&gt;</em>
+<a class="jxr_linenumber" name="L1688" href="#L1688">1688</a> <em class="jxr_javadoccomment">	 * &lt;p class='bjava'&gt;</em>
+<a class="jxr_linenumber" name="L1689" href="#L1689">1689</a> <em class="jxr_javadoccomment">	 * 	List&amp;lt;String&amp;gt; &lt;jv&gt;list&lt;/jv&gt; = &lt;jsm&gt;list&lt;/jsm&gt;(&lt;js&gt;"a"&lt;/js&gt;, &lt;js&gt;"b"&lt;/js&gt;, &lt;js&gt;"c"&lt;/js&gt;);</em>
+<a class="jxr_linenumber" name="L1690" href="#L1690">1690</a> <em class="jxr_javadoccomment">	 * 	Stream&amp;lt;String&amp;gt; &lt;jv&gt;reversed&lt;/jv&gt; = &lt;jsm&gt;rstream&lt;/jsm&gt;(&lt;jv&gt;list&lt;/jv&gt;);</em>
+<a class="jxr_linenumber" name="L1691" href="#L1691">1691</a> <em class="jxr_javadoccomment">	 * 	&lt;jc&gt;// Produces stream: "c", "b", "a"&lt;/jc&gt;</em>
+<a class="jxr_linenumber" name="L1692" href="#L1692">1692</a> <em class="jxr_javadoccomment">	 * &lt;/p&gt;</em>
+<a class="jxr_linenumber" name="L1693" href="#L1693">1693</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L1694" href="#L1694">1694</a> <em class="jxr_javadoccomment">	 * @param &lt;T&gt; The element type.</em>
+<a class="jxr_linenumber" name="L1695" href="#L1695">1695</a> <em class="jxr_javadoccomment">	 * @param value The list to stream in reverse order. Can be &lt;jk&gt;null&lt;/jk&gt;.</em>
+<a class="jxr_linenumber" name="L1696" href="#L1696">1696</a> <em class="jxr_javadoccomment">	 * @return A stream of the list elements in reverse order, or an empty stream if the list is &lt;jk&gt;null&lt;/jk&gt; or empty.</em>
+<a class="jxr_linenumber" name="L1697" href="#L1697">1697</a> <em class="jxr_javadoccomment">	 */</em>
+<a class="jxr_linenumber" name="L1698" href="#L1698">1698</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;T&gt; Stream&lt;T&gt; rstream(List&lt;T&gt; value) {
+<a class="jxr_linenumber" name="L1699" href="#L1699">1699</a> 		<strong class="jxr_keyword">if</strong> (value == <strong class="jxr_keyword">null</strong> || value.isEmpty())
+<a class="jxr_linenumber" name="L1700" href="#L1700">1700</a> 			<strong class="jxr_keyword">return</strong> Stream.empty();
+<a class="jxr_linenumber" name="L1701" href="#L1701">1701</a> 		<strong class="jxr_keyword">return</strong> IntStream.range(0, value.size()).mapToObj(i -&gt; value.get(value.size() - 1 - i));
+<a class="jxr_linenumber" name="L1702" href="#L1702">1702</a> 	}
+<a class="jxr_linenumber" name="L1703" href="#L1703">1703</a> 
+<a class="jxr_linenumber" name="L1704" href="#L1704">1704</a> 	<em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L1705" href="#L1705">1705</a> <em class="jxr_javadoccomment">	 * Shortcut for creating a modifiable set out of an array of values.</em>
+<a class="jxr_linenumber" name="L1706" href="#L1706">1706</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L1707" href="#L1707">1707</a> <em class="jxr_javadoccomment">	 * @param &lt;T&gt; The element type.</em>
+<a class="jxr_linenumber" name="L1708" href="#L1708">1708</a> <em class="jxr_javadoccomment">	 * @param values The values to add to the set.</em>
+<a class="jxr_linenumber" name="L1709" href="#L1709">1709</a> <em class="jxr_javadoccomment">	 * @return A modifiable LinkedHashSet containing the specified values.</em>
+<a class="jxr_linenumber" name="L1710" href="#L1710">1710</a> <em class="jxr_javadoccomment">	 */</em>
+<a class="jxr_linenumber" name="L1711" href="#L1711">1711</a> 	@SafeVarargs
+<a class="jxr_linenumber" name="L1712" href="#L1712">1712</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;T&gt; LinkedHashSet&lt;T&gt; set(T...values) {  <em class="jxr_comment">// NOSONAR</em>
+<a class="jxr_linenumber" name="L1713" href="#L1713">1713</a> 		assertArgNotNull(<span class="jxr_string">"values"</span>, values);
+<a class="jxr_linenumber" name="L1714" href="#L1714">1714</a> 		<strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> LinkedHashSet&lt;&gt;(Arrays.asList(values));
+<a class="jxr_linenumber" name="L1715" href="#L1715">1715</a> 	}
+<a class="jxr_linenumber" name="L1716" href="#L1716">1716</a> 
+<a class="jxr_linenumber" name="L1717" href="#L1717">1717</a> 	<em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L1718" href="#L1718">1718</a> <em class="jxr_javadoccomment">	 * Returns an empty immutable set.</em>
 <a class="jxr_linenumber" name="L1719" href="#L1719">1719</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L1720" href="#L1720">1720</a> <em class="jxr_javadoccomment">	 * &lt;h5 class='section'&gt;Example:&lt;/h5&gt;</em>
-<a class="jxr_linenumber" name="L1721" href="#L1721">1721</a> <em class="jxr_javadoccomment">	 * &lt;p class='bjava'&gt;</em>
-<a class="jxr_linenumber" name="L1722" href="#L1722">1722</a> <em class="jxr_javadoccomment">	 * 	Set&amp;lt;String&amp;gt; &lt;jv&gt;empty&lt;/jv&gt; = CollectionUtils.&lt;jsf&gt;sete&lt;/jsf&gt;();  &lt;jc&gt;// Returns Collections.emptySet()&lt;/jc&gt;</em>
-<a class="jxr_linenumber" name="L1723" href="#L1723">1723</a> <em class="jxr_javadoccomment">	 * &lt;/p&gt;</em>
-<a class="jxr_linenumber" name="L1724" href="#L1724">1724</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L1725" href="#L1725">1725</a> <em class="jxr_javadoccomment">	 * @param &lt;T&gt; The element type.</em>
-<a class="jxr_linenumber" name="L1726" href="#L1726">1726</a> <em class="jxr_javadoccomment">	 * @return An empty immutable set.</em>
-<a class="jxr_linenumber" name="L1727" href="#L1727">1727</a> <em class="jxr_javadoccomment">	 * @see Collections#emptySet()</em>
-<a class="jxr_linenumber" name="L1728" href="#L1728">1728</a> <em class="jxr_javadoccomment">	 */</em>
-<a class="jxr_linenumber" name="L1729" href="#L1729">1729</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;T&gt; Set&lt;T&gt; sete() {
-<a class="jxr_linenumber" name="L1730" href="#L1730">1730</a> 		<strong class="jxr_keyword">return</strong> Collections.emptySet();
-<a class="jxr_linenumber" name="L1731" href="#L1731">1731</a> 	}
-<a class="jxr_linenumber" name="L1732" href="#L1732">1732</a> 
-<a class="jxr_linenumber" name="L1733" href="#L1733">1733</a> 	<em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L1734" href="#L1734">1734</a> <em class="jxr_javadoccomment">	 * Convenience factory for a {@link SetBuilder}.</em>
-<a class="jxr_linenumber" name="L1735" href="#L1735">1735</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L1736" href="#L1736">1736</a> <em class="jxr_javadoccomment">	 * @param &lt;E&gt; The element type.</em>
-<a class="jxr_linenumber" name="L1737" href="#L1737">1737</a> <em class="jxr_javadoccomment">	 * @param type The element type.</em>
-<a class="jxr_linenumber" name="L1738" href="#L1738">1738</a> <em class="jxr_javadoccomment">	 * @param converters Optional converters to use for converting values.</em>
-<a class="jxr_linenumber" name="L1739" href="#L1739">1739</a> <em class="jxr_javadoccomment">	 * @return A new set builder.</em>
-<a class="jxr_linenumber" name="L1740" href="#L1740">1740</a> <em class="jxr_javadoccomment">	 */</em>
-<a class="jxr_linenumber" name="L1741" href="#L1741">1741</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;E&gt; SetBuilder&lt;E&gt; setb(Class&lt;E&gt; type, Converter...converters) {
-<a class="jxr_linenumber" name="L1742" href="#L1742">1742</a> 		<strong class="jxr_keyword">return</strong> SetBuilder.create(type).converters(converters);
-<a class="jxr_linenumber" name="L1743" href="#L1743">1743</a> 	}
-<a class="jxr_linenumber" name="L1744" href="#L1744">1744</a> 
-<a class="jxr_linenumber" name="L1745" href="#L1745">1745</a> 	<em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L1746" href="#L1746">1746</a> <em class="jxr_javadoccomment">	 * Convenience method for creating a {@link LinkedHashSet}.</em>
-<a class="jxr_linenumber" name="L1747" href="#L1747">1747</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L1748" href="#L1748">1748</a> <em class="jxr_javadoccomment">	 * @param &lt;E&gt; The element type.</em>
-<a class="jxr_linenumber" name="L1749" href="#L1749">1749</a> <em class="jxr_javadoccomment">	 * @param elementType The element type.</em>
-<a class="jxr_linenumber" name="L1750" href="#L1750">1750</a> <em class="jxr_javadoccomment">	 * @param values The values to initialize the set with.</em>
-<a class="jxr_linenumber" name="L1751" href="#L1751">1751</a> <em class="jxr_javadoccomment">	 * @return A new modifiable set.</em>
-<a class="jxr_linenumber" name="L1752" href="#L1752">1752</a> <em class="jxr_javadoccomment">	 */</em>
-<a class="jxr_linenumber" name="L1753" href="#L1753">1753</a> 	@SafeVarargs
-<a class="jxr_linenumber" name="L1754" href="#L1754">1754</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;E&gt; LinkedHashSet&lt;E&gt; setOf(Class&lt;E&gt; elementType, E...values) {
-<a class="jxr_linenumber" name="L1755" href="#L1755">1755</a> 		<strong class="jxr_keyword">return</strong> set(values);
-<a class="jxr_linenumber" name="L1756" href="#L1756">1756</a> 	}
-<a class="jxr_linenumber" name="L1757" href="#L1757">1757</a> 
-<a class="jxr_linenumber" name="L1758" href="#L1758">1758</a> 	<em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L1759" href="#L1759">1759</a> <em class="jxr_javadoccomment">	 * Shortcut for creating a short array.</em>
-<a class="jxr_linenumber" name="L1760" href="#L1760">1760</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L1761" href="#L1761">1761</a> <em class="jxr_javadoccomment">	 * &lt;p&gt;Accepts int values and converts them to shorts, eliminating the need for explicit short casts.&lt;/p&gt;</em>
-<a class="jxr_linenumber" name="L1762" href="#L1762">1762</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L1763" href="#L1763">1763</a> <em class="jxr_javadoccomment">	 * &lt;h5 class='section'&gt;Example:&lt;/h5&gt;</em>
-<a class="jxr_linenumber" name="L1764" href="#L1764">1764</a> <em class="jxr_javadoccomment">	 * &lt;p class='bjava'&gt;</em>
-<a class="jxr_linenumber" name="L1765" href="#L1765">1765</a> <em class="jxr_javadoccomment">	 * 	&lt;jk&gt;short&lt;/jk&gt;[] &lt;jv&gt;myArray&lt;/jv&gt; = &lt;jsm&gt;shorts&lt;/jsm&gt;(1, 2, 3);</em>
-<a class="jxr_linenumber" name="L1766" href="#L1766">1766</a> <em class="jxr_javadoccomment">	 * &lt;/p&gt;</em>
-<a class="jxr_linenumber" name="L1767" href="#L1767">1767</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L1768" href="#L1768">1768</a> <em class="jxr_javadoccomment">	 * @param value The int values to convert to shorts. Values outside the short range (-32768 to 32767) will be truncated.</em>
-<a class="jxr_linenumber" name="L1769" href="#L1769">1769</a> <em class="jxr_javadoccomment">	 * @return A new short array.</em>
-<a class="jxr_linenumber" name="L1770" href="#L1770">1770</a> <em class="jxr_javadoccomment">	 */</em>
-<a class="jxr_linenumber" name="L1771" href="#L1771">1771</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">short</strong>[] shorts(<strong class="jxr_keyword">int</strong>...value) {
-<a class="jxr_linenumber" name="L1772" href="#L1772">1772</a> 		<strong class="jxr_keyword">var</strong> result = <strong class="jxr_keyword">new</strong> <strong class="jxr_keyword">short</strong>[value.length];
-<a class="jxr_linenumber" name="L1773" href="#L1773">1773</a> 		<strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">var</strong> i = 0; i &lt; value.length; i++) {
-<a class="jxr_linenumber" name="L1774" href="#L1774">1774</a> 			result[i] = (<strong class="jxr_keyword">short</strong>)value[i];
-<a class="jxr_linenumber" name="L1775" href="#L1775">1775</a> 		}
-<a class="jxr_linenumber" name="L1776" href="#L1776">1776</a> 		<strong class="jxr_keyword">return</strong> result;
-<a class="jxr_linenumber" name="L1777" href="#L1777">1777</a> 	}
-<a class="jxr_linenumber" name="L1778" href="#L1778">1778</a> 
-<a class="jxr_linenumber" name="L1779" href="#L1779">1779</a> 	<em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L1780" href="#L1780">1780</a> <em class="jxr_javadoccomment">	 * Convenience method for creating an {@link ArrayList} and sorting it.</em>
-<a class="jxr_linenumber" name="L1781" href="#L1781">1781</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L1782" href="#L1782">1782</a> <em class="jxr_javadoccomment">	 * @param &lt;E&gt; The element type.</em>
-<a class="jxr_linenumber" name="L1783" href="#L1783">1783</a> <em class="jxr_javadoccomment">	 * @param comparator The comparator to use to sort the list.</em>
-<a class="jxr_linenumber" name="L1784" href="#L1784">1784</a> <em class="jxr_javadoccomment">	 * @param value The values to initialize the list with.</em>
-<a class="jxr_linenumber" name="L1785" href="#L1785">1785</a> <em class="jxr_javadoccomment">	 * @return A new modifiable list.</em>
-<a class="jxr_linenumber" name="L1786" href="#L1786">1786</a> <em class="jxr_javadoccomment">	 */</em>
-<a class="jxr_linenumber" name="L1787" href="#L1787">1787</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;E&gt; ArrayList&lt;E&gt; sortedList(Comparator&lt;E&gt; comparator, Collection&lt;E&gt; value) {
-<a class="jxr_linenumber" name="L1788" href="#L1788">1788</a> 		ArrayList&lt;E&gt; l = toList(value);
-<a class="jxr_linenumber" name="L1789" href="#L1789">1789</a> 		Collections.sort(l, comparator);
-<a class="jxr_linenumber" name="L1790" href="#L1790">1790</a> 		<strong class="jxr_keyword">return</strong> l;
-<a class="jxr_linenumber" name="L1791" href="#L1791">1791</a> 	}
-<a class="jxr_linenumber" name="L1792" href="#L1792">1792</a> 
-<a class="jxr_linenumber" name="L1793" href="#L1793">1793</a> 	<em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L1794" href="#L1794">1794</a> <em class="jxr_javadoccomment">	 * Convenience method for creating an {@link ArrayList} and sorting it.</em>
-<a class="jxr_linenumber" name="L1795" href="#L1795">1795</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L1796" href="#L1796">1796</a> <em class="jxr_javadoccomment">	 * @param &lt;E&gt; The element type.</em>
-<a class="jxr_linenumber" name="L1797" href="#L1797">1797</a> <em class="jxr_javadoccomment">	 * @param comparator The comparator to use to sort the list.</em>
-<a class="jxr_linenumber" name="L1798" href="#L1798">1798</a> <em class="jxr_javadoccomment">	 * @param values The values to initialize the list with.</em>
-<a class="jxr_linenumber" name="L1799" href="#L1799">1799</a> <em class="jxr_javadoccomment">	 * @return A new modifiable list.</em>
-<a class="jxr_linenumber" name="L1800" href="#L1800">1800</a> <em class="jxr_javadoccomment">	 */</em>
-<a class="jxr_linenumber" name="L1801" href="#L1801">1801</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;E&gt; List&lt;E&gt; sortedList(Comparator&lt;E&gt; comparator, E[] values) {
-<a class="jxr_linenumber" name="L1802" href="#L1802">1802</a> 		List&lt;E&gt; l = list(values);
-<a class="jxr_linenumber" name="L1803" href="#L1803">1803</a> 		Collections.sort(l, comparator);
-<a class="jxr_linenumber" name="L1804" href="#L1804">1804</a> 		<strong class="jxr_keyword">return</strong> l;
-<a class="jxr_linenumber" name="L1805" href="#L1805">1805</a> 	}
-<a class="jxr_linenumber" name="L1806" href="#L1806">1806</a> 
-<a class="jxr_linenumber" name="L1807" href="#L1807">1807</a> 	<em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L1808" href="#L1808">1808</a> <em class="jxr_javadoccomment">	 * Convenience method for creating an {@link ArrayList} and sorting it.</em>
-<a class="jxr_linenumber" name="L1809" href="#L1809">1809</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L1810" href="#L1810">1810</a> <em class="jxr_javadoccomment">	 * @param &lt;E&gt; The element type.</em>
-<a class="jxr_linenumber" name="L1811" href="#L1811">1811</a> <em class="jxr_javadoccomment">	 * @param values The values to initialize the list with.</em>
-<a class="jxr_linenumber" name="L1812" href="#L1812">1812</a> <em class="jxr_javadoccomment">	 * @return A new modifiable list.</em>
-<a class="jxr_linenumber" name="L1813" href="#L1813">1813</a> <em class="jxr_javadoccomment">	 */</em>
-<a class="jxr_linenumber" name="L1814" href="#L1814">1814</a> 	@SuppressWarnings({ <span class="jxr_string">"rawtypes"</span>, <span class="jxr_string">"unchecked"</span> })
-<a class="jxr_linenumber" name="L1815" href="#L1815">1815</a> 	@SafeVarargs
-<a class="jxr_linenumber" name="L1816" href="#L1816">1816</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;E&gt; List&lt;E&gt; sortedList(E...values) {
-<a class="jxr_linenumber" name="L1817" href="#L1817">1817</a> 		List&lt;E&gt; l = list(values);
-<a class="jxr_linenumber" name="L1818" href="#L1818">1818</a> 		Collections.sort((List&lt;Comparable&gt;)l);
-<a class="jxr_linenumber" name="L1819" href="#L1819">1819</a> 		<strong class="jxr_keyword">return</strong> l;
-<a class="jxr_linenumber" name="L1820" href="#L1820">1820</a> 	}
-<a class="jxr_linenumber" name="L1821" href="#L1821">1821</a> 
-<a class="jxr_linenumber" name="L1822" href="#L1822">1822</a> 	<em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L1823" href="#L1823">1823</a> <em class="jxr_javadoccomment">	 * Convenience method for creating a {@link TreeMap}.</em>
-<a class="jxr_linenumber" name="L1824" href="#L1824">1824</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L1825" href="#L1825">1825</a> <em class="jxr_javadoccomment">	 * @param &lt;K&gt; The key type.</em>
-<a class="jxr_linenumber" name="L1826" href="#L1826">1826</a> <em class="jxr_javadoccomment">	 * @param &lt;V&gt; The value type.</em>
-<a class="jxr_linenumber" name="L1827" href="#L1827">1827</a> <em class="jxr_javadoccomment">	 * @return A new modifiable set.</em>
-<a class="jxr_linenumber" name="L1828" href="#L1828">1828</a> <em class="jxr_javadoccomment">	 */</em>
-<a class="jxr_linenumber" name="L1829" href="#L1829">1829</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;K,V&gt; TreeMap&lt;K,V&gt; sortedMap() {
-<a class="jxr_linenumber" name="L1830" href="#L1830">1830</a> 		<strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> TreeMap&lt;&gt;();
-<a class="jxr_linenumber" name="L1831" href="#L1831">1831</a> 	}
-<a class="jxr_linenumber" name="L1832" href="#L1832">1832</a> 
-<a class="jxr_linenumber" name="L1833" href="#L1833">1833</a> 	<em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L1834" href="#L1834">1834</a> <em class="jxr_javadoccomment">	 * Convenience method for creating a {@link TreeSet}.</em>
-<a class="jxr_linenumber" name="L1835" href="#L1835">1835</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L1836" href="#L1836">1836</a> <em class="jxr_javadoccomment">	 * @param &lt;E&gt; The element type.</em>
-<a class="jxr_linenumber" name="L1837" href="#L1837">1837</a> <em class="jxr_javadoccomment">	 * @param values The values to initialize the set with.</em>
-<a class="jxr_linenumber" name="L1838" href="#L1838">1838</a> <em class="jxr_javadoccomment">	 * @return A new modifiable set.</em>
-<a class="jxr_linenumber" name="L1839" href="#L1839">1839</a> <em class="jxr_javadoccomment">	 */</em>
-<a class="jxr_linenumber" name="L1840" href="#L1840">1840</a> 	@SafeVarargs
-<a class="jxr_linenumber" name="L1841" href="#L1841">1841</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;E&gt; TreeSet&lt;E&gt; sortedSet(E...values) {
-<a class="jxr_linenumber" name="L1842" href="#L1842">1842</a> 		assertArgNotNull(<span class="jxr_string">"values"</span>, values);
-<a class="jxr_linenumber" name="L1843" href="#L1843">1843</a> 		<strong class="jxr_keyword">var</strong> l = <strong class="jxr_keyword">new</strong> TreeSet&lt;E&gt;();
-<a class="jxr_linenumber" name="L1844" href="#L1844">1844</a> 		<strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">var</strong> v : values)
-<a class="jxr_linenumber" name="L1845" href="#L1845">1845</a> 			l.add(v);
-<a class="jxr_linenumber" name="L1846" href="#L1846">1846</a> 		<strong class="jxr_keyword">return</strong> l;
-<a class="jxr_linenumber" name="L1847" href="#L1847">1847</a> 	}
-<a class="jxr_linenumber" name="L1848" href="#L1848">1848</a> 
-<a class="jxr_linenumber" name="L1849" href="#L1849">1849</a> 	<em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L1850" href="#L1850">1850</a> <em class="jxr_javadoccomment">	 * Returns a stream of the specified array.</em>
-<a class="jxr_linenumber" name="L1851" href="#L1851">1851</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L1852" href="#L1852">1852</a> <em class="jxr_javadoccomment">	 * &lt;p&gt;</em>
-<a class="jxr_linenumber" name="L1853" href="#L1853">1853</a> <em class="jxr_javadoccomment">	 * Gracefully handles &lt;jk&gt;null&lt;/jk&gt; arrays by returning an empty stream.</em>
+<a class="jxr_linenumber" name="L1720" href="#L1720">1720</a> <em class="jxr_javadoccomment">	 * &lt;p&gt;</em>
+<a class="jxr_linenumber" name="L1721" href="#L1721">1721</a> <em class="jxr_javadoccomment">	 * This is a convenience method that returns {@link Collections#emptySet()}.</em>
+<a class="jxr_linenumber" name="L1722" href="#L1722">1722</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L1723" href="#L1723">1723</a> <em class="jxr_javadoccomment">	 * &lt;h5 class='section'&gt;Example:&lt;/h5&gt;</em>
+<a class="jxr_linenumber" name="L1724" href="#L1724">1724</a> <em class="jxr_javadoccomment">	 * &lt;p class='bjava'&gt;</em>
+<a class="jxr_linenumber" name="L1725" href="#L1725">1725</a> <em class="jxr_javadoccomment">	 * 	Set&amp;lt;String&amp;gt; &lt;jv&gt;empty&lt;/jv&gt; = CollectionUtils.&lt;jsf&gt;sete&lt;/jsf&gt;();  &lt;jc&gt;// Returns Collections.emptySet()&lt;/jc&gt;</em>
+<a class="jxr_linenumber" name="L1726" href="#L1726">1726</a> <em class="jxr_javadoccomment">	 * &lt;/p&gt;</em>
+<a class="jxr_linenumber" name="L1727" href="#L1727">1727</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L1728" href="#L1728">1728</a> <em class="jxr_javadoccomment">	 * @param &lt;T&gt; The element type.</em>
+<a class="jxr_linenumber" name="L1729" href="#L1729">1729</a> <em class="jxr_javadoccomment">	 * @return An empty immutable set.</em>
+<a class="jxr_linenumber" name="L1730" href="#L1730">1730</a> <em class="jxr_javadoccomment">	 * @see Collections#emptySet()</em>
+<a class="jxr_linenumber" name="L1731" href="#L1731">1731</a> <em class="jxr_javadoccomment">	 */</em>
+<a class="jxr_linenumber" name="L1732" href="#L1732">1732</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;T&gt; Set&lt;T&gt; sete() {
+<a class="jxr_linenumber" name="L1733" href="#L1733">1733</a> 		<strong class="jxr_keyword">return</strong> Collections.emptySet();
+<a class="jxr_linenumber" name="L1734" href="#L1734">1734</a> 	}
+<a class="jxr_linenumber" name="L1735" href="#L1735">1735</a> 
+<a class="jxr_linenumber" name="L1736" href="#L1736">1736</a> 	<em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L1737" href="#L1737">1737</a> <em class="jxr_javadoccomment">	 * Convenience factory for a {@link SetBuilder}.</em>
+<a class="jxr_linenumber" name="L1738" href="#L1738">1738</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L1739" href="#L1739">1739</a> <em class="jxr_javadoccomment">	 * @param &lt;E&gt; The element type.</em>
+<a class="jxr_linenumber" name="L1740" href="#L1740">1740</a> <em class="jxr_javadoccomment">	 * @param type The element type.</em>
+<a class="jxr_linenumber" name="L1741" href="#L1741">1741</a> <em class="jxr_javadoccomment">	 * @param converters Optional converters to use for converting values.</em>
+<a class="jxr_linenumber" name="L1742" href="#L1742">1742</a> <em class="jxr_javadoccomment">	 * @return A new set builder.</em>
+<a class="jxr_linenumber" name="L1743" href="#L1743">1743</a> <em class="jxr_javadoccomment">	 */</em>
+<a class="jxr_linenumber" name="L1744" href="#L1744">1744</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;E&gt; SetBuilder&lt;E&gt; setb(Class&lt;E&gt; type, Converter...converters) {
+<a class="jxr_linenumber" name="L1745" href="#L1745">1745</a> 		<strong class="jxr_keyword">return</strong> SetBuilder.create(type).converters(converters);
+<a class="jxr_linenumber" name="L1746" href="#L1746">1746</a> 	}
+<a class="jxr_linenumber" name="L1747" href="#L1747">1747</a> 
+<a class="jxr_linenumber" name="L1748" href="#L1748">1748</a> 	<em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L1749" href="#L1749">1749</a> <em class="jxr_javadoccomment">	 * Convenience method for creating a {@link LinkedHashSet}.</em>
+<a class="jxr_linenumber" name="L1750" href="#L1750">1750</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L1751" href="#L1751">1751</a> <em class="jxr_javadoccomment">	 * @param &lt;E&gt; The element type.</em>
+<a class="jxr_linenumber" name="L1752" href="#L1752">1752</a> <em class="jxr_javadoccomment">	 * @param elementType The element type.</em>
+<a class="jxr_linenumber" name="L1753" href="#L1753">1753</a> <em class="jxr_javadoccomment">	 * @param values The values to initialize the set with.</em>
+<a class="jxr_linenumber" name="L1754" href="#L1754">1754</a> <em class="jxr_javadoccomment">	 * @return A new modifiable set.</em>
+<a class="jxr_linenumber" name="L1755" href="#L1755">1755</a> <em class="jxr_javadoccomment">	 */</em>
+<a class="jxr_linenumber" name="L1756" href="#L1756">1756</a> 	@SafeVarargs
+<a class="jxr_linenumber" name="L1757" href="#L1757">1757</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;E&gt; LinkedHashSet&lt;E&gt; setOf(Class&lt;E&gt; elementType, E...values) {
+<a class="jxr_linenumber" name="L1758" href="#L1758">1758</a> 		<strong class="jxr_keyword">return</strong> set(values);
+<a class="jxr_linenumber" name="L1759" href="#L1759">1759</a> 	}
+<a class="jxr_linenumber" name="L1760" href="#L1760">1760</a> 
+<a class="jxr_linenumber" name="L1761" href="#L1761">1761</a> 	<em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L1762" href="#L1762">1762</a> <em class="jxr_javadoccomment">	 * Shortcut for creating a short array.</em>
+<a class="jxr_linenumber" name="L1763" href="#L1763">1763</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L1764" href="#L1764">1764</a> <em class="jxr_javadoccomment">	 * &lt;p&gt;Accepts int values and converts them to shorts, eliminating the need for explicit short casts.&lt;/p&gt;</em>
+<a class="jxr_linenumber" name="L1765" href="#L1765">1765</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L1766" href="#L1766">1766</a> <em class="jxr_javadoccomment">	 * &lt;h5 class='section'&gt;Example:&lt;/h5&gt;</em>
+<a class="jxr_linenumber" name="L1767" href="#L1767">1767</a> <em class="jxr_javadoccomment">	 * &lt;p class='bjava'&gt;</em>
+<a class="jxr_linenumber" name="L1768" href="#L1768">1768</a> <em class="jxr_javadoccomment">	 * 	&lt;jk&gt;short&lt;/jk&gt;[] &lt;jv&gt;myArray&lt;/jv&gt; = &lt;jsm&gt;shorts&lt;/jsm&gt;(1, 2, 3);</em>
+<a class="jxr_linenumber" name="L1769" href="#L1769">1769</a> <em class="jxr_javadoccomment">	 * &lt;/p&gt;</em>
+<a class="jxr_linenumber" name="L1770" href="#L1770">1770</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L1771" href="#L1771">1771</a> <em class="jxr_javadoccomment">	 * @param value The int values to convert to shorts. Values outside the short range (-32768 to 32767) will be truncated.</em>
+<a class="jxr_linenumber" name="L1772" href="#L1772">1772</a> <em class="jxr_javadoccomment">	 * @return A new short array.</em>
+<a class="jxr_linenumber" name="L1773" href="#L1773">1773</a> <em class="jxr_javadoccomment">	 */</em>
+<a class="jxr_linenumber" name="L1774" href="#L1774">1774</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">short</strong>[] shorts(<strong class="jxr_keyword">int</strong>...value) {
+<a class="jxr_linenumber" name="L1775" href="#L1775">1775</a> 		<strong class="jxr_keyword">var</strong> result = <strong class="jxr_keyword">new</strong> <strong class="jxr_keyword">short</strong>[value.length];
+<a class="jxr_linenumber" name="L1776" href="#L1776">1776</a> 		<strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">var</strong> i = 0; i &lt; value.length; i++) {
+<a class="jxr_linenumber" name="L1777" href="#L1777">1777</a> 			result[i] = (<strong class="jxr_keyword">short</strong>)value[i];
+<a class="jxr_linenumber" name="L1778" href="#L1778">1778</a> 		}
+<a class="jxr_linenumber" name="L1779" href="#L1779">1779</a> 		<strong class="jxr_keyword">return</strong> result;
+<a class="jxr_linenumber" name="L1780" href="#L1780">1780</a> 	}
+<a class="jxr_linenumber" name="L1781" href="#L1781">1781</a> 
+<a class="jxr_linenumber" name="L1782" href="#L1782">1782</a> 	<em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L1783" href="#L1783">1783</a> <em class="jxr_javadoccomment">	 * Convenience method for creating an {@link ArrayList} and sorting it.</em>
+<a class="jxr_linenumber" name="L1784" href="#L1784">1784</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L1785" href="#L1785">1785</a> <em class="jxr_javadoccomment">	 * @param &lt;E&gt; The element type.</em>
+<a class="jxr_linenumber" name="L1786" href="#L1786">1786</a> <em class="jxr_javadoccomment">	 * @param comparator The comparator to use to sort the list.</em>
+<a class="jxr_linenumber" name="L1787" href="#L1787">1787</a> <em class="jxr_javadoccomment">	 * @param value The values to initialize the list with.</em>
+<a class="jxr_linenumber" name="L1788" href="#L1788">1788</a> <em class="jxr_javadoccomment">	 * @return A new modifiable list.</em>
+<a class="jxr_linenumber" name="L1789" href="#L1789">1789</a> <em class="jxr_javadoccomment">	 */</em>
+<a class="jxr_linenumber" name="L1790" href="#L1790">1790</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;E&gt; ArrayList&lt;E&gt; sortedList(Comparator&lt;E&gt; comparator, Collection&lt;E&gt; value) {
+<a class="jxr_linenumber" name="L1791" href="#L1791">1791</a> 		ArrayList&lt;E&gt; l = toList(value);
+<a class="jxr_linenumber" name="L1792" href="#L1792">1792</a> 		Collections.sort(l, comparator);
+<a class="jxr_linenumber" name="L1793" href="#L1793">1793</a> 		<strong class="jxr_keyword">return</strong> l;
+<a class="jxr_linenumber" name="L1794" href="#L1794">1794</a> 	}
+<a class="jxr_linenumber" name="L1795" href="#L1795">1795</a> 
+<a class="jxr_linenumber" name="L1796" href="#L1796">1796</a> 	<em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L1797" href="#L1797">1797</a> <em class="jxr_javadoccomment">	 * Convenience method for creating an {@link ArrayList} and sorting it.</em>
+<a class="jxr_linenumber" name="L1798" href="#L1798">1798</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L1799" href="#L1799">1799</a> <em class="jxr_javadoccomment">	 * @param &lt;E&gt; The element type.</em>
+<a class="jxr_linenumber" name="L1800" href="#L1800">1800</a> <em class="jxr_javadoccomment">	 * @param comparator The comparator to use to sort the list.</em>
+<a class="jxr_linenumber" name="L1801" href="#L1801">1801</a> <em class="jxr_javadoccomment">	 * @param values The values to initialize the list with.</em>
+<a class="jxr_linenumber" name="L1802" href="#L1802">1802</a> <em class="jxr_javadoccomment">	 * @return A new modifiable list.</em>
+<a class="jxr_linenumber" name="L1803" href="#L1803">1803</a> <em class="jxr_javadoccomment">	 */</em>
+<a class="jxr_linenumber" name="L1804" href="#L1804">1804</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;E&gt; List&lt;E&gt; sortedList(Comparator&lt;E&gt; comparator, E[] values) {
+<a class="jxr_linenumber" name="L1805" href="#L1805">1805</a> 		List&lt;E&gt; l = list(values);
+<a class="jxr_linenumber" name="L1806" href="#L1806">1806</a> 		Collections.sort(l, comparator);
+<a class="jxr_linenumber" name="L1807" href="#L1807">1807</a> 		<strong class="jxr_keyword">return</strong> l;
+<a class="jxr_linenumber" name="L1808" href="#L1808">1808</a> 	}
+<a class="jxr_linenumber" name="L1809" href="#L1809">1809</a> 
+<a class="jxr_linenumber" name="L1810" href="#L1810">1810</a> 	<em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L1811" href="#L1811">1811</a> <em class="jxr_javadoccomment">	 * Convenience method for creating an {@link ArrayList} and sorting it.</em>
+<a class="jxr_linenumber" name="L1812" href="#L1812">1812</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L1813" href="#L1813">1813</a> <em class="jxr_javadoccomment">	 * @param &lt;E&gt; The element type.</em>
+<a class="jxr_linenumber" name="L1814" href="#L1814">1814</a> <em class="jxr_javadoccomment">	 * @param values The values to initialize the list with.</em>
+<a class="jxr_linenumber" name="L1815" href="#L1815">1815</a> <em class="jxr_javadoccomment">	 * @return A new modifiable list.</em>
+<a class="jxr_linenumber" name="L1816" href="#L1816">1816</a> <em class="jxr_javadoccomment">	 */</em>
+<a class="jxr_linenumber" name="L1817" href="#L1817">1817</a> 	@SuppressWarnings({ <span class="jxr_string">"rawtypes"</span>, <span class="jxr_string">"unchecked"</span> })
+<a class="jxr_linenumber" name="L1818" href="#L1818">1818</a> 	@SafeVarargs
+<a class="jxr_linenumber" name="L1819" href="#L1819">1819</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;E&gt; List&lt;E&gt; sortedList(E...values) {
+<a class="jxr_linenumber" name="L1820" href="#L1820">1820</a> 		List&lt;E&gt; l = list(values);
+<a class="jxr_linenumber" name="L1821" href="#L1821">1821</a> 		Collections.sort((List&lt;Comparable&gt;)l);
+<a class="jxr_linenumber" name="L1822" href="#L1822">1822</a> 		<strong class="jxr_keyword">return</strong> l;
+<a class="jxr_linenumber" name="L1823" href="#L1823">1823</a> 	}
+<a class="jxr_linenumber" name="L1824" href="#L1824">1824</a> 
+<a class="jxr_linenumber" name="L1825" href="#L1825">1825</a> 	<em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L1826" href="#L1826">1826</a> <em class="jxr_javadoccomment">	 * Convenience method for creating a {@link TreeMap}.</em>
+<a class="jxr_linenumber" name="L1827" href="#L1827">1827</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L1828" href="#L1828">1828</a> <em class="jxr_javadoccomment">	 * @param &lt;K&gt; The key type.</em>
+<a class="jxr_linenumber" name="L1829" href="#L1829">1829</a> <em class="jxr_javadoccomment">	 * @param &lt;V&gt; The value type.</em>
+<a class="jxr_linenumber" name="L1830" href="#L1830">1830</a> <em class="jxr_javadoccomment">	 * @return A new modifiable set.</em>
+<a class="jxr_linenumber" name="L1831" href="#L1831">1831</a> <em class="jxr_javadoccomment">	 */</em>
+<a class="jxr_linenumber" name="L1832" href="#L1832">1832</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;K,V&gt; TreeMap&lt;K,V&gt; sortedMap() {
+<a class="jxr_linenumber" name="L1833" href="#L1833">1833</a> 		<strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> TreeMap&lt;&gt;();
+<a class="jxr_linenumber" name="L1834" href="#L1834">1834</a> 	}
+<a class="jxr_linenumber" name="L1835" href="#L1835">1835</a> 
+<a class="jxr_linenumber" name="L1836" href="#L1836">1836</a> 	<em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L1837" href="#L1837">1837</a> <em class="jxr_javadoccomment">	 * Convenience method for creating a {@link TreeSet}.</em>
+<a class="jxr_linenumber" name="L1838" href="#L1838">1838</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L1839" href="#L1839">1839</a> <em class="jxr_javadoccomment">	 * @param &lt;E&gt; The element type.</em>
+<a class="jxr_linenumber" name="L1840" href="#L1840">1840</a> <em class="jxr_javadoccomment">	 * @param values The values to initialize the set with.</em>
+<a class="jxr_linenumber" name="L1841" href="#L1841">1841</a> <em class="jxr_javadoccomment">	 * @return A new modifiable set.</em>
+<a class="jxr_linenumber" name="L1842" href="#L1842">1842</a> <em class="jxr_javadoccomment">	 */</em>
+<a class="jxr_linenumber" name="L1843" href="#L1843">1843</a> 	@SafeVarargs
+<a class="jxr_linenumber" name="L1844" href="#L1844">1844</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;E&gt; TreeSet&lt;E&gt; sortedSet(E...values) {
+<a class="jxr_linenumber" name="L1845" href="#L1845">1845</a> 		assertArgNotNull(<span class="jxr_string">"values"</span>, values);
+<a class="jxr_linenumber" name="L1846" href="#L1846">1846</a> 		<strong class="jxr_keyword">var</strong> l = <strong class="jxr_keyword">new</strong> TreeSet&lt;E&gt;();
+<a class="jxr_linenumber" name="L1847" href="#L1847">1847</a> 		<strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">var</strong> v : values)
+<a class="jxr_linenumber" name="L1848" href="#L1848">1848</a> 			l.add(v);
+<a class="jxr_linenumber" name="L1849" href="#L1849">1849</a> 		<strong class="jxr_keyword">return</strong> l;
+<a class="jxr_linenumber" name="L1850" href="#L1850">1850</a> 	}
+<a class="jxr_linenumber" name="L1851" href="#L1851">1851</a> 
+<a class="jxr_linenumber" name="L1852" href="#L1852">1852</a> 	<em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L1853" href="#L1853">1853</a> <em class="jxr_javadoccomment">	 * Returns a stream of the specified array.</em>
 <a class="jxr_linenumber" name="L1854" href="#L1854">1854</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L1855" href="#L1855">1855</a> <em class="jxr_javadoccomment">	 * &lt;h5 class='section'&gt;Example:&lt;/h5&gt;</em>
-<a class="jxr_linenumber" name="L1856" href="#L1856">1856</a> <em class="jxr_javadoccomment">	 * &lt;p class='bjava'&gt;</em>
-<a class="jxr_linenumber" name="L1857" href="#L1857">1857</a> <em class="jxr_javadoccomment">	 * 	String[] &lt;jv&gt;array&lt;/jv&gt; = {&lt;js&gt;"a"&lt;/js&gt;, &lt;js&gt;"b"&lt;/js&gt;, &lt;js&gt;"c"&lt;/js&gt;};</em>
-<a class="jxr_linenumber" name="L1858" href="#L1858">1858</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L1859" href="#L1859">1859</a> <em class="jxr_javadoccomment">	 * 	&lt;jc&gt;// Prints "a", "b", "c"&lt;/jc&gt;</em>
-<a class="jxr_linenumber" name="L1860" href="#L1860">1860</a> <em class="jxr_javadoccomment">	 * 	&lt;jsm&gt;stream&lt;/jsm&gt;(&lt;jv&gt;array&lt;/jv&gt;).forEach(System.&lt;jk&gt;out&lt;/jk&gt;::println);</em>
+<a class="jxr_linenumber" name="L1855" href="#L1855">1855</a> <em class="jxr_javadoccomment">	 * &lt;p&gt;</em>
+<a class="jxr_linenumber" name="L1856" href="#L1856">1856</a> <em class="jxr_javadoccomment">	 * Gracefully handles &lt;jk&gt;null&lt;/jk&gt; arrays by returning an empty stream.</em>
+<a class="jxr_linenumber" name="L1857" href="#L1857">1857</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L1858" href="#L1858">1858</a> <em class="jxr_javadoccomment">	 * &lt;h5 class='section'&gt;Example:&lt;/h5&gt;</em>
+<a class="jxr_linenumber" name="L1859" href="#L1859">1859</a> <em class="jxr_javadoccomment">	 * &lt;p class='bjava'&gt;</em>
+<a class="jxr_linenumber" name="L1860" href="#L1860">1860</a> <em class="jxr_javadoccomment">	 * 	String[] &lt;jv&gt;array&lt;/jv&gt; = {&lt;js&gt;"a"&lt;/js&gt;, &lt;js&gt;"b"&lt;/js&gt;, &lt;js&gt;"c"&lt;/js&gt;};</em>
 <a class="jxr_linenumber" name="L1861" href="#L1861">1861</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L1862" href="#L1862">1862</a> <em class="jxr_javadoccomment">	 * 	&lt;jc&gt;// Handles null gracefully - returns empty stream&lt;/jc&gt;</em>
-<a class="jxr_linenumber" name="L1863" href="#L1863">1863</a> <em class="jxr_javadoccomment">	 * 	&lt;jsm&gt;stream&lt;/jsm&gt;(&lt;jk&gt;null&lt;/jk&gt;).forEach(System.&lt;jk&gt;out&lt;/jk&gt;::println);  &lt;jc&gt;// Prints nothing&lt;/jc&gt;</em>
-<a class="jxr_linenumber" name="L1864" href="#L1864">1864</a> <em class="jxr_javadoccomment">	 * &lt;/p&gt;</em>
-<a class="jxr_linenumber" name="L1865" href="#L1865">1865</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L1866" href="#L1866">1866</a> <em class="jxr_javadoccomment">	 * @param &lt;T&gt; The element type.</em>
-<a class="jxr_linenumber" name="L1867" href="#L1867">1867</a> <em class="jxr_javadoccomment">	 * @param array The array to stream. Can be &lt;jk&gt;null&lt;/jk&gt;.</em>
-<a class="jxr_linenumber" name="L1868" href="#L1868">1868</a> <em class="jxr_javadoccomment">	 * @return A stream of the array elements, or an empty stream if the array is &lt;jk&gt;null&lt;/jk&gt;.</em>
-<a class="jxr_linenumber" name="L1869" href="#L1869">1869</a> <em class="jxr_javadoccomment">	 */</em>
-<a class="jxr_linenumber" name="L1870" href="#L1870">1870</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;T&gt; Stream&lt;T&gt; stream(T[] array) {
-<a class="jxr_linenumber" name="L1871" href="#L1871">1871</a> 		<strong class="jxr_keyword">return</strong> array == <strong class="jxr_keyword">null</strong> ? Stream.empty() : Arrays.stream(array);
-<a class="jxr_linenumber" name="L1872" href="#L1872">1872</a> 	}
-<a class="jxr_linenumber" name="L1873" href="#L1873">1873</a> 
-<a class="jxr_linenumber" name="L1874" href="#L1874">1874</a> 	<em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L1875" href="#L1875">1875</a> <em class="jxr_javadoccomment">	 * Wraps the specified list in {@link Collections#unmodifiableList(List)}.</em>
-<a class="jxr_linenumber" name="L1876" href="#L1876">1876</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L1877" href="#L1877">1877</a> <em class="jxr_javadoccomment">	 * @param &lt;E&gt; The element type.</em>
-<a class="jxr_linenumber" name="L1878" href="#L1878">1878</a> <em class="jxr_javadoccomment">	 * @param value The list to wrap.</em>
-<a class="jxr_linenumber" name="L1879" href="#L1879">1879</a> <em class="jxr_javadoccomment">	 * @return The wrapped list.</em>
-<a class="jxr_linenumber" name="L1880" href="#L1880">1880</a> <em class="jxr_javadoccomment">	 */</em>
-<a class="jxr_linenumber" name="L1881" href="#L1881">1881</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;E&gt; List&lt;E&gt; synced(List&lt;E&gt; value) {
-<a class="jxr_linenumber" name="L1882" href="#L1882">1882</a> 		<strong class="jxr_keyword">return</strong> value == <strong class="jxr_keyword">null</strong> ? <strong class="jxr_keyword">null</strong> : Collections.synchronizedList(value);
-<a class="jxr_linenumber" name="L1883" href="#L1883">1883</a> 	}
-<a class="jxr_linenumber" name="L1884" href="#L1884">1884</a> 
-<a class="jxr_linenumber" name="L1885" href="#L1885">1885</a> 	<em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L1886" href="#L1886">1886</a> <em class="jxr_javadoccomment">	 * Wraps the specified map in {@link Collections#unmodifiableMap(Map)}.</em>
-<a class="jxr_linenumber" name="L1887" href="#L1887">1887</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L1888" href="#L1888">1888</a> <em class="jxr_javadoccomment">	 * @param &lt;K&gt; The key type.</em>
-<a class="jxr_linenumber" name="L1889" href="#L1889">1889</a> <em class="jxr_javadoccomment">	 * @param &lt;V&gt; The value type.</em>
-<a class="jxr_linenumber" name="L1890" href="#L1890">1890</a> <em class="jxr_javadoccomment">	 * @param value The map to wrap.</em>
-<a class="jxr_linenumber" name="L1891" href="#L1891">1891</a> <em class="jxr_javadoccomment">	 * @return The wrapped map.</em>
-<a class="jxr_linenumber" name="L1892" href="#L1892">1892</a> <em class="jxr_javadoccomment">	 */</em>
-<a class="jxr_linenumber" name="L1893" href="#L1893">1893</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;K,V&gt; Map&lt;K,V&gt; synced(Map&lt;K,V&gt; value) {
-<a class="jxr_linenumber" name="L1894" href="#L1894">1894</a> 		<strong class="jxr_keyword">return</strong> value == <strong class="jxr_keyword">null</strong> ? <strong class="jxr_keyword">null</strong> : Collections.synchronizedMap(value);
-<a class="jxr_linenumber" name="L1895" href="#L1895">1895</a> 	}
-<a class="jxr_linenumber" name="L1896" href="#L1896">1896</a> 
-<a class="jxr_linenumber" name="L1897" href="#L1897">1897</a> 	<em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L1898" href="#L1898">1898</a> <em class="jxr_javadoccomment">	 * Wraps the specified set in {@link Collections#unmodifiableSet(Set)}.</em>
-<a class="jxr_linenumber" name="L1899" href="#L1899">1899</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L1900" href="#L1900">1900</a> <em class="jxr_javadoccomment">	 * @param &lt;E&gt; The element type.</em>
-<a class="jxr_linenumber" name="L1901" href="#L1901">1901</a> <em class="jxr_javadoccomment">	 * @param value The set to wrap.</em>
-<a class="jxr_linenumber" name="L1902" href="#L1902">1902</a> <em class="jxr_javadoccomment">	 * @return The wrapped set.</em>
-<a class="jxr_linenumber" name="L1903" href="#L1903">1903</a> <em class="jxr_javadoccomment">	 */</em>
-<a class="jxr_linenumber" name="L1904" href="#L1904">1904</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;E&gt; Set&lt;E&gt; synced(Set&lt;E&gt; value) {
-<a class="jxr_linenumber" name="L1905" href="#L1905">1905</a> 		<strong class="jxr_keyword">return</strong> value == <strong class="jxr_keyword">null</strong> ? <strong class="jxr_keyword">null</strong> : Collections.synchronizedSet(value);
-<a class="jxr_linenumber" name="L1906" href="#L1906">1906</a> 	}
-<a class="jxr_linenumber" name="L1907" href="#L1907">1907</a> 
-<a class="jxr_linenumber" name="L1908" href="#L1908">1908</a> 	<em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L1909" href="#L1909">1909</a> <em class="jxr_javadoccomment">	 * Converts the specified collection to an array.</em>
-<a class="jxr_linenumber" name="L1910" href="#L1910">1910</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L1911" href="#L1911">1911</a> <em class="jxr_javadoccomment">	 * &lt;p&gt;</em>
-<a class="jxr_linenumber" name="L1912" href="#L1912">1912</a> <em class="jxr_javadoccomment">	 * Works on both object and primitive arrays.</em>
+<a class="jxr_linenumber" name="L1862" href="#L1862">1862</a> <em class="jxr_javadoccomment">	 * 	&lt;jc&gt;// Prints "a", "b", "c"&lt;/jc&gt;</em>
+<a class="jxr_linenumber" name="L1863" href="#L1863">1863</a> <em class="jxr_javadoccomment">	 * 	&lt;jsm&gt;stream&lt;/jsm&gt;(&lt;jv&gt;array&lt;/jv&gt;).forEach(System.&lt;jk&gt;out&lt;/jk&gt;::println);</em>
+<a class="jxr_linenumber" name="L1864" href="#L1864">1864</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L1865" href="#L1865">1865</a> <em class="jxr_javadoccomment">	 * 	&lt;jc&gt;// Handles null gracefully - returns empty stream&lt;/jc&gt;</em>
+<a class="jxr_linenumber" name="L1866" href="#L1866">1866</a> <em class="jxr_javadoccomment">	 * 	&lt;jsm&gt;stream&lt;/jsm&gt;(&lt;jk&gt;null&lt;/jk&gt;).forEach(System.&lt;jk&gt;out&lt;/jk&gt;::println);  &lt;jc&gt;// Prints nothing&lt;/jc&gt;</em>
+<a class="jxr_linenumber" name="L1867" href="#L1867">1867</a> <em class="jxr_javadoccomment">	 * &lt;/p&gt;</em>
+<a class="jxr_linenumber" name="L1868" href="#L1868">1868</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L1869" href="#L1869">1869</a> <em class="jxr_javadoccomment">	 * @param &lt;T&gt; The element type.</em>
+<a class="jxr_linenumber" name="L1870" href="#L1870">1870</a> <em class="jxr_javadoccomment">	 * @param array The array to stream. Can be &lt;jk&gt;null&lt;/jk&gt;.</em>
+<a class="jxr_linenumber" name="L1871" href="#L1871">1871</a> <em class="jxr_javadoccomment">	 * @return A stream of the array elements, or an empty stream if the array is &lt;jk&gt;null&lt;/jk&gt;.</em>
+<a class="jxr_linenumber" name="L1872" href="#L1872">1872</a> <em class="jxr_javadoccomment">	 */</em>
+<a class="jxr_linenumber" name="L1873" href="#L1873">1873</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;T&gt; Stream&lt;T&gt; stream(T[] array) {
+<a class="jxr_linenumber" name="L1874" href="#L1874">1874</a> 		<strong class="jxr_keyword">return</strong> array == <strong class="jxr_keyword">null</strong> ? Stream.empty() : Arrays.stream(array);
+<a class="jxr_linenumber" name="L1875" href="#L1875">1875</a> 	}
+<a class="jxr_linenumber" name="L1876" href="#L1876">1876</a> 
+<a class="jxr_linenumber" name="L1877" href="#L1877">1877</a> 	<em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L1878" href="#L1878">1878</a> <em class="jxr_javadoccomment">	 * Wraps the specified list in {@link Collections#unmodifiableList(List)}.</em>
+<a class="jxr_linenumber" name="L1879" href="#L1879">1879</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L1880" href="#L1880">1880</a> <em class="jxr_javadoccomment">	 * @param &lt;E&gt; The element type.</em>
+<a class="jxr_linenumber" name="L1881" href="#L1881">1881</a> <em class="jxr_javadoccomment">	 * @param value The list to wrap.</em>
+<a class="jxr_linenumber" name="L1882" href="#L1882">1882</a> <em class="jxr_javadoccomment">	 * @return The wrapped list.</em>
+<a class="jxr_linenumber" name="L1883" href="#L1883">1883</a> <em class="jxr_javadoccomment">	 */</em>
+<a class="jxr_linenumber" name="L1884" href="#L1884">1884</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;E&gt; List&lt;E&gt; synced(List&lt;E&gt; value) {
+<a class="jxr_linenumber" name="L1885" href="#L1885">1885</a> 		<strong class="jxr_keyword">return</strong> value == <strong class="jxr_keyword">null</strong> ? <strong class="jxr_keyword">null</strong> : Collections.synchronizedList(value);
+<a class="jxr_linenumber" name="L1886" href="#L1886">1886</a> 	}
+<a class="jxr_linenumber" name="L1887" href="#L1887">1887</a> 
+<a class="jxr_linenumber" name="L1888" href="#L1888">1888</a> 	<em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L1889" href="#L1889">1889</a> <em class="jxr_javadoccomment">	 * Wraps the specified map in {@link Collections#unmodifiableMap(Map)}.</em>
+<a class="jxr_linenumber" name="L1890" href="#L1890">1890</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L1891" href="#L1891">1891</a> <em class="jxr_javadoccomment">	 * @param &lt;K&gt; The key type.</em>
+<a class="jxr_linenumber" name="L1892" href="#L1892">1892</a> <em class="jxr_javadoccomment">	 * @param &lt;V&gt; The value type.</em>
+<a class="jxr_linenumber" name="L1893" href="#L1893">1893</a> <em class="jxr_javadoccomment">	 * @param value The map to wrap.</em>
+<a class="jxr_linenumber" name="L1894" href="#L1894">1894</a> <em class="jxr_javadoccomment">	 * @return The wrapped map.</em>
+<a class="jxr_linenumber" name="L1895" href="#L1895">1895</a> <em class="jxr_javadoccomment">	 */</em>
+<a class="jxr_linenumber" name="L1896" href="#L1896">1896</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;K,V&gt; Map&lt;K,V&gt; synced(Map&lt;K,V&gt; value) {
+<a class="jxr_linenumber" name="L1897" href="#L1897">1897</a> 		<strong class="jxr_keyword">return</strong> value == <strong class="jxr_keyword">null</strong> ? <strong class="jxr_keyword">null</strong> : Collections.synchronizedMap(value);
+<a class="jxr_linenumber" name="L1898" href="#L1898">1898</a> 	}
+<a class="jxr_linenumber" name="L1899" href="#L1899">1899</a> 
+<a class="jxr_linenumber" name="L1900" href="#L1900">1900</a> 	<em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L1901" href="#L1901">1901</a> <em class="jxr_javadoccomment">	 * Wraps the specified set in {@link Collections#unmodifiableSet(Set)}.</em>
+<a class="jxr_linenumber" name="L1902" href="#L1902">1902</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L1903" href="#L1903">1903</a> <em class="jxr_javadoccomment">	 * @param &lt;E&gt; The element type.</em>
+<a class="jxr_linenumber" name="L1904" href="#L1904">1904</a> <em class="jxr_javadoccomment">	 * @param value The set to wrap.</em>
+<a class="jxr_linenumber" name="L1905" href="#L1905">1905</a> <em class="jxr_javadoccomment">	 * @return The wrapped set.</em>
+<a class="jxr_linenumber" name="L1906" href="#L1906">1906</a> <em class="jxr_javadoccomment">	 */</em>
+<a class="jxr_linenumber" name="L1907" href="#L1907">1907</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;E&gt; Set&lt;E&gt; synced(Set&lt;E&gt; value) {
+<a class="jxr_linenumber" name="L1908" href="#L1908">1908</a> 		<strong class="jxr_keyword">return</strong> value == <strong class="jxr_keyword">null</strong> ? <strong class="jxr_keyword">null</strong> : Collections.synchronizedSet(value);
+<a class="jxr_linenumber" name="L1909" href="#L1909">1909</a> 	}
+<a class="jxr_linenumber" name="L1910" href="#L1910">1910</a> 
+<a class="jxr_linenumber" name="L1911" href="#L1911">1911</a> 	<em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L1912" href="#L1912">1912</a> <em class="jxr_javadoccomment">	 * Converts the specified collection to an array.</em>
 <a class="jxr_linenumber" name="L1913" href="#L1913">1913</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L1914" href="#L1914">1914</a> <em class="jxr_javadoccomment">	 * @param &lt;E&gt; The element type.</em>
-<a class="jxr_linenumber" name="L1915" href="#L1915">1915</a> <em class="jxr_javadoccomment">	 * @param c The collection to convert to an array.</em>
-<a class="jxr_linenumber" name="L1916" href="#L1916">1916</a> <em class="jxr_javadoccomment">	 * @param elementType The component type of the collection.</em>
-<a class="jxr_linenumber" name="L1917" href="#L1917">1917</a> <em class="jxr_javadoccomment">	 * @return A new array.</em>
-<a class="jxr_linenumber" name="L1918" href="#L1918">1918</a> <em class="jxr_javadoccomment">	 */</em>
-<a class="jxr_linenumber" name="L1919" href="#L1919">1919</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;E&gt; Object toArray(Collection&lt;?&gt; c, Class&lt;E&gt; elementType) {
-<a class="jxr_linenumber" name="L1920" href="#L1920">1920</a> 		<strong class="jxr_keyword">var</strong> a = Array.newInstance(elementType, c.size());
-<a class="jxr_linenumber" name="L1921" href="#L1921">1921</a> 		Iterator&lt;?&gt; it = c.iterator();
-<a class="jxr_linenumber" name="L1922" href="#L1922">1922</a> 		<strong class="jxr_keyword">int</strong> i = 0;
-<a class="jxr_linenumber" name="L1923" href="#L1923">1923</a> 		<strong class="jxr_keyword">while</strong> (it.hasNext())
-<a class="jxr_linenumber" name="L1924" href="#L1924">1924</a> 			Array.set(a, i++, it.next());
-<a class="jxr_linenumber" name="L1925" href="#L1925">1925</a> 		<strong class="jxr_keyword">return</strong> a;
-<a class="jxr_linenumber" name="L1926" href="#L1926">1926</a> 	}
-<a class="jxr_linenumber" name="L1927" href="#L1927">1927</a> 
-<a class="jxr_linenumber" name="L1928" href="#L1928">1928</a> 	<em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L1929" href="#L1929">1929</a> <em class="jxr_javadoccomment">	 * Creates an {@link ArrayList} copy from a collection.</em>
-<a class="jxr_linenumber" name="L1930" href="#L1930">1930</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L1931" href="#L1931">1931</a> <em class="jxr_javadoccomment">	 * @param &lt;E&gt; The element type.</em>
-<a class="jxr_linenumber" name="L1932" href="#L1932">1932</a> <em class="jxr_javadoccomment">	 * @param value The collection to copy from.</em>
-<a class="jxr_linenumber" name="L1933" href="#L1933">1933</a> <em class="jxr_javadoccomment">	 * @return A new modifiable list.</em>
-<a class="jxr_linenumber" name="L1934" href="#L1934">1934</a> <em class="jxr_javadoccomment">	 */</em>
-<a class="jxr_linenumber" name="L1935" href="#L1935">1935</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;E&gt; ArrayList&lt;E&gt; toList(Collection&lt;E&gt; value) {
-<a class="jxr_linenumber" name="L1936" href="#L1936">1936</a> 		<strong class="jxr_keyword">return</strong> toList(value, false);
-<a class="jxr_linenumber" name="L1937" href="#L1937">1937</a> 	}
-<a class="jxr_linenumber" name="L1938" href="#L1938">1938</a> 
-<a class="jxr_linenumber" name="L1939" href="#L1939">1939</a> 	<em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L1940" href="#L1940">1940</a> <em class="jxr_javadoccomment">	 * Creates an {@link ArrayList} copy from a collection.</em>
-<a class="jxr_linenumber" name="L1941" href="#L1941">1941</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L1942" href="#L1942">1942</a> <em class="jxr_javadoccomment">	 * @param &lt;E&gt; The element type.</em>
-<a class="jxr_linenumber" name="L1943" href="#L1943">1943</a> <em class="jxr_javadoccomment">	 * @param value The collection to copy from.</em>
-<a class="jxr_linenumber" name="L1944" href="#L1944">1944</a> <em class="jxr_javadoccomment">	 * @param nullIfEmpty If &lt;jk&gt;true&lt;/jk&gt; will return &lt;jk&gt;null&lt;/jk&gt; if the collection is empty.</em>
-<a class="jxr_linenumber" name="L1945" href="#L1945">1945</a> <em class="jxr_javadoccomment">	 * @return A new modifiable list.</em>
-<a class="jxr_linenumber" name="L1946" href="#L1946">1946</a> <em class="jxr_javadoccomment">	 */</em>
-<a class="jxr_linenumber" name="L1947" href="#L1947">1947</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;E&gt; ArrayList&lt;E&gt; toList(Collection&lt;E&gt; value, <strong class="jxr_keyword">boolean</strong> nullIfEmpty) {
-<a class="jxr_linenumber" name="L1948" href="#L1948">1948</a> 		<strong class="jxr_keyword">if</strong> (value == <strong class="jxr_keyword">null</strong> || (nullIfEmpty &amp;&amp; value.isEmpty()))
-<a class="jxr_linenumber" name="L1949" href="#L1949">1949</a> 			<strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="L1950" href="#L1950">1950</a> 		<strong class="jxr_keyword">var</strong> l = <strong class="jxr_keyword">new</strong> ArrayList&lt;E&gt;();
-<a class="jxr_linenumber" name="L1951" href="#L1951">1951</a> 		value.forEach(x -&gt; l.add(x));
-<a class="jxr_linenumber" name="L1952" href="#L1952">1952</a> 		<strong class="jxr_keyword">return</strong> l;
-<a class="jxr_linenumber" name="L1953" href="#L1953">1953</a> 	}
-<a class="jxr_linenumber" name="L1954" href="#L1954">1954</a> 
-<a class="jxr_linenumber" name="L1955" href="#L1955">1955</a> 	<em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L1956" href="#L1956">1956</a> <em class="jxr_javadoccomment">	 * Converts various collection-like objects to a {@link List}.</em>
-<a class="jxr_linenumber" name="L1957" href="#L1957">1957</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L1958" href="#L1958">1958</a> <em class="jxr_javadoccomment">	 * &lt;p&gt;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="L1959" href="#L1959">1959</a> <em class="jxr_javadoccomment">	 * passed to methods such as TestUtils.assertList().&lt;/p&gt;</em>
+<a class="jxr_linenumber" name="L1914" href="#L1914">1914</a> <em class="jxr_javadoccomment">	 * &lt;p&gt;</em>
+<a class="jxr_linenumber" name="L1915" href="#L1915">1915</a> <em class="jxr_javadoccomment">	 * Works on both object and primitive arrays.</em>
+<a class="jxr_linenumber" name="L1916" href="#L1916">1916</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L1917" href="#L1917">1917</a> <em class="jxr_javadoccomment">	 * @param &lt;E&gt; The element type.</em>
+<a class="jxr_linenumber" name="L1918" href="#L1918">1918</a> <em class="jxr_javadoccomment">	 * @param c The collection to convert to an array.</em>
+<a class="jxr_linenumber" name="L1919" href="#L1919">1919</a> <em class="jxr_javadoccomment">	 * @param elementType The component type of the collection.</em>
+<a class="jxr_linenumber" name="L1920" href="#L1920">1920</a> <em class="jxr_javadoccomment">	 * @return A new array.</em>
+<a class="jxr_linenumber" name="L1921" href="#L1921">1921</a> <em class="jxr_javadoccomment">	 */</em>
+<a class="jxr_linenumber" name="L1922" href="#L1922">1922</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;E&gt; Object toArray(Collection&lt;?&gt; c, Class&lt;E&gt; elementType) {
+<a class="jxr_linenumber" name="L1923" href="#L1923">1923</a> 		<strong class="jxr_keyword">var</strong> a = Array.newInstance(elementType, c.size());
+<a class="jxr_linenumber" name="L1924" href="#L1924">1924</a> 		Iterator&lt;?&gt; it = c.iterator();
+<a class="jxr_linenumber" name="L1925" href="#L1925">1925</a> 		<strong class="jxr_keyword">int</strong> i = 0;
+<a class="jxr_linenumber" name="L1926" href="#L1926">1926</a> 		<strong class="jxr_keyword">while</strong> (it.hasNext())
+<a class="jxr_linenumber" name="L1927" href="#L1927">1927</a> 			Array.set(a, i++, it.next());
+<a class="jxr_linenumber" name="L1928" href="#L1928">1928</a> 		<strong class="jxr_keyword">return</strong> a;
+<a class="jxr_linenumber" name="L1929" href="#L1929">1929</a> 	}
+<a class="jxr_linenumber" name="L1930" href="#L1930">1930</a> 
+<a class="jxr_linenumber" name="L1931" href="#L1931">1931</a> 	<em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L1932" href="#L1932">1932</a> <em class="jxr_javadoccomment">	 * Creates an {@link ArrayList} copy from a collection.</em>
+<a class="jxr_linenumber" name="L1933" href="#L1933">1933</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L1934" href="#L1934">1934</a> <em class="jxr_javadoccomment">	 * @param &lt;E&gt; The element type.</em>
+<a class="jxr_linenumber" name="L1935" href="#L1935">1935</a> <em class="jxr_javadoccomment">	 * @param value The collection to copy from.</em>
+<a class="jxr_linenumber" name="L1936" href="#L1936">1936</a> <em class="jxr_javadoccomment">	 * @return A new modifiable list.</em>
+<a class="jxr_linenumber" name="L1937" href="#L1937">1937</a> <em class="jxr_javadoccomment">	 */</em>
+<a class="jxr_linenumber" name="L1938" href="#L1938">1938</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;E&gt; ArrayList&lt;E&gt; toList(Collection&lt;E&gt; value) {
+<a class="jxr_linenumber" name="L1939" href="#L1939">1939</a> 		<strong class="jxr_keyword">return</strong> toList(value, false);
+<a class="jxr_linenumber" name="L1940" href="#L1940">1940</a> 	}
+<a class="jxr_linenumber" name="L1941" href="#L1941">1941</a> 
+<a class="jxr_linenumber" name="L1942" href="#L1942">1942</a> 	<em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L1943" href="#L1943">1943</a> <em class="jxr_javadoccomment">	 * Creates an {@link ArrayList} copy from a collection.</em>
+<a class="jxr_linenumber" name="L1944" href="#L1944">1944</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L1945" href="#L1945">1945</a> <em class="jxr_javadoccomment">	 * @param &lt;E&gt; The element type.</em>
+<a class="jxr_linenumber" name="L1946" href="#L1946">1946</a> <em class="jxr_javadoccomment">	 * @param value The collection to copy from.</em>
+<a class="jxr_linenumber" name="L1947" href="#L1947">1947</a> <em class="jxr_javadoccomment">	 * @param nullIfEmpty If &lt;jk&gt;true&lt;/jk&gt; will return &lt;jk&gt;null&lt;/jk&gt; if the collection is empty.</em>
+<a class="jxr_linenumber" name="L1948" href="#L1948">1948</a> <em class="jxr_javadoccomment">	 * @return A new modifiable list.</em>
+<a class="jxr_linenumber" name="L1949" href="#L1949">1949</a> <em class="jxr_javadoccomment">	 */</em>
+<a class="jxr_linenumber" name="L1950" href="#L1950">1950</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;E&gt; ArrayList&lt;E&gt; toList(Collection&lt;E&gt; value, <strong class="jxr_keyword">boolean</strong> nullIfEmpty) {
+<a class="jxr_linenumber" name="L1951" href="#L1951">1951</a> 		<strong class="jxr_keyword">if</strong> (value == <strong class="jxr_keyword">null</strong> || (nullIfEmpty &amp;&amp; value.isEmpty()))
+<a class="jxr_linenumber" name="L1952" href="#L1952">1952</a> 			<strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="L1953" href="#L1953">1953</a> 		<strong class="jxr_keyword">var</strong> l = <strong class="jxr_keyword">new</strong> ArrayList&lt;E&gt;();
+<a class="jxr_linenumber" name="L1954" href="#L1954">1954</a> 		value.forEach(x -&gt; l.add(x));
+<a class="jxr_linenumber" name="L1955" href="#L1955">1955</a> 		<strong class="jxr_keyword">return</strong> l;
+<a class="jxr_linenumber" name="L1956" href="#L1956">1956</a> 	}
+<a class="jxr_linenumber" name="L1957" href="#L1957">1957</a> 
+<a class="jxr_linenumber" name="L1958" href="#L1958">1958</a> 	<em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L1959" href="#L1959">1959</a> <em class="jxr_javadoccomment">	 * Converts various collection-like objects to a {@link List}.</em>
 <a class="jxr_linenumber" name="L1960" href="#L1960">1960</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L1961" href="#L1961">1961</a> <em class="jxr_javadoccomment">	 * &lt;h5 class='section'&gt;Supported Input Types:&lt;/h5&gt;</em>
-<a class="jxr_linenumber" name="L1962" href="#L1962">1962</a> <em class="jxr_javadoccomment">	 * &lt;ul&gt;</em>
-<a class="jxr_linenumber" name="L1963" href="#L1963">1963</a> <em class="jxr_javadoccomment">	 * 	&lt;li&gt;&lt;b&gt;List:&lt;/b&gt; Returns the input unchanged&lt;/li&gt;</em>
-<a class="jxr_linenumber" name="L1964" href="#L1964">1964</a> <em class="jxr_javadoccomment">	 * 	&lt;li&gt;&lt;b&gt;Iterable:&lt;/b&gt; Any collection, set, queue, etc. (converted to List preserving order)&lt;/li&gt;</em>
-<a class="jxr_linenumber" name="L1965" href="#L1965">1965</a> <em class="jxr_javadoccomment">	 * 	&lt;li&gt;&lt;b&gt;Iterator:&lt;/b&gt; Converts iterator contents to List&lt;/li&gt;</em>
-<a class="jxr_linenumber" name="L1966" href="#L1966">1966</a> <em class="jxr_javadoccomment">	 * 	&lt;li&gt;&lt;b&gt;Enumeration:&lt;/b&gt; Converts enumeration contents to List&lt;/li&gt;</em>
-<a class="jxr_linenumber" name="L1967" href="#L1967">1967</a> <em class="jxr_javadoccomment">	 * 	&lt;li&gt;&lt;b&gt;Stream:&lt;/b&gt; Converts stream contents to List (stream is consumed)&lt;/li&gt;</em>
-<a class="jxr_linenumber" name="L1968" href="#L1968">1968</a> <em class="jxr_javadoccomment">	 * 	&lt;li&gt;&lt;b&gt;Map:&lt;/b&gt; Converts map entries to List of Map.Entry objects&lt;/li&gt;</em>
-<a class="jxr_linenumber" name="L1969" href="#L1969">1969</a> <em class="jxr_javadoccomment">	 * 	&lt;li&gt;&lt;b&gt;Array:&lt;/b&gt; Converts any array type (including primitive arrays) to List&lt;/li&gt;</em>
-<a class="jxr_linenumber" name="L1970" href="#L1970">1970</a> <em class="jxr_javadoccomment">	 * &lt;/ul&gt;</em>
-<a class="jxr_linenumber" name="L1971" href="#L1971">1971</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L1972" href="#L1972">1972</a> <em class="jxr_javadoccomment">	 * &lt;h5 class='section'&gt;Usage Examples:&lt;/h5&gt;</em>
-<a class="jxr_linenumber" name="L1973" href="#L1973">1973</a> <em class="jxr_javadoccomment">	 * &lt;p class='bjava'&gt;</em>
-<a class="jxr_linenumber" name="L1974" href="#L1974">1974</a> <em class="jxr_javadoccomment">	 * 	&lt;jc&gt;// Test a Set&lt;/jc&gt;</em>
-<a class="jxr_linenumber" name="L1975" href="#L1975">1975</a> <em class="jxr_javadoccomment">	 * 	Set&amp;lt;String&amp;gt; &lt;jv&gt;mySet&lt;/jv&gt; = Set.of(&lt;js&gt;"a"&lt;/js&gt;, &lt;js&gt;"b"&lt;/js&gt;, &lt;js&gt;"c"&lt;/js&gt;);</em>
-<a class="jxr_linenumber" name="L1976" href="#L1976">1976</a> <em class="jxr_javadoccomment">	 * 	assertList(toList(&lt;jv&gt;mySet&lt;/jv&gt;), &lt;js&gt;"a"&lt;/js&gt;, &lt;js&gt;"b"&lt;/js&gt;, &lt;js&gt;"c"&lt;/js&gt;);</em>
-<a class="jxr_linenumber" name="L1977" href="#L1977">1977</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L1978" href="#L1978">1978</a> <em class="jxr_javadoccomment">	 * 	&lt;jc&gt;// Test an array&lt;/jc&gt;</em>
-<a class="jxr_linenumber" name="L1979" href="#L1979">1979</a> <em class="jxr_javadoccomment">	 * 	String[] &lt;jv&gt;myArray&lt;/jv&gt; = {&lt;js&gt;"x"&lt;/js&gt;, &lt;js&gt;"y"&lt;/js&gt;, &lt;js&gt;"z"&lt;/js&gt;};</em>
-<a class="jxr_linenumber" name="L1980" href="#L1980">1980</a> <em class="jxr_javadoccomment">	 * 	assertList(toList(&lt;jv&gt;myArray&lt;/jv&gt;), &lt;js&gt;"x"&lt;/js&gt;, &lt;js&gt;"y"&lt;/js&gt;, &lt;js&gt;"z"&lt;/js&gt;);</em>
-<a class="jxr_linenumber" name="L1981" href="#L1981">1981</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L1982" href="#L1982">1982</a> <em class="jxr_javadoccomment">	 * 	&lt;jc&gt;// Test a primitive array&lt;/jc&gt;</em>
-<a class="jxr_linenumber" name="L1983" href="#L1983">1983</a> <em class="jxr_javadoccomment">	 * 	&lt;jk&gt;int&lt;/jk&gt;[] &lt;jv&gt;numbers&lt;/jv&gt; = {1, 2, 3};</em>
-<a class="jxr_linenumber" name="L1984" href="#L1984">1984</a> <em class="jxr_javadoccomment">	 * 	assertList(toList(&lt;jv&gt;numbers&lt;/jv&gt;), &lt;js&gt;"1"&lt;/js&gt;, &lt;js&gt;"2"&lt;/js&gt;, &lt;js&gt;"3"&lt;/js&gt;);</em>
-<a class="jxr_linenumber" name="L1985" href="#L1985">1985</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L1986" href="#L1986">1986</a> <em class="jxr_javadoccomment">	 * 	&lt;jc&gt;// Test a Stream&lt;/jc&gt;</em>
-<a class="jxr_linenumber" name="L1987" href="#L1987">1987</a> <em class="jxr_javadoccomment">	 * 	Stream&amp;lt;String&amp;gt; &lt;jv&gt;myStream&lt;/jv&gt; = Stream.of(&lt;js&gt;"foo"&lt;/js&gt;, &lt;js&gt;"bar"&lt;/js&gt;);</em>
-<a class="jxr_linenumber" name="L1988" href="#L1988">1988</a> <em class="jxr_javadoccomment">	 * 	assertList(toList(&lt;jv&gt;myStream&lt;/jv&gt;), &lt;js&gt;"foo"&lt;/js&gt;, &lt;js&gt;"bar"&lt;/js&gt;);</em>
-<a class="jxr_linenumber" name="L1989" href="#L1989">1989</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L1990" href="#L1990">1990</a> <em class="jxr_javadoccomment">	 * 	&lt;jc&gt;// Test a Map (converted to entries)&lt;/jc&gt;</em>
-<a class="jxr_linenumber" name="L1991" href="#L1991">1991</a> <em class="jxr_javadoccomment">	 * 	Map&amp;lt;String,Integer&amp;gt; &lt;jv&gt;myMap&lt;/jv&gt; = Map.of(&lt;js&gt;"a"&lt;/js&gt;, 1, &lt;js&gt;"b"&lt;/js&gt;, 2);</em>
-<a class="jxr_linenumber" name="L1992" href="#L1992">1992</a> <em class="jxr_javadoccomment">	 * 	assertList(toList(&lt;jv&gt;myMap&lt;/jv&gt;), &lt;js&gt;"a=1"&lt;/js&gt;, &lt;js&gt;"b=2"&lt;/js&gt;);</em>
-<a class="jxr_linenumber" name="L1993" href="#L1993">1993</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L1994" href="#L1994">1994</a> <em class="jxr_javadoccomment">	 * 	&lt;jc&gt;// Test any Iterable collection&lt;/jc&gt;</em>
-<a class="jxr_linenumber" name="L1995" href="#L1995">1995</a> <em class="jxr_javadoccomment">	 * 	Queue&amp;lt;String&amp;gt; &lt;jv&gt;myQueue&lt;/jv&gt; = new LinkedList&amp;lt;&amp;gt;(List.of(&lt;js&gt;"first"&lt;/js&gt;, &lt;js&gt;"second"&lt;/js&gt;));</em>
-<a class="jxr_linenumber" name="L1996" href="#L1996">1996</a> <em class="jxr_javadoccomment">	 * 	assertList(toList(&lt;jv&gt;myQueue&lt;/jv&gt;), &lt;js&gt;"first"&lt;/js&gt;, &lt;js&gt;"second"&lt;/js&gt;);</em>
-<a class="jxr_linenumber" name="L1997" href="#L1997">1997</a> <em class="jxr_javadoccomment">	 * &lt;/p&gt;</em>
-<a class="jxr_linenumber" name="L1998" href="#L1998">1998</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L1999" href="#L1999">1999</a> <em class="jxr_javadoccomment">	 * &lt;h5 class='section'&gt;Integration with Testing:&lt;/h5&gt;</em>
-<a class="jxr_linenumber" name="L2000" href="#L2000">2000</a> <em class="jxr_javadoccomment">	 * &lt;p&gt;This method is specifically designed to work with testing frameworks to provide</em>
-<a class="jxr_linenumber" name="L2001" href="#L2001">2001</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="L2002" href="#L2002">2002</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="L2003" href="#L2003">2003</a> <em class="jxr_javadoccomment">	 * list assertion methods.&lt;/p&gt;</em>
-<a class="jxr_linenumber" name="L2004" href="#L2004">2004</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L2005" href="#L2005">2005</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="L2006" href="#L2006">2006</a> <em class="jxr_javadoccomment">	 * @return A {@link List} containing the elements from the input object.</em>
-<a class="jxr_linenumber" name="L2007" href="#L2007">2007</a> <em class="jxr_javadoccomment">	 * @throws IllegalArgumentException if the input object cannot be converted to a List.</em>
-<a class="jxr_linenumber" name="L2008" href="#L2008">2008</a> <em class="jxr_javadoccomment">	 * @see arrayToList</em>
-<a class="jxr_linenumber" name="L2009" href="#L2009">2009</a> <em class="jxr_javadoccomment">	 */</em>
-<a class="jxr_linenumber" name="L2010" href="#L2010">2010</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> List&lt;?&gt; toList(Object o) {  <em class="jxr_comment">// NOSONAR</em>
-<a class="jxr_linenumber" name="L2011" href="#L2011">2011</a> 		assertArgNotNull(<span class="jxr_string">"o"</span>, o);
-<a class="jxr_linenumber" name="L2012" href="#L2012">2012</a> 		<strong class="jxr_keyword">if</strong> (o instanceof List&lt;?&gt; o2)
-<a class="jxr_linenumber" name="L2013" href="#L2013">2013</a> 			<strong class="jxr_keyword">return</strong> o2;
-<a class="jxr_linenumber" name="L2014" href="#L2014">2014</a> 		<strong class="jxr_keyword">if</strong> (o instanceof Iterable&lt;?&gt; o2)
-<a class="jxr_linenumber" name="L2015" href="#L2015">2015</a> 			<strong class="jxr_keyword">return</strong> StreamSupport.stream(o2.spliterator(), false).toList();
-<a class="jxr_linenumber" name="L2016" href="#L2016">2016</a> 		<strong class="jxr_keyword">if</strong> (o instanceof Iterator&lt;?&gt; o2)
-<a class="jxr_linenumber" name="L2017" href="#L2017">2017</a> 			<strong class="jxr_keyword">return</strong> StreamSupport.stream(Spliterators.spliteratorUnknownSize(o2, 0), false).toList();
-<a class="jxr_linenumber" name="L2018" href="#L2018">2018</a> 		<strong class="jxr_keyword">if</strong> (o instanceof Enumeration&lt;?&gt; o2)
-<a class="jxr_linenumber" name="L2019" href="#L2019">2019</a> 			<strong class="jxr_keyword">return</strong> Collections.list(o2);
-<a class="jxr_linenumber" name="L2020" href="#L2020">2020</a> 		<strong class="jxr_keyword">if</strong> (o instanceof Stream&lt;?&gt; o2)
-<a class="jxr_linenumber" name="L2021" href="#L2021">2021</a> 			<strong class="jxr_keyword">return</strong> o2.toList();
-<a class="jxr_linenumber" name="L2022" href="#L2022">2022</a> 		<strong class="jxr_keyword">if</strong> (o instanceof Map&lt;?,?&gt; o2)
-<a class="jxr_linenumber" name="L2023" href="#L2023">2023</a> 			<strong class="jxr_keyword">return</strong> toList(o2.entrySet());
-<a class="jxr_linenumber" name="L2024" href="#L2024">2024</a> 		<strong class="jxr_keyword">if</strong> (o instanceof Optional&lt;?&gt; o2)
-<a class="jxr_linenumber" name="L2025" href="#L2025">2025</a> 			<strong class="jxr_keyword">return</strong> o2.isEmpty() ? Collections.emptyList() : Collections.singletonList(o2.get());
-<a class="jxr_linenumber" name="L2026" href="#L2026">2026</a> 		<strong class="jxr_keyword">if</strong> (isArray(o))
-<a class="jxr_linenumber" name="L2027" href="#L2027">2027</a> 			<strong class="jxr_keyword">return</strong> arrayToList(o);
-<a class="jxr_linenumber" name="L2028" href="#L2028">2028</a> 		<strong class="jxr_keyword">throw</strong> rex(<span class="jxr_string">"Could not convert object of type {0} to a list"</span>, cn(o));
-<a class="jxr_linenumber" name="L2029" href="#L2029">2029</a> 	}
-<a class="jxr_linenumber" name="L2030" href="#L2030">2030</a> 
-<a class="jxr_linenumber" name="L2031" href="#L2031">2031</a> 	<em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L2032" href="#L2032">2032</a> <em class="jxr_javadoccomment">	 * Converts the specified array to an &lt;c&gt;ArrayList&lt;/c&gt;</em>
-<a class="jxr_linenumber" name="L2033" href="#L2033">2033</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L2034" href="#L2034">2034</a> <em class="jxr_javadoccomment">	 * @param &lt;E&gt; The element type.</em>
-<a class="jxr_linenumber" name="L2035" href="#L2035">2035</a> <em class="jxr_javadoccomment">	 * @param array The array to convert.</em>
-<a class="jxr_linenumber" name="L2036" href="#L2036">2036</a> <em class="jxr_javadoccomment">	 * @param elementType</em>
-<a class="jxr_linenumber" name="L2037" href="#L2037">2037</a> <em class="jxr_javadoccomment">	 * 	The type of objects in the array.</em>
-<a class="jxr_linenumber" name="L2038" href="#L2038">2038</a> <em class="jxr_javadoccomment">	 * 	It must match the actual component type in the array.</em>
-<a class="jxr_linenumber" name="L2039" href="#L2039">2039</a> <em class="jxr_javadoccomment">	 * @return A new {@link ArrayList}</em>
-<a class="jxr_linenumber" name="L2040" href="#L2040">2040</a> <em class="jxr_javadoccomment">	 */</em>
-<a class="jxr_linenumber" name="L2041" href="#L2041">2041</a> 	@SuppressWarnings(<span class="jxr_string">"unchecked"</span>)
-<a class="jxr_linenumber" name="L2042" href="#L2042">2042</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;E&gt; List&lt;E&gt; toList(Object array, Class&lt;E&gt; elementType) {
-<a class="jxr_linenumber" name="L2043" href="#L2043">2043</a> 		<strong class="jxr_keyword">var</strong> l = <strong class="jxr_keyword">new</strong> ArrayList&lt;E&gt;(Array.getLength(array));
-<a class="jxr_linenumber" name="L2044" href="#L2044">2044</a> 		<strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">var</strong> i = 0; i &lt; Array.getLength(array); i++)
-<a class="jxr_linenumber" name="L2045" href="#L2045">2045</a> 			l.add((E)Array.get(array, i));
-<a class="jxr_linenumber" name="L2046" href="#L2046">2046</a> 		<strong class="jxr_keyword">return</strong> l;
-<a class="jxr_linenumber" name="L2047" href="#L2047">2047</a> 	}
-<a class="jxr_linenumber" name="L2048" href="#L2048">2048</a> 
-<a class="jxr_linenumber" name="L2049" href="#L2049">2049</a> 	<em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L2050" href="#L2050">2050</a> <em class="jxr_javadoccomment">	 * Recursively converts the specified array into a list of objects.</em>
-<a class="jxr_linenumber" name="L2051" href="#L2051">2051</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L2052" href="#L2052">2052</a> <em class="jxr_javadoccomment">	 * @param array The array to convert.</em>
-<a class="jxr_linenumber" name="L2053" href="#L2053">2053</a> <em class="jxr_javadoccomment">	 * @return A new {@link ArrayList}</em>
-<a class="jxr_linenumber" name="L2054" href="#L2054">2054</a> <em class="jxr_javadoccomment">	 */</em>
-<a class="jxr_linenumber" name="L2055" href="#L2055">2055</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> List&lt;Object&gt; toObjectList(Object array) {
-<a class="jxr_linenumber" name="L2056" href="#L2056">2056</a> 		<strong class="jxr_keyword">var</strong> l = <strong class="jxr_keyword">new</strong> ArrayList&lt;&gt;(Array.getLength(array));
-<a class="jxr_linenumber" name="L2057" href="#L2057">2057</a> 		<strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">var</strong> i = 0; i &lt; Array.getLength(array); i++) {
-<a class="jxr_linenumber" name="L2058" href="#L2058">2058</a> 			<strong class="jxr_keyword">var</strong> o = Array.get(array, i);
-<a class="jxr_linenumber" name="L2059" href="#L2059">2059</a> 			<strong class="jxr_keyword">if</strong> (isArray(o))
-<a class="jxr_linenumber" name="L2060" href="#L2060">2060</a> 				o = toObjectList(o);
-<a class="jxr_linenumber" name="L2061" href="#L2061">2061</a> 			l.add(o);
-<a class="jxr_linenumber" name="L2062" href="#L2062">2062</a> 		}
-<a class="jxr_linenumber" name="L2063" href="#L2063">2063</a> 		<strong class="jxr_keyword">return</strong> l;
-<a class="jxr_linenumber" name="L2064" href="#L2064">2064</a> 	}
-<a class="jxr_linenumber" name="L2065" href="#L2065">2065</a> 
-<a class="jxr_linenumber" name="L2066" href="#L2066">2066</a> 	<em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L2067" href="#L2067">2067</a> <em class="jxr_javadoccomment">	 * Creates a new set from the specified collection.</em>
-<a class="jxr_linenumber" name="L2068" href="#L2068">2068</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L2069" href="#L2069">2069</a> <em class="jxr_javadoccomment">	 * @param &lt;E&gt; The element type.</em>
-<a class="jxr_linenumber" name="L2070" href="#L2070">2070</a> <em class="jxr_javadoccomment">	 * @param val The value to copy from.</em>
-<a class="jxr_linenumber" name="L2071" href="#L2071">2071</a> <em class="jxr_javadoccomment">	 * @return A new {@link LinkedHashSet}, or &lt;jk&gt;null&lt;/jk&gt; if the input was null.</em>
-<a class="jxr_linenumber" name="L2072" href="#L2072">2072</a> <em class="jxr_javadoccomment">	 */</em>
-<a class="jxr_linenumber" name="L2073" href="#L2073">2073</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;E&gt; Set&lt;E&gt; toSet(Collection&lt;E&gt; val) {
-<a class="jxr_linenumber" name="L2074" href="#L2074">2074</a> 		<strong class="jxr_keyword">return</strong> val == <strong class="jxr_keyword">null</strong> ? <strong class="jxr_keyword">null</strong> : <strong class="jxr_keyword">new</strong> LinkedHashSet&lt;&gt;(val);
-<a class="jxr_linenumber" name="L2075" href="#L2075">2075</a> 	}
-<a class="jxr_linenumber" name="L2076" href="#L2076">2076</a> 
-<a class="jxr_linenumber" name="L2077" href="#L2077">2077</a> 	<em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L2078" href="#L2078">2078</a> <em class="jxr_javadoccomment">	 * Converts the specified array to a &lt;c&gt;Set&lt;/c&gt;.</em>
-<a class="jxr_linenumber" name="L2079" href="#L2079">2079</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L2080" href="#L2080">2080</a> <em class="jxr_javadoccomment">	 * &lt;p&gt;</em>
-<a class="jxr_linenumber" name="L2081" href="#L2081">2081</a> <em class="jxr_javadoccomment">	 * The order of the entries in the set are the same as the array.</em>
+<a class="jxr_linenumber" name="L1961" href="#L1961">1961</a> <em class="jxr_javadoccomment">	 * &lt;p&gt;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="L1962" href="#L1962">1962</a> <em class="jxr_javadoccomment">	 * passed to methods such as TestUtils.assertList().&lt;/p&gt;</em>
+<a class="jxr_linenumber" name="L1963" href="#L1963">1963</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L1964" href="#L1964">1964</a> <em class="jxr_javadoccomment">	 * &lt;h5 class='section'&gt;Supported Input Types:&lt;/h5&gt;</em>
+<a class="jxr_linenumber" name="L1965" href="#L1965">1965</a> <em class="jxr_javadoccomment">	 * &lt;ul&gt;</em>
+<a class="jxr_linenumber" name="L1966" href="#L1966">1966</a> <em class="jxr_javadoccomment">	 * 	&lt;li&gt;&lt;b&gt;List:&lt;/b&gt; Returns the input unchanged&lt;/li&gt;</em>
+<a class="jxr_linenumber" name="L1967" href="#L1967">1967</a> <em class="jxr_javadoccomment">	 * 	&lt;li&gt;&lt;b&gt;Iterable:&lt;/b&gt; Any collection, set, queue, etc. (converted to List preserving order)&lt;/li&gt;</em>
+<a class="jxr_linenumber" name="L1968" href="#L1968">1968</a> <em class="jxr_javadoccomment">	 * 	&lt;li&gt;&lt;b&gt;Iterator:&lt;/b&gt; Converts iterator contents to List&lt;/li&gt;</em>
+<a class="jxr_linenumber" name="L1969" href="#L1969">1969</a> <em class="jxr_javadoccomment">	 * 	&lt;li&gt;&lt;b&gt;Enumeration:&lt;/b&gt; Converts enumeration contents to List&lt;/li&gt;</em>
+<a class="jxr_linenumber" name="L1970" href="#L1970">1970</a> <em class="jxr_javadoccomment">	 * 	&lt;li&gt;&lt;b&gt;Stream:&lt;/b&gt; Converts stream contents to List (stream is consumed)&lt;/li&gt;</em>
+<a class="jxr_linenumber" name="L1971" href="#L1971">1971</a> <em class="jxr_javadoccomment">	 * 	&lt;li&gt;&lt;b&gt;Map:&lt;/b&gt; Converts map entries to List of Map.Entry objects&lt;/li&gt;</em>
+<a class="jxr_linenumber" name="L1972" href="#L1972">1972</a> <em class="jxr_javadoccomment">	 * 	&lt;li&gt;&lt;b&gt;Array:&lt;/b&gt; Converts any array type (including primitive arrays) to List&lt;/li&gt;</em>
+<a class="jxr_linenumber" name="L1973" href="#L1973">1973</a> <em class="jxr_javadoccomment">	 * &lt;/ul&gt;</em>
+<a class="jxr_linenumber" name="L1974" href="#L1974">1974</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L1975" href="#L1975">1975</a> <em class="jxr_javadoccomment">	 * &lt;h5 class='section'&gt;Usage Examples:&lt;/h5&gt;</em>
+<a class="jxr_linenumber" name="L1976" href="#L1976">1976</a> <em class="jxr_javadoccomment">	 * &lt;p class='bjava'&gt;</em>
+<a class="jxr_linenumber" name="L1977" href="#L1977">1977</a> <em class="jxr_javadoccomment">	 * 	&lt;jc&gt;// Test a Set&lt;/jc&gt;</em>
+<a class="jxr_linenumber" name="L1978" href="#L1978">1978</a> <em class="jxr_javadoccomment">	 * 	Set&amp;lt;String&amp;gt; &lt;jv&gt;mySet&lt;/jv&gt; = Set.of(&lt;js&gt;"a"&lt;/js&gt;, &lt;js&gt;"b"&lt;/js&gt;, &lt;js&gt;"c"&lt;/js&gt;);</em>
+<a class="jxr_linenumber" name="L1979" href="#L1979">1979</a> <em class="jxr_javadoccomment">	 * 	assertList(toList(&lt;jv&gt;mySet&lt;/jv&gt;), &lt;js&gt;"a"&lt;/js&gt;, &lt;js&gt;"b"&lt;/js&gt;, &lt;js&gt;"c"&lt;/js&gt;);</em>
+<a class="jxr_linenumber" name="L1980" href="#L1980">1980</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L1981" href="#L1981">1981</a> <em class="jxr_javadoccomment">	 * 	&lt;jc&gt;// Test an array&lt;/jc&gt;</em>
+<a class="jxr_linenumber" name="L1982" href="#L1982">1982</a> <em class="jxr_javadoccomment">	 * 	String[] &lt;jv&gt;myArray&lt;/jv&gt; = {&lt;js&gt;"x"&lt;/js&gt;, &lt;js&gt;"y"&lt;/js&gt;, &lt;js&gt;"z"&lt;/js&gt;};</em>
+<a class="jxr_linenumber" name="L1983" href="#L1983">1983</a> <em class="jxr_javadoccomment">	 * 	assertList(toList(&lt;jv&gt;myArray&lt;/jv&gt;), &lt;js&gt;"x"&lt;/js&gt;, &lt;js&gt;"y"&lt;/js&gt;, &lt;js&gt;"z"&lt;/js&gt;);</em>
+<a class="jxr_linenumber" name="L1984" href="#L1984">1984</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L1985" href="#L1985">1985</a> <em class="jxr_javadoccomment">	 * 	&lt;jc&gt;// Test a primitive array&lt;/jc&gt;</em>
+<a class="jxr_linenumber" name="L1986" href="#L1986">1986</a> <em class="jxr_javadoccomment">	 * 	&lt;jk&gt;int&lt;/jk&gt;[] &lt;jv&gt;numbers&lt;/jv&gt; = {1, 2, 3};</em>
+<a class="jxr_linenumber" name="L1987" href="#L1987">1987</a> <em class="jxr_javadoccomment">	 * 	assertList(toList(&lt;jv&gt;numbers&lt;/jv&gt;), &lt;js&gt;"1"&lt;/js&gt;, &lt;js&gt;"2"&lt;/js&gt;, &lt;js&gt;"3"&lt;/js&gt;);</em>
+<a class="jxr_linenumber" name="L1988" href="#L1988">1988</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L1989" href="#L1989">1989</a> <em class="jxr_javadoccomment">	 * 	&lt;jc&gt;// Test a Stream&lt;/jc&gt;</em>
+<a class="jxr_linenumber" name="L1990" href="#L1990">1990</a> <em class="jxr_javadoccomment">	 * 	Stream&amp;lt;String&amp;gt; &lt;jv&gt;myStream&lt;/jv&gt; = Stream.of(&lt;js&gt;"foo"&lt;/js&gt;, &lt;js&gt;"bar"&lt;/js&gt;);</em>
+<a class="jxr_linenumber" name="L1991" href="#L1991">1991</a> <em class="jxr_javadoccomment">	 * 	assertList(toList(&lt;jv&gt;myStream&lt;/jv&gt;), &lt;js&gt;"foo"&lt;/js&gt;, &lt;js&gt;"bar"&lt;/js&gt;);</em>
+<a class="jxr_linenumber" name="L1992" href="#L1992">1992</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L1993" href="#L1993">1993</a> <em class="jxr_javadoccomment">	 * 	&lt;jc&gt;// Test a Map (converted to entries)&lt;/jc&gt;</em>
+<a class="jxr_linenumber" name="L1994" href="#L1994">1994</a> <em class="jxr_javadoccomment">	 * 	Map&amp;lt;String,Integer&amp;gt; &lt;jv&gt;myMap&lt;/jv&gt; = Map.of(&lt;js&gt;"a"&lt;/js&gt;, 1, &lt;js&gt;"b"&lt;/js&gt;, 2);</em>
+<a class="jxr_linenumber" name="L1995" href="#L1995">1995</a> <em class="jxr_javadoccomment">	 * 	assertList(toList(&lt;jv&gt;myMap&lt;/jv&gt;), &lt;js&gt;"a=1"&lt;/js&gt;, &lt;js&gt;"b=2"&lt;/js&gt;);</em>
+<a class="jxr_linenumber" name="L1996" href="#L1996">1996</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L1997" href="#L1997">1997</a> <em class="jxr_javadoccomment">	 * 	&lt;jc&gt;// Test any Iterable collection&lt;/jc&gt;</em>
+<a class="jxr_linenumber" name="L1998" href="#L1998">1998</a> <em class="jxr_javadoccomment">	 * 	Queue&amp;lt;String&amp;gt; &lt;jv&gt;myQueue&lt;/jv&gt; = new LinkedList&amp;lt;&amp;gt;(List.of(&lt;js&gt;"first"&lt;/js&gt;, &lt;js&gt;"second"&lt;/js&gt;));</em>
+<a class="jxr_linenumber" name="L1999" href="#L1999">1999</a> <em class="jxr_javadoccomment">	 * 	assertList(toList(&lt;jv&gt;myQueue&lt;/jv&gt;), &lt;js&gt;"first"&lt;/js&gt;, &lt;js&gt;"second"&lt;/js&gt;);</em>
+<a class="jxr_linenumber" name="L2000" href="#L2000">2000</a> <em class="jxr_javadoccomment">	 * &lt;/p&gt;</em>
+<a class="jxr_linenumber" name="L2001" href="#L2001">2001</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L2002" href="#L2002">2002</a> <em class="jxr_javadoccomment">	 * &lt;h5 class='section'&gt;Integration with Testing:&lt;/h5&gt;</em>
+<a class="jxr_linenumber" name="L2003" href="#L2003">2003</a> <em class="jxr_javadoccomment">	 * &lt;p&gt;This method is specifically designed to work with testing frameworks to provide</em>
+<a class="jxr_linenumber" name="L2004" href="#L2004">2004</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="L2005" href="#L2005">2005</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="L2006" href="#L2006">2006</a> <em class="jxr_javadoccomment">	 * list assertion methods.&lt;/p&gt;</em>
+<a class="jxr_linenumber" name="L2007" href="#L2007">2007</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L2008" href="#L2008">2008</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="L2009" href="#L2009">2009</a> <em class="jxr_javadoccomment">	 * @return A {@link List} containing the elements from the input object.</em>
+<a class="jxr_linenumber" name="L2010" href="#L2010">2010</a> <em class="jxr_javadoccomment">	 * @throws IllegalArgumentException if the input object cannot be converted to a List.</em>
+<a class="jxr_linenumber" name="L2011" href="#L2011">2011</a> <em class="jxr_javadoccomment">	 * @see arrayToList</em>
+<a class="jxr_linenumber" name="L2012" href="#L2012">2012</a> <em class="jxr_javadoccomment">	 */</em>
+<a class="jxr_linenumber" name="L2013" href="#L2013">2013</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> List&lt;?&gt; toList(Object o) {  <em class="jxr_comment">// NOSONAR</em>
+<a class="jxr_linenumber" name="L2014" href="#L2014">2014</a> 		assertArgNotNull(<span class="jxr_string">"o"</span>, o);
+<a class="jxr_linenumber" name="L2015" href="#L2015">2015</a> 		<strong class="jxr_keyword">if</strong> (o instanceof List&lt;?&gt; o2)
+<a class="jxr_linenumber" name="L2016" href="#L2016">2016</a> 			<strong class="jxr_keyword">return</strong> o2;
+<a class="jxr_linenumber" name="L2017" href="#L2017">2017</a> 		<strong class="jxr_keyword">if</strong> (o instanceof Iterable&lt;?&gt; o2)
+<a class="jxr_linenumber" name="L2018" href="#L2018">2018</a> 			<strong class="jxr_keyword">return</strong> StreamSupport.stream(o2.spliterator(), false).toList();
+<a class="jxr_linenumber" name="L2019" href="#L2019">2019</a> 		<strong class="jxr_keyword">if</strong> (o instanceof Iterator&lt;?&gt; o2)
+<a class="jxr_linenumber" name="L2020" href="#L2020">2020</a> 			<strong class="jxr_keyword">return</strong> StreamSupport.stream(Spliterators.spliteratorUnknownSize(o2, 0), false).toList();
+<a class="jxr_linenumber" name="L2021" href="#L2021">2021</a> 		<strong class="jxr_keyword">if</strong> (o instanceof Enumeration&lt;?&gt; o2)
+<a class="jxr_linenumber" name="L2022" href="#L2022">2022</a> 			<strong class="jxr_keyword">return</strong> Collections.list(o2);
+<a class="jxr_linenumber" name="L2023" href="#L2023">2023</a> 		<strong class="jxr_keyword">if</strong> (o instanceof Stream&lt;?&gt; o2)
+<a class="jxr_linenumber" name="L2024" href="#L2024">2024</a> 			<strong class="jxr_keyword">return</strong> o2.toList();
+<a class="jxr_linenumber" name="L2025" href="#L2025">2025</a> 		<strong class="jxr_keyword">if</strong> (o instanceof Map&lt;?,?&gt; o2)
+<a class="jxr_linenumber" name="L2026" href="#L2026">2026</a> 			<strong class="jxr_keyword">return</strong> toList(o2.entrySet());
+<a class="jxr_linenumber" name="L2027" href="#L2027">2027</a> 		<strong class="jxr_keyword">if</strong> (o instanceof Optional&lt;?&gt; o2)
+<a class="jxr_linenumber" name="L2028" href="#L2028">2028</a> 			<strong class="jxr_keyword">return</strong> o2.isEmpty() ? Collections.emptyList() : Collections.singletonList(o2.get());
+<a class="jxr_linenumber" name="L2029" href="#L2029">2029</a> 		<strong class="jxr_keyword">if</strong> (isArray(o))
+<a class="jxr_linenumber" name="L2030" href="#L2030">2030</a> 			<strong class="jxr_keyword">return</strong> arrayToList(o);
+<a class="jxr_linenumber" name="L2031" href="#L2031">2031</a> 		<strong class="jxr_keyword">throw</strong> rex(<span class="jxr_string">"Could not convert object of type {0} to a list"</span>, cn(o));
+<a class="jxr_linenumber" name="L2032" href="#L2032">2032</a> 	}
+<a class="jxr_linenumber" name="L2033" href="#L2033">2033</a> 
+<a class="jxr_linenumber" name="L2034" href="#L2034">2034</a> 	<em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L2035" href="#L2035">2035</a> <em class="jxr_javadoccomment">	 * Converts the specified array to an &lt;c&gt;ArrayList&lt;/c&gt;</em>
+<a class="jxr_linenumber" name="L2036" href="#L2036">2036</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L2037" href="#L2037">2037</a> <em class="jxr_javadoccomment">	 * @param &lt;E&gt; The element type.</em>
+<a class="jxr_linenumber" name="L2038" href="#L2038">2038</a> <em class="jxr_javadoccomment">	 * @param array The array to convert.</em>
+<a class="jxr_linenumber" name="L2039" href="#L2039">2039</a> <em class="jxr_javadoccomment">	 * @param elementType</em>
+<a class="jxr_linenumber" name="L2040" href="#L2040">2040</a> <em class="jxr_javadoccomment">	 * 	The type of objects in the array.</em>
+<a class="jxr_linenumber" name="L2041" href="#L2041">2041</a> <em class="jxr_javadoccomment">	 * 	It must match the actual component type in the array.</em>
+<a class="jxr_linenumber" name="L2042" href="#L2042">2042</a> <em class="jxr_javadoccomment">	 * @return A new {@link ArrayList}</em>
+<a class="jxr_linenumber" name="L2043" href="#L2043">2043</a> <em class="jxr_javadoccomment">	 */</em>
+<a class="jxr_linenumber" name="L2044" href="#L2044">2044</a> 	@SuppressWarnings(<span class="jxr_string">"unchecked"</span>)
+<a class="jxr_linenumber" name="L2045" href="#L2045">2045</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;E&gt; List&lt;E&gt; toList(Object array, Class&lt;E&gt; elementType) {
+<a class="jxr_linenumber" name="L2046" href="#L2046">2046</a> 		<strong class="jxr_keyword">var</strong> l = <strong class="jxr_keyword">new</strong> ArrayList&lt;E&gt;(Array.getLength(array));
+<a class="jxr_linenumber" name="L2047" href="#L2047">2047</a> 		<strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">var</strong> i = 0; i &lt; Array.getLength(array); i++)
+<a class="jxr_linenumber" name="L2048" href="#L2048">2048</a> 			l.add((E)Array.get(array, i));
+<a class="jxr_linenumber" name="L2049" href="#L2049">2049</a> 		<strong class="jxr_keyword">return</strong> l;
+<a class="jxr_linenumber" name="L2050" href="#L2050">2050</a> 	}
+<a class="jxr_linenumber" name="L2051" href="#L2051">2051</a> 
+<a class="jxr_linenumber" name="L2052" href="#L2052">2052</a> 	<em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L2053" href="#L2053">2053</a> <em class="jxr_javadoccomment">	 * Recursively converts the specified array into a list of objects.</em>
+<a class="jxr_linenumber" name="L2054" href="#L2054">2054</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L2055" href="#L2055">2055</a> <em class="jxr_javadoccomment">	 * @param array The array to convert.</em>
+<a class="jxr_linenumber" name="L2056" href="#L2056">2056</a> <em class="jxr_javadoccomment">	 * @return A new {@link ArrayList}</em>
+<a class="jxr_linenumber" name="L2057" href="#L2057">2057</a> <em class="jxr_javadoccomment">	 */</em>
+<a class="jxr_linenumber" name="L2058" href="#L2058">2058</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> List&lt;Object&gt; toObjectList(Object array) {
+<a class="jxr_linenumber" name="L2059" href="#L2059">2059</a> 		<strong class="jxr_keyword">var</strong> l = <strong class="jxr_keyword">new</strong> ArrayList&lt;&gt;(Array.getLength(array));
+<a class="jxr_linenumber" name="L2060" href="#L2060">2060</a> 		<strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">var</strong> i = 0; i &lt; Array.getLength(array); i++) {
+<a class="jxr_linenumber" name="L2061" href="#L2061">2061</a> 			<strong class="jxr_keyword">var</strong> o = Array.get(array, i);
+<a class="jxr_linenumber" name="L2062" href="#L2062">2062</a> 			<strong class="jxr_keyword">if</strong> (isArray(o))
+<a class="jxr_linenumber" name="L2063" href="#L2063">2063</a> 				o = toObjectList(o);
+<a class="jxr_linenumber" name="L2064" href="#L2064">2064</a> 			l.add(o);
+<a class="jxr_linenumber" name="L2065" href="#L2065">2065</a> 		}
+<a class="jxr_linenumber" name="L2066" href="#L2066">2066</a> 		<strong class="jxr_keyword">return</strong> l;
+<a class="jxr_linenumber" name="L2067" href="#L2067">2067</a> 	}
+<a class="jxr_linenumber" name="L2068" href="#L2068">2068</a> 
+<a class="jxr_linenumber" name="L2069" href="#L2069">2069</a> 	<em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L2070" href="#L2070">2070</a> <em class="jxr_javadoccomment">	 * Creates a new set from the specified collection.</em>
+<a class="jxr_linenumber" name="L2071" href="#L2071">2071</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L2072" href="#L2072">2072</a> <em class="jxr_javadoccomment">	 * @param &lt;E&gt; The element type.</em>
+<a class="jxr_linenumber" name="L2073" href="#L2073">2073</a> <em class="jxr_javadoccomment">	 * @param val The value to copy from.</em>
+<a class="jxr_linenumber" name="L2074" href="#L2074">2074</a> <em class="jxr_javadoccomment">	 * @return A new {@link LinkedHashSet}, or &lt;jk&gt;null&lt;/jk&gt; if the input was null.</em>
+<a class="jxr_linenumber" name="L2075" href="#L2075">2075</a> <em class="jxr_javadoccomment">	 */</em>
+<a class="jxr_linenumber" name="L2076" href="#L2076">2076</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;E&gt; Set&lt;E&gt; toSet(Collection&lt;E&gt; val) {
+<a class="jxr_linenumber" name="L2077" href="#L2077">2077</a> 		<strong class="jxr_keyword">return</strong> val == <strong class="jxr_keyword">null</strong> ? <strong class="jxr_keyword">null</strong> : <strong class="jxr_keyword">new</strong> LinkedHashSet&lt;&gt;(val);
+<a class="jxr_linenumber" name="L2078" href="#L2078">2078</a> 	}
+<a class="jxr_linenumber" name="L2079" href="#L2079">2079</a> 
+<a class="jxr_linenumber" name="L2080" href="#L2080">2080</a> 	<em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L2081" href="#L2081">2081</a> <em class="jxr_javadoccomment">	 * Converts the specified array to a &lt;c&gt;Set&lt;/c&gt;.</em>
 <a class="jxr_linenumber" name="L2082" href="#L2082">2082</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L2083" href="#L2083">2083</a> <em class="jxr_javadoccomment">	 * @param &lt;T&gt; The entry type of the array.</em>
-<a class="jxr_linenumber" name="L2084" href="#L2084">2084</a> <em class="jxr_javadoccomment">	 * @param array The array being wrapped in a &lt;c&gt;Set&lt;/c&gt; interface.</em>
-<a class="jxr_linenumber" name="L2085" href="#L2085">2085</a> <em class="jxr_javadoccomment">	 * @return The new set.</em>
-<a class="jxr_linenumber" name="L2086" href="#L2086">2086</a> <em class="jxr_javadoccomment">	 */</em>
-<a class="jxr_linenumber" name="L2087" href="#L2087">2087</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;T&gt; Set&lt;T&gt; toSet(T[] array) {
-<a class="jxr_linenumber" name="L2088" href="#L2088">2088</a> 		assertArgNotNull(<span class="jxr_string">"array"</span>, array);
-<a class="jxr_linenumber" name="L2089" href="#L2089">2089</a> 		<strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> AbstractSet&lt;&gt;() {
-<a class="jxr_linenumber" name="L2090" href="#L2090">2090</a> 
-<a class="jxr_linenumber" name="L2091" href="#L2091">2091</a> 			@Override <em class="jxr_comment">/* Overridden from Set */</em>
-<a class="jxr_linenumber" name="L2092" href="#L2092">2092</a> 			<strong class="jxr_keyword">public</strong> Iterator&lt;T&gt; iterator() {
-<a class="jxr_linenumber" name="L2093" href="#L2093">2093</a> 				<strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> Iterator&lt;&gt;() {
-<a class="jxr_linenumber" name="L2094" href="#L2094">2094</a> 					<strong class="jxr_keyword">int</strong> i = 0;
-<a class="jxr_linenumber" name="L2095" href="#L2095">2095</a> 
-<a class="jxr_linenumber" name="L2096" href="#L2096">2096</a> 					@Override <em class="jxr_comment">/* Overridden from Iterator */</em>
-<a class="jxr_linenumber" name="L2097" href="#L2097">2097</a> 					<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> hasNext() {
-<a class="jxr_linenumber" name="L2098" href="#L2098">2098</a> 						<strong class="jxr_keyword">return</strong> i &lt; array.length;
-<a class="jxr_linenumber" name="L2099" href="#L2099">2099</a> 					}
-<a class="jxr_linenumber" name="L2100" href="#L2100">2100</a> 
-<a class="jxr_linenumber" name="L2101" href="#L2101">2101</a> 					@Override <em class="jxr_comment">/* Overridden from Iterator */</em>
-<a class="jxr_linenumber" name="L2102" href="#L2102">2102</a> 					<strong class="jxr_keyword">public</strong> T next() {
-<a class="jxr_linenumber" name="L2103" href="#L2103">2103</a> 						<strong class="jxr_keyword">if</strong> (i &gt;= array.length)
-<a class="jxr_linenumber" name="L2104" href="#L2104">2104</a> 							<strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> NoSuchElementException();
-<a class="jxr_linenumber" name="L2105" href="#L2105">2105</a> 						T t = array[i];
-<a class="jxr_linenumber" name="L2106" href="#L2106">2106</a> 						i++;
-<a class="jxr_linenumber" name="L2107" href="#L2107">2107</a> 						<strong class="jxr_keyword">return</strong> t;
-<a class="jxr_linenumber" name="L2108" href="#L2108">2108</a> 					}
-<a class="jxr_linenumber" name="L2109" href="#L2109">2109</a> 
-<a class="jxr_linenumber" name="L2110" href="#L2110">2110</a> 					@Override <em class="jxr_comment">/* Overridden from Iterator */</em>
-<a class="jxr_linenumber" name="L2111" href="#L2111">2111</a> 					<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> remove() {
-<a class="jxr_linenumber" name="L2112" href="#L2112">2112</a> 						<strong class="jxr_keyword">throw</strong> unsupportedOp();
-<a class="jxr_linenumber" name="L2113" href="#L2113">2113</a> 					}
-<a class="jxr_linenumber" name="L2114" href="#L2114">2114</a> 				};
-<a class="jxr_linenumber" name="L2115" href="#L2115">2115</a> 			}
-<a class="jxr_linenumber" name="L2116" href="#L2116">2116</a> 
-<a class="jxr_linenumber" name="L2117" href="#L2117">2117</a> 			@Override <em class="jxr_comment">/* Overridden from Set */</em>
-<a class="jxr_linenumber" name="L2118" href="#L2118">2118</a> 			<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">int</strong> size() {
-<a class="jxr_linenumber" name="L2119" href="#L2119">2119</a> 				<strong class="jxr_keyword">return</strong> array.length;
-<a class="jxr_linenumber" name="L2120" href="#L2120">2120</a> 			}
-<a class="jxr_linenumber" name="L2121" href="#L2121">2121</a> 		};
-<a class="jxr_linenumber" name="L2122" href="#L2122">2122</a> 	}
-<a class="jxr_linenumber" name="L2123" href="#L2123">2123</a> 
-<a class="jxr_linenumber" name="L2124" href="#L2124">2124</a> 	<em class="jxr_comment">//-----------------------------------------------------------------------------------------------------------------</em>
-<a class="jxr_linenumber" name="L2125" href="#L2125">2125</a> 	<em class="jxr_comment">// Primitive array creation methods</em>
-<a class="jxr_linenumber" name="L2126" href="#L2126">2126</a> 	<em class="jxr_comment">//-----------------------------------------------------------------------------------------------------------------</em>
-<a class="jxr_linenumber" name="L2127" href="#L2127">2127</a> 
-<a class="jxr_linenumber" name="L2128" href="#L2128">2128</a> 	<em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L2129" href="#L2129">2129</a> <em class="jxr_javadoccomment">	 * Creates a new {@link TreeSet} from the specified collection.</em>
-<a class="jxr_linenumber" name="L2130" href="#L2130">2130</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L2131" href="#L2131">2131</a> <em class="jxr_javadoccomment">	 * @param &lt;E&gt; The element type.</em>
-<a class="jxr_linenumber" name="L2132" href="#L2132">2132</a> <em class="jxr_javadoccomment">	 * @param value The value to copy from.</em>
-<a class="jxr_linenumber" name="L2133" href="#L2133">2133</a> <em class="jxr_javadoccomment">	 * @return A new {@link TreeSet}, or &lt;jk&gt;null&lt;/jk&gt; if the input was null.</em>
-<a class="jxr_linenumber" name="L2134" href="#L2134">2134</a> <em class="jxr_javadoccomment">	 */</em>
-<a class="jxr_linenumber" name="L2135" href="#L2135">2135</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;E&gt; TreeSet&lt;E&gt; toSortedSet(Collection&lt;E&gt; value) {
-<a class="jxr_linenumber" name="L2136" href="#L2136">2136</a> 		<strong class="jxr_keyword">if</strong> (value == <strong class="jxr_keyword">null</strong>)
-<a class="jxr_linenumber" name="L2137" href="#L2137">2137</a> 			<strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="L2138" href="#L2138">2138</a> 		<strong class="jxr_keyword">var</strong> l = <strong class="jxr_keyword">new</strong> TreeSet&lt;E&gt;();
-<a class="jxr_linenumber" name="L2139" href="#L2139">2139</a> 		value.forEach(x -&gt; l.add(x));
-<a class="jxr_linenumber" name="L2140" href="#L2140">2140</a> 		<strong class="jxr_keyword">return</strong> l;
-<a class="jxr_linenumber" name="L2141" href="#L2141">2141</a> 	}
-<a class="jxr_linenumber" name="L2142" href="#L2142">2142</a> 
-<a class="jxr_linenumber" name="L2143" href="#L2143">2143</a> 	<em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L2144" href="#L2144">2144</a> <em class="jxr_javadoccomment">	 * Creates a new {@link TreeSet} from the specified collection.</em>
-<a class="jxr_linenumber" name="L2145" href="#L2145">2145</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L2146" href="#L2146">2146</a> <em class="jxr_javadoccomment">	 * @param &lt;E&gt; The element type.</em>
-<a class="jxr_linenumber" name="L2147" href="#L2147">2147</a> <em class="jxr_javadoccomment">	 * @param value The value to copy from.</em>
-<a class="jxr_linenumber" name="L2148" href="#L2148">2148</a> <em class="jxr_javadoccomment">	 * @param nullIfEmpty If &lt;jk&gt;true&lt;/jk&gt; returns &lt;jk&gt;null&lt;/jk&gt; if the collection is empty.</em>
-<a class="jxr_linenumber" name="L2149" href="#L2149">2149</a> <em class="jxr_javadoccomment">	 * @return A new {@link TreeSet}, or &lt;jk&gt;null&lt;/jk&gt; if the input was null.</em>
-<a class="jxr_linenumber" name="L2150" href="#L2150">2150</a> <em class="jxr_javadoccomment">	 */</em>
-<a class="jxr_linenumber" name="L2151" href="#L2151">2151</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;E&gt; TreeSet&lt;E&gt; toSortedSet(Collection&lt;E&gt; value, <strong class="jxr_keyword">boolean</strong> nullIfEmpty) {
-<a class="jxr_linenumber" name="L2152" href="#L2152">2152</a> 		<strong class="jxr_keyword">if</strong> (value == <strong class="jxr_keyword">null</strong> || (nullIfEmpty &amp;&amp; value.isEmpty()))
-<a class="jxr_linenumber" name="L2153" href="#L2153">2153</a> 			<strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="L2154" href="#L2154">2154</a> 		<strong class="jxr_keyword">var</strong> l = <strong class="jxr_keyword">new</strong> TreeSet&lt;E&gt;();
-<a class="jxr_linenumber" name="L2155" href="#L2155">2155</a> 		value.forEach(x -&gt; l.add(x));
-<a class="jxr_linenumber" name="L2156" href="#L2156">2156</a> 		<strong class="jxr_keyword">return</strong> l;
-<a class="jxr_linenumber" name="L2157" href="#L2157">2157</a> 	}
-<a class="jxr_linenumber" name="L2158" href="#L2158">2158</a> 
-<a class="jxr_linenumber" name="L2159" href="#L2159">2159</a> 	<em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L2160" href="#L2160">2160</a> <em class="jxr_javadoccomment">	 * Creates a new {@link TreeSet} containing a copy of the specified set.</em>
-<a class="jxr_linenumber" name="L2161" href="#L2161">2161</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L2162" href="#L2162">2162</a> <em class="jxr_javadoccomment">	 * @param &lt;T&gt; The element type.</em>
-<a class="jxr_linenumber" name="L2163" href="#L2163">2163</a> <em class="jxr_javadoccomment">	 * @param copyFrom The set to copy from.</em>
-<a class="jxr_linenumber" name="L2164" href="#L2164">2164</a> <em class="jxr_javadoccomment">	 * @return A new {@link TreeSet}, or &lt;jk&gt;null&lt;/jk&gt; if the set was &lt;jk&gt;null&lt;/jk&gt;.</em>
-<a class="jxr_linenumber" name="L2165" href="#L2165">2165</a> <em class="jxr_javadoccomment">	 */</em>
-<a class="jxr_linenumber" name="L2166" href="#L2166">2166</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;T&gt; TreeSet&lt;T&gt; toSortedSet(Set&lt;T&gt; copyFrom) {
-<a class="jxr_linenumber" name="L2167" href="#L2167">2167</a> 		<strong class="jxr_keyword">return</strong> copyFrom == <strong class="jxr_keyword">null</strong> ? <strong class="jxr_keyword">null</strong> : <strong class="jxr_keyword">new</strong> TreeSet&lt;&gt;(copyFrom);
-<a class="jxr_linenumber" name="L2168" href="#L2168">2168</a> 	}
-<a class="jxr_linenumber" name="L2169" href="#L2169">2169</a> 
-<a class="jxr_linenumber" name="L2170" href="#L2170">2170</a> 	<em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L2171" href="#L2171">2171</a> <em class="jxr_javadoccomment">	 * Converts an array to a stream of objects.</em>
-<a class="jxr_linenumber" name="L2172" href="#L2172">2172</a> <em class="jxr_javadoccomment">	 * @param array The array to convert.</em>
-<a class="jxr_linenumber" name="L2173" href="#L2173">2173</a> <em class="jxr_javadoccomment">	 * @return A new stream.</em>
-<a class="jxr_linenumber" name="L2174" href="#L2174">2174</a> <em class="jxr_javadoccomment">	 */</em>
-<a class="jxr_linenumber" name="L2175" href="#L2175">2175</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> Stream&lt;Object&gt; toStream(Object array) {
-<a class="jxr_linenumber" name="L2176" href="#L2176">2176</a> 		assertArg(isArray(array), <span class="jxr_string">"Arg was not an array.  Type: {0}"</span>, cn(array));
-<a class="jxr_linenumber" name="L2177" href="#L2177">2177</a> 		<strong class="jxr_keyword">var</strong> length = Array.getLength(array);
-<a class="jxr_linenumber" name="L2178" href="#L2178">2178</a> 		<strong class="jxr_keyword">return</strong> IntStream.range(0, length).mapToObj(i -&gt; Array.get(array, i));
-<a class="jxr_linenumber" name="L2179" href="#L2179">2179</a> 	}
-<a class="jxr_linenumber" name="L2180" href="#L2180">2180</a> 
-<a class="jxr_linenumber" name="L2181" href="#L2181">2181</a> 	<em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L2182" href="#L2182">2182</a> <em class="jxr_javadoccomment">	 * Converts the specified collection to an array of strings.</em>
-<a class="jxr_linenumber" name="L2183" href="#L2183">2183</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L2184" href="#L2184">2184</a> <em class="jxr_javadoccomment">	 * &lt;p&gt;</em>
-<a class="jxr_linenumber" name="L2185" href="#L2185">2185</a> <em class="jxr_javadoccomment">	 * Entries are converted to strings using {@link #toString()}.</em>
-<a class="jxr_linenumber" name="L2186" href="#L2186">2186</a> <em class="jxr_javadoccomment">	 * &lt;jk&gt;null&lt;/jk&gt; values remain &lt;jk&gt;null&lt;/jk&gt;.</em>
-<a class="jxr_linenumber" name="L2187" href="#L2187">2187</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L2188" href="#L2188">2188</a> <em class="jxr_javadoccomment">	 * @param c The collection to convert.</em>
-<a class="jxr_linenumber" name="L2189" href="#L2189">2189</a> <em class="jxr_javadoccomment">	 * @return The collection as a string array.</em>
-<a class="jxr_linenumber" name="L2190" href="#L2190">2190</a> <em class="jxr_javadoccomment">	 */</em>
-<a class="jxr_linenumber" name="L2191" href="#L2191">2191</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> String[] toStringArray(Collection&lt;?&gt; c) {
-<a class="jxr_linenumber" name="L2192" href="#L2192">2192</a> 		<strong class="jxr_keyword">var</strong> r = <strong class="jxr_keyword">new</strong> String[c.size()];
-<a class="jxr_linenumber" name="L2193" href="#L2193">2193</a> 		<strong class="jxr_keyword">var</strong> i = 0;
-<a class="jxr_linenumber" name="L2194" href="#L2194">2194</a> 		<strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">var</strong> o : c)
-<a class="jxr_linenumber" name="L2195" href="#L2195">2195</a> 			r[i++] = s(o);
-<a class="jxr_linenumber" name="L2196" href="#L2196">2196</a> 		<strong class="jxr_keyword">return</strong> r;
-<a class="jxr_linenumber" name="L2197" href="#L2197">2197</a> 	}
-<a class="jxr_linenumber" name="L2198" href="#L2198">2198</a> 
-<a class="jxr_linenumber" name="L2199" href="#L2199">2199</a> 	<em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L2200" href="#L2200">2200</a> <em class="jxr_javadoccomment">	 * Traverses all elements in the specified object and executes a consumer for it.</em>
-<a class="jxr_linenumber" name="L2201" href="#L2201">2201</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L2202" href="#L2202">2202</a> <em class="jxr_javadoccomment">	 * @param &lt;T&gt; The element type.</em>
-<a class="jxr_linenumber" name="L2203" href="#L2203">2203</a> <em class="jxr_javadoccomment">	 * @param o The object to traverse.</em>
-<a class="jxr_linenumber" name="L2204" href="#L2204">2204</a> <em class="jxr_javadoccomment">	 * @param c The consumer of the objects.</em>
-<a class="jxr_linenumber" name="L2205" href="#L2205">2205</a> <em class="jxr_javadoccomment">	 */</em>
-<a class="jxr_linenumber" name="L2206" href="#L2206">2206</a> 	@SuppressWarnings(<span class="jxr_string">"unchecked"</span>)
-<a class="jxr_linenumber" name="L2207" href="#L2207">2207</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;T&gt; <strong class="jxr_keyword">void</strong> traverse(Object o, Consumer&lt;T&gt; c) {
-<a class="jxr_linenumber" name="L2208" href="#L2208">2208</a> 		<strong class="jxr_keyword">if</strong> (o == <strong class="jxr_keyword">null</strong>)
-<a class="jxr_linenumber" name="L2209" href="#L2209">2209</a> 			<strong class="jxr_keyword">return</strong>;
-<a class="jxr_linenumber" name="L2210" href="#L2210">2210</a> 		<strong class="jxr_keyword">if</strong> (o instanceof Iterable&lt;?&gt; o2)
-<a class="jxr_linenumber" name="L2211" href="#L2211">2211</a> 			o2.forEach(x -&gt; traverse(x, c));
-<a class="jxr_linenumber" name="L2212" href="#L2212">2212</a> 		<strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (o instanceof Stream&lt;?&gt; o2)
-<a class="jxr_linenumber" name="L2213" href="#L2213">2213</a> 			o2.forEach(x -&gt; traverse(x, c));
-<a class="jxr_linenumber" name="L2214" href="#L2214">2214</a> 		<strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (isArray(o))
-<a class="jxr_linenumber" name="L2215" href="#L2215">2215</a> 			toStream(o).forEach(x -&gt; traverse(x, c));
-<a class="jxr_linenumber" name="L2216" href="#L2216">2216</a> 		<strong class="jxr_keyword">else</strong>
-<a class="jxr_linenumber" name="L2217" href="#L2217">2217</a> 			c.accept((T)o);
-<a class="jxr_linenumber" name="L2218" href="#L2218">2218</a> 	}
-<a class="jxr_linenumber" name="L2219" href="#L2219">2219</a> 
-<a class="jxr_linenumber" name="L2220" href="#L2220">2220</a> 	<em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L2221" href="#L2221">2221</a> <em class="jxr_javadoccomment">	 * Creates an unmodifiable view of the specified list.</em>
-<a class="jxr_linenumber" name="L2222" href="#L2222">2222</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L2223" href="#L2223">2223</a> <em class="jxr_javadoccomment">	 * &lt;p&gt;This is a null-safe wrapper around {@link Collections#unmodifiableList(List)}.&lt;/p&gt;</em>
-<a class="jxr_linenumber" name="L2224" href="#L2224">2224</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L2225" href="#L2225">2225</a> <em class="jxr_javadoccomment">	 * @param &lt;T&gt; The element type.</em>
-<a class="jxr_linenumber" name="L2226" href="#L2226">2226</a> <em class="jxr_javadoccomment">	 * @param value The list to make unmodifiable. Can be null.</em>
-<a class="jxr_linenumber" name="L2227" href="#L2227">2227</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="L2228" href="#L2228">2228</a> <em class="jxr_javadoccomment">	 */</em>
-<a class="jxr_linenumber" name="L2229" href="#L2229">2229</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;T&gt; List&lt;T&gt; u(List&lt;? <strong class="jxr_keyword">extends</strong> T&gt; value) {
-<a class="jxr_linenumber" name="L2230" href="#L2230">2230</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="L2231" href="#L2231">2231</a> 	}
-<a class="jxr_linenumber" name="L2232" href="#L2232">2232</a> 
-<a class="jxr_linenumber" name="L2233" href="#L2233">2233</a> 	<em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L2234" href="#L2234">2234</a> <em class="jxr_javadoccomment">	 * Creates an unmodifiable view of the specified map.</em>
-<a class="jxr_linenumber" name="L2235" href="#L2235">2235</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L2236" href="#L2236">2236</a> <em class="jxr_javadoccomment">	 * &lt;p&gt;This is a null-safe wrapper around {@link Collections#unmodifiableMap(Map)}.&lt;/p&gt;</em>
-<a class="jxr_linenumber" name="L2237" href="#L2237">2237</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L2238" href="#L2238">2238</a> <em class="jxr_javadoccomment">	 * @param &lt;K&gt; The key type.</em>
-<a class="jxr_linenumber" name="L2239" href="#L2239">2239</a> <em class="jxr_javadoccomment">	 * @param &lt;V&gt; The value type.</em>
-<a class="jxr_linenumber" name="L2240" href="#L2240">2240</a> <em class="jxr_javadoccomment">	 * @param value The map to make unmodifiable. Can be null.</em>
-<a class="jxr_linenumber" name="L2241" href="#L2241">2241</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="L2242" href="#L2242">2242</a> <em class="jxr_javadoccomment">	 */</em>
-<a class="jxr_linenumber" name="L2243" href="#L2243">2243</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;K,V&gt; Map&lt;K,V&gt; u(Map&lt;? <strong class="jxr_keyword">extends</strong> K,? <strong class="jxr_keyword">extends</strong> V&gt; value) {
-<a class="jxr_linenumber" name="L2244" href="#L2244">2244</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="L2245" href="#L2245">2245</a> 	}
-<a class="jxr_linenumber" name="L2246" href="#L2246">2246</a> 
-<a class="jxr_linenumber" name="L2247" href="#L2247">2247</a> 	<em class="jxr_comment">//-----------------------------------------------------------------------------------------------------------------</em>
-<a class="jxr_linenumber" name="L2248" href="#L2248">2248</a> 	<em class="jxr_comment">// Stream utilities</em>
-<a class="jxr_linenumber" name="L2249" href="#L2249">2249</a> 	<em class="jxr_comment">//-----------------------------------------------------------------------------------------------------------------</em>
-<a class="jxr_linenumber" name="L2250" href="#L2250">2250</a> 
-<a class="jxr_linenumber" name="L2251" href="#L2251">2251</a> 	<em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L2252" href="#L2252">2252</a> <em class="jxr_javadoccomment">	 * Creates an unmodifiable view of the specified set.</em>
-<a class="jxr_linenumber" name="L2253" href="#L2253">2253</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L2254" href="#L2254">2254</a> <em class="jxr_javadoccomment">	 * &lt;p&gt;This is a null-safe wrapper around {@link Collections#unmodifiableSet(Set)}.&lt;/p&gt;</em>
-<a class="jxr_linenumber" name="L2255" href="#L2255">2255</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L2256" href="#L2256">2256</a> <em class="jxr_javadoccomment">	 * @param &lt;T&gt; The element type.</em>
-<a class="jxr_linenumber" name="L2257" href="#L2257">2257</a> <em class="jxr_javadoccomment">	 * @param value The set to make unmodifiable. Can be null.</em>
-<a class="jxr_linenumber" name="L2258" href="#L2258">2258</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="L2259" href="#L2259">2259</a> <em class="jxr_javadoccomment">	 */</em>
-<a class="jxr_linenumber" name="L2260" href="#L2260">2260</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;T&gt; Set&lt;T&gt; u(Set&lt;? <strong class="jxr_keyword">extends</strong> T&gt; value) {
-<a class="jxr_linenumber" name="L2261" href="#L2261">2261</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="L2262" href="#L2262">2262</a> 	}
-<a class="jxr_linenumber" name="L2263" href="#L2263">2263</a> 
-<a class="jxr_linenumber" name="L2264" href="#L2264">2264</a> 	<strong class="jxr_keyword">private</strong> <a name="CollectionUtils" href="../../../../../org/apache/juneau/commons/utils/CollectionUtils.html#CollectionUtils">CollectionUtils</a>() {}
-<a class="jxr_linenumber" name="L2265" href="#L2265">2265</a> }
+<a class="jxr_linenumber" name="L2083" href="#L2083">2083</a> <em class="jxr_javadoccomment">	 * &lt;p&gt;</em>
+<a class="jxr_linenumber" name="L2084" href="#L2084">2084</a> <em class="jxr_javadoccomment">	 * The order of the entries in the set are the same as the array.</em>
+<a class="jxr_linenumber" name="L2085" href="#L2085">2085</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L2086" href="#L2086">2086</a> <em class="jxr_javadoccomment">	 * @param &lt;T&gt; The entry type of the array.</em>
+<a class="jxr_linenumber" name="L2087" href="#L2087">2087</a> <em class="jxr_javadoccomment">	 * @param array The array being wrapped in a &lt;c&gt;Set&lt;/c&gt; interface.</em>
+<a class="jxr_linenumber" name="L2088" href="#L2088">2088</a> <em class="jxr_javadoccomment">	 * @return The new set.</em>
+<a class="jxr_linenumber" name="L2089" href="#L2089">2089</a> <em class="jxr_javadoccomment">	 */</em>
+<a class="jxr_linenumber" name="L2090" href="#L2090">2090</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;T&gt; Set&lt;T&gt; toSet(T[] array) {
+<a class="jxr_linenumber" name="L2091" href="#L2091">2091</a> 		assertArgNotNull(<span class="jxr_string">"array"</span>, array);
+<a class="jxr_linenumber" name="L2092" href="#L2092">2092</a> 		<strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> AbstractSet&lt;&gt;() {
+<a class="jxr_linenumber" name="L2093" href="#L2093">2093</a> 
+<a class="jxr_linenumber" name="L2094" href="#L2094">2094</a> 			@Override <em class="jxr_comment">/* Overridden from Set */</em>
+<a class="jxr_linenumber" name="L2095" href="#L2095">2095</a> 			<strong class="jxr_keyword">public</strong> Iterator&lt;T&gt; iterator() {
+<a class="jxr_linenumber" name="L2096" href="#L2096">2096</a> 				<strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> Iterator&lt;&gt;() {
+<a class="jxr_linenumber" name="L2097" href="#L2097">2097</a> 					<strong class="jxr_keyword">int</strong> i = 0;
+<a class="jxr_linenumber" name="L2098" href="#L2098">2098</a> 
+<a class="jxr_linenumber" name="L2099" href="#L2099">2099</a> 					@Override <em class="jxr_comment">/* Overridden from Iterator */</em>
+<a class="jxr_linenumber" name="L2100" href="#L2100">2100</a> 					<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> hasNext() {
+<a class="jxr_linenumber" name="L2101" href="#L2101">2101</a> 						<strong class="jxr_keyword">return</strong> i &lt; array.length;
+<a class="jxr_linenumber" name="L2102" href="#L2102">2102</a> 					}
+<a class="jxr_linenumber" name="L2103" href="#L2103">2103</a> 
+<a class="jxr_linenumber" name="L2104" href="#L2104">2104</a> 					@Override <em class="jxr_comment">/* Overridden from Iterator */</em>
+<a class="jxr_linenumber" name="L2105" href="#L2105">2105</a> 					<strong class="jxr_keyword">public</strong> T next() {
+<a class="jxr_linenumber" name="L2106" href="#L2106">2106</a> 						<strong class="jxr_keyword">if</strong> (i &gt;= array.length)
+<a class="jxr_linenumber" name="L2107" href="#L2107">2107</a> 							<strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> NoSuchElementException();
+<a class="jxr_linenumber" name="L2108" href="#L2108">2108</a> 						T t = array[i];
+<a class="jxr_linenumber" name="L2109" href="#L2109">2109</a> 						i++;
+<a class="jxr_linenumber" name="L2110" href="#L2110">2110</a> 						<strong class="jxr_keyword">return</strong> t;
+<a class="jxr_linenumber" name="L2111" href="#L2111">2111</a> 					}
+<a class="jxr_linenumber" name="L2112" href="#L2112">2112</a> 
+<a class="jxr_linenumber" name="L2113" href="#L2113">2113</a> 					@Override <em class="jxr_comment">/* Overridden from Iterator */</em>
+<a class="jxr_linenumber" name="L2114" href="#L2114">2114</a> 					<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> remove() {
+<a class="jxr_linenumber" name="L2115" href="#L2115">2115</a> 						<strong class="jxr_keyword">throw</strong> unsupportedOp();
+<a class="jxr_linenumber" name="L2116" href="#L2116">2116</a> 					}
+<a class="jxr_linenumber" name="L2117" href="#L2117">2117</a> 				};
+<a class="jxr_linenumber" name="L2118" href="#L2118">2118</a> 			}
+<a class="jxr_linenumber" name="L2119" href="#L2119">2119</a> 
+<a class="jxr_linenumber" name="L2120" href="#L2120">2120</a> 			@Override <em class="jxr_comment">/* Overridden from Set */</em>
+<a class="jxr_linenumber" name="L2121" href="#L2121">2121</a> 			<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">int</strong> size() {
+<a class="jxr_linenumber" name="L2122" href="#L2122">2122</a> 				<strong class="jxr_keyword">return</strong> array.length;
+<a class="jxr_linenumber" name="L2123" href="#L2123">2123</a> 			}
+<a class="jxr_linenumber" name="L2124" href="#L2124">2124</a> 		};
+<a class="jxr_linenumber" name="L2125" href="#L2125">2125</a> 	}
+<a class="jxr_linenumber" name="L2126" href="#L2126">2126</a> 
+<a class="jxr_linenumber" name="L2127" href="#L2127">2127</a> 	<em class="jxr_comment">//-----------------------------------------------------------------------------------------------------------------</em>
+<a class="jxr_linenumber" name="L2128" href="#L2128">2128</a> 	<em class="jxr_comment">// Primitive array creation methods</em>
+<a class="jxr_linenumber" name="L2129" href="#L2129">2129</a> 	<em class="jxr_comment">//-----------------------------------------------------------------------------------------------------------------</em>
+<a class="jxr_linenumber" name="L2130" href="#L2130">2130</a> 
+<a class="jxr_linenumber" name="L2131" href="#L2131">2131</a> 	<em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L2132" href="#L2132">2132</a> <em class="jxr_javadoccomment">	 * Creates a new {@link TreeSet} from the specified collection.</em>
+<a class="jxr_linenumber" name="L2133" href="#L2133">2133</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L2134" href="#L2134">2134</a> <em class="jxr_javadoccomment">	 * @param &lt;E&gt; The element type.</em>
+<a class="jxr_linenumber" name="L2135" href="#L2135">2135</a> <em class="jxr_javadoccomment">	 * @param value The value to copy from.</em>
+<a class="jxr_linenumber" name="L2136" href="#L2136">2136</a> <em class="jxr_javadoccomment">	 * @return A new {@link TreeSet}, or &lt;jk&gt;null&lt;/jk&gt; if the input was null.</em>
+<a class="jxr_linenumber" name="L2137" href="#L2137">2137</a> <em class="jxr_javadoccomment">	 */</em>
+<a class="jxr_linenumber" name="L2138" href="#L2138">2138</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;E&gt; TreeSet&lt;E&gt; toSortedSet(Collection&lt;E&gt; value) {
+<a class="jxr_linenumber" name="L2139" href="#L2139">2139</a> 		<strong class="jxr_keyword">if</strong> (value == <strong class="jxr_keyword">null</strong>)
+<a class="jxr_linenumber" name="L2140" href="#L2140">2140</a> 			<strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="L2141" href="#L2141">2141</a> 		<strong class="jxr_keyword">var</strong> l = <strong class="jxr_keyword">new</strong> TreeSet&lt;E&gt;();
+<a class="jxr_linenumber" name="L2142" href="#L2142">2142</a> 		value.forEach(x -&gt; l.add(x));
+<a class="jxr_linenumber" name="L2143" href="#L2143">2143</a> 		<strong class="jxr_keyword">return</strong> l;
+<a class="jxr_linenumber" name="L2144" href="#L2144">2144</a> 	}
+<a class="jxr_linenumber" name="L2145" href="#L2145">2145</a> 
+<a class="jxr_linenumber" name="L2146" href="#L2146">2146</a> 	<em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L2147" href="#L2147">2147</a> <em class="jxr_javadoccomment">	 * Creates a new {@link TreeSet} from the specified collection.</em>
+<a class="jxr_linenumber" name="L2148" href="#L2148">2148</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L2149" href="#L2149">2149</a> <em class="jxr_javadoccomment">	 * @param &lt;E&gt; The element type.</em>
+<a class="jxr_linenumber" name="L2150" href="#L2150">2150</a> <em class="jxr_javadoccomment">	 * @param value The value to copy from.</em>
+<a class="jxr_linenumber" name="L2151" href="#L2151">2151</a> <em class="jxr_javadoccomment">	 * @param nullIfEmpty If &lt;jk&gt;true&lt;/jk&gt; returns &lt;jk&gt;null&lt;/jk&gt; if the collection is empty.</em>
+<a class="jxr_linenumber" name="L2152" href="#L2152">2152</a> <em class="jxr_javadoccomment">	 * @return A new {@link TreeSet}, or &lt;jk&gt;null&lt;/jk&gt; if the input was null.</em>
+<a class="jxr_linenumber" name="L2153" href="#L2153">2153</a> <em class="jxr_javadoccomment">	 */</em>
+<a class="jxr_linenumber" name="L2154" href="#L2154">2154</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;E&gt; TreeSet&lt;E&gt; toSortedSet(Collection&lt;E&gt; value, <strong class="jxr_keyword">boolean</strong> nullIfEmpty) {
+<a class="jxr_linenumber" name="L2155" href="#L2155">2155</a> 		<strong class="jxr_keyword">if</strong> (value == <strong class="jxr_keyword">null</strong> || (nullIfEmpty &amp;&amp; value.isEmpty()))
+<a class="jxr_linenumber" name="L2156" href="#L2156">2156</a> 			<strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="L2157" href="#L2157">2157</a> 		<strong class="jxr_keyword">var</strong> l = <strong class="jxr_keyword">new</strong> TreeSet&lt;E&gt;();
+<a class="jxr_linenumber" name="L2158" href="#L2158">2158</a> 		value.forEach(x -&gt; l.add(x));
+<a class="jxr_linenumber" name="L2159" href="#L2159">2159</a> 		<strong class="jxr_keyword">return</strong> l;
+<a class="jxr_linenumber" name="L2160" href="#L2160">2160</a> 	}
+<a class="jxr_linenumber" name="L2161" href="#L2161">2161</a> 
+<a class="jxr_linenumber" name="L2162" href="#L2162">2162</a> 	<em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L2163" href="#L2163">2163</a> <em class="jxr_javadoccomment">	 * Creates a new {@link TreeSet} containing a copy of the specified set.</em>
+<a class="jxr_linenumber" name="L2164" href="#L2164">2164</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L2165" href="#L2165">2165</a> <em class="jxr_javadoccomment">	 * @param &lt;T&gt; The element type.</em>
+<a class="jxr_linenumber" name="L2166" href="#L2166">2166</a> <em class="jxr_javadoccomment">	 * @param copyFrom The set to copy from.</em>
+<a class="jxr_linenumber" name="L2167" href="#L2167">2167</a> <em class="jxr_javadoccomment">	 * @return A new {@link TreeSet}, or &lt;jk&gt;null&lt;/jk&gt; if the set was &lt;jk&gt;null&lt;/jk&gt;.</em>
+<a class="jxr_linenumber" name="L2168" href="#L2168">2168</a> <em class="jxr_javadoccomment">	 */</em>
+<a class="jxr_linenumber" name="L2169" href="#L2169">2169</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;T&gt; TreeSet&lt;T&gt; toSortedSet(Set&lt;T&gt; copyFrom) {
+<a class="jxr_linenumber" name="L2170" href="#L2170">2170</a> 		<strong class="jxr_keyword">return</strong> copyFrom == <strong class="jxr_keyword">null</strong> ? <strong class="jxr_keyword">null</strong> : <strong class="jxr_keyword">new</strong> TreeSet&lt;&gt;(copyFrom);
+<a class="jxr_linenumber" name="L2171" href="#L2171">2171</a> 	}
+<a class="jxr_linenumber" name="L2172" href="#L2172">2172</a> 
+<a class="jxr_linenumber" name="L2173" href="#L2173">2173</a> 	<em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L2174" href="#L2174">2174</a> <em class="jxr_javadoccomment">	 * Converts an array to a stream of objects.</em>
+<a class="jxr_linenumber" name="L2175" href="#L2175">2175</a> <em class="jxr_javadoccomment">	 * @param array The array to convert.</em>
+<a class="jxr_linenumber" name="L2176" href="#L2176">2176</a> <em class="jxr_javadoccomment">	 * @return A new stream.</em>
+<a class="jxr_linenumber" name="L2177" href="#L2177">2177</a> <em class="jxr_javadoccomment">	 */</em>
+<a class="jxr_linenumber" name="L2178" href="#L2178">2178</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> Stream&lt;Object&gt; toStream(Object array) {
+<a class="jxr_linenumber" name="L2179" href="#L2179">2179</a> 		assertArg(isArray(array), <span class="jxr_string">"Arg was not an array.  Type: {0}"</span>, cn(array));
+<a class="jxr_linenumber" name="L2180" href="#L2180">2180</a> 		<strong class="jxr_keyword">var</strong> length = Array.getLength(array);
+<a class="jxr_linenumber" name="L2181" href="#L2181">2181</a> 		<strong class="jxr_keyword">return</strong> IntStream.range(0, length).mapToObj(i -&gt; Array.get(array, i));
+<a class="jxr_linenumber" name="L2182" href="#L2182">2182</a> 	}
+<a class="jxr_linenumber" name="L2183" href="#L2183">2183</a> 
+<a class="jxr_linenumber" name="L2184" href="#L2184">2184</a> 	<em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L2185" href="#L2185">2185</a> <em class="jxr_javadoccomment">	 * Converts the specified collection to an array of strings.</em>
+<a class="jxr_linenumber" name="L2186" href="#L2186">2186</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L2187" href="#L2187">2187</a> <em class="jxr_javadoccomment">	 * &lt;p&gt;</em>
+<a class="jxr_linenumber" name="L2188" href="#L2188">2188</a> <em class="jxr_javadoccomment">	 * Entries are converted to strings using {@link #toString()}.</em>
+<a class="jxr_linenumber" name="L2189" href="#L2189">2189</a> <em class="jxr_javadoccomment">	 * &lt;jk&gt;null&lt;/jk&gt; values remain &lt;jk&gt;null&lt;/jk&gt;.</em>
+<a class="jxr_linenumber" name="L2190" href="#L2190">2190</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L2191" href="#L2191">2191</a> <em class="jxr_javadoccomment">	 * @param c The collection to convert.</em>
+<a class="jxr_linenumber" name="L2192" href="#L2192">2192</a> <em class="jxr_javadoccomment">	 * @return The collection as a string array.</em>
+<a class="jxr_linenumber" name="L2193" href="#L2193">2193</a> <em class="jxr_javadoccomment">	 */</em>
+<a class="jxr_linenumber" name="L2194" href="#L2194">2194</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> String[] toStringArray(Collection&lt;?&gt; c) {
+<a class="jxr_linenumber" name="L2195" href="#L2195">2195</a> 		<strong class="jxr_keyword">var</strong> r = <strong class="jxr_keyword">new</strong> String[c.size()];
+<a class="jxr_linenumber" name="L2196" href="#L2196">2196</a> 		<strong class="jxr_keyword">var</strong> i = 0;
+<a class="jxr_linenumber" name="L2197" href="#L2197">2197</a> 		<strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">var</strong> o : c)
+<a class="jxr_linenumber" name="L2198" href="#L2198">2198</a> 			r[i++] = s(o);
+<a class="jxr_linenumber" name="L2199" href="#L2199">2199</a> 		<strong class="jxr_keyword">return</strong> r;
+<a class="jxr_linenumber" name="L2200" href="#L2200">2200</a> 	}
+<a class="jxr_linenumber" name="L2201" href="#L2201">2201</a> 
+<a class="jxr_linenumber" name="L2202" href="#L2202">2202</a> 	<em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L2203" href="#L2203">2203</a> <em class="jxr_javadoccomment">	 * Traverses all elements in the specified object and executes a consumer for it.</em>
+<a class="jxr_linenumber" name="L2204" href="#L2204">2204</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L2205" href="#L2205">2205</a> <em class="jxr_javadoccomment">	 * @param &lt;T&gt; The element type.</em>
+<a class="jxr_linenumber" name="L2206" href="#L2206">2206</a> <em class="jxr_javadoccomment">	 * @param o The object to traverse.</em>
+<a class="jxr_linenumber" name="L2207" href="#L2207">2207</a> <em class="jxr_javadoccomment">	 * @param c The consumer of the objects.</em>
+<a class="jxr_linenumber" name="L2208" href="#L2208">2208</a> <em class="jxr_javadoccomment">	 */</em>
+<a class="jxr_linenumber" name="L2209" href="#L2209">2209</a> 	@SuppressWarnings(<span class="jxr_string">"unchecked"</span>)
+<a class="jxr_linenumber" name="L2210" href="#L2210">2210</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;T&gt; <strong class="jxr_keyword">void</strong> traverse(Object o, Consumer&lt;T&gt; c) {
+<a class="jxr_linenumber" name="L2211" href="#L2211">2211</a> 		<strong class="jxr_keyword">if</strong> (o == <strong class="jxr_keyword">null</strong>)
+<a class="jxr_linenumber" name="L2212" href="#L2212">2212</a> 			<strong class="jxr_keyword">return</strong>;
+<a class="jxr_linenumber" name="L2213" href="#L2213">2213</a> 		<strong class="jxr_keyword">if</strong> (o instanceof Iterable&lt;?&gt; o2)
+<a class="jxr_linenumber" name="L2214" href="#L2214">2214</a> 			o2.forEach(x -&gt; traverse(x, c));
+<a class="jxr_linenumber" name="L2215" href="#L2215">2215</a> 		<strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (o instanceof Stream&lt;?&gt; o2)
+<a class="jxr_linenumber" name="L2216" href="#L2216">2216</a> 			o2.forEach(x -&gt; traverse(x, c));
+<a class="jxr_linenumber" name="L2217" href="#L2217">2217</a> 		<strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (isArray(o))
+<a class="jxr_linenumber" name="L2218" href="#L2218">2218</a> 			toStream(o).forEach(x -&gt; traverse(x, c));
+<a class="jxr_linenumber" name="L2219" href="#L2219">2219</a> 		<strong class="jxr_keyword">else</strong>
+<a class="jxr_linenumber" name="L2220" href="#L2220">2220</a> 			c.accept((T)o);
+<a class="jxr_linenumber" name="L2221" href="#L2221">2221</a> 	}
+<a class="jxr_linenumber" name="L2222" href="#L2222">2222</a> 
+<a class="jxr_linenumber" name="L2223" href="#L2223">2223</a> 	<em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L2224" href="#L2224">2224</a> <em class="jxr_javadoccomment">	 * Creates an unmodifiable view of the specified list.</em>
+<a class="jxr_linenumber" name="L2225" href="#L2225">2225</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L2226" href="#L2226">2226</a> <em class="jxr_javadoccomment">	 * &lt;p&gt;This is a null-safe wrapper around {@link Collections#unmodifiableList(List)}.&lt;/p&gt;</em>
+<a class="jxr_linenumber" name="L2227" href="#L2227">2227</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L2228" href="#L2228">2228</a> <em class="jxr_javadoccomment">	 * @param &lt;T&gt; The element type.</em>
+<a class="jxr_linenumber" name="L2229" href="#L2229">2229</a> <em class="jxr_javadoccomment">	 * @param value The list to make unmodifiable. Can be null.</em>
+<a class="jxr_linenumber" name="L2230" href="#L2230">2230</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="L2231" href="#L2231">2231</a> <em class="jxr_javadoccomment">	 */</em>
+<a class="jxr_linenumber" name="L2232" href="#L2232">2232</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;T&gt; List&lt;T&gt; u(List&lt;? <strong class="jxr_keyword">extends</strong> T&gt; value) {
+<a class="jxr_linenumber" name="L2233" href="#L2233">2233</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="L2234" href="#L2234">2234</a> 	}
+<a class="jxr_linenumber" name="L2235" href="#L2235">2235</a> 
+<a class="jxr_linenumber" name="L2236" href="#L2236">2236</a> 	<em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L2237" href="#L2237">2237</a> <em class="jxr_javadoccomment">	 * Creates an unmodifiable view of the specified map.</em>
+<a class="jxr_linenumber" name="L2238" href="#L2238">2238</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L2239" href="#L2239">2239</a> <em class="jxr_javadoccomment">	 * &lt;p&gt;This is a null-safe wrapper around {@link Collections#unmodifiableMap(Map)}.&lt;/p&gt;</em>
+<a class="jxr_linenumber" name="L2240" href="#L2240">2240</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L2241" href="#L2241">2241</a> <em class="jxr_javadoccomment">	 * @param &lt;K&gt; The key type.</em>
+<a class="jxr_linenumber" name="L2242" href="#L2242">2242</a> <em class="jxr_javadoccomment">	 * @param &lt;V&gt; The value type.</em>
+<a class="jxr_linenumber" name="L2243" href="#L2243">2243</a> <em class="jxr_javadoccomment">	 * @param value The map to make unmodifiable. Can be null.</em>
+<a class="jxr_linenumber" name="L2244" href="#L2244">2244</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="L2245" href="#L2245">2245</a> <em class="jxr_javadoccomment">	 */</em>
+<a class="jxr_linenumber" name="L2246" href="#L2246">2246</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;K,V&gt; Map&lt;K,V&gt; u(Map&lt;? <strong class="jxr_keyword">extends</strong> K,? <strong class="jxr_keyword">extends</strong> V&gt; value) {
+<a class="jxr_linenumber" name="L2247" href="#L2247">2247</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="L2248" href="#L2248">2248</a> 	}
+<a class="jxr_linenumber" name="L2249" href="#L2249">2249</a> 
+<a class="jxr_linenumber" name="L2250" href="#L2250">2250</a> 	<em class="jxr_comment">//-----------------------------------------------------------------------------------------------------------------</em>
+<a class="jxr_linenumber" name="L2251" href="#L2251">2251</a> 	<em class="jxr_comment">// Stream utilities</em>
+<a class="jxr_linenumber" name="L2252" href="#L2252">2252</a> 	<em class="jxr_comment">//-----------------------------------------------------------------------------------------------------------------</em>
+<a class="jxr_linenumber" name="L2253" href="#L2253">2253</a> 
+<a class="jxr_linenumber" name="L2254" href="#L2254">2254</a> 	<em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L2255" href="#L2255">2255</a> <em class="jxr_javadoccomment">	 * Creates an unmodifiable view of the specified set.</em>
+<a class="jxr_linenumber" name="L2256" href="#L2256">2256</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L2257" href="#L2257">2257</a> <em class="jxr_javadoccomment">	 * &lt;p&gt;This is a null-safe wrapper around {@link Collections#unmodifiableSet(Set)}.&lt;/p&gt;</em>
+<a class="jxr_linenumber" name="L2258" href="#L2258">2258</a> <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L2259" href="#L2259">2259</a> <em class="jxr_javadoccomment">	 * @param &lt;T&gt; The element type.</em>
+<a class="jxr_linenumber" name="L2260" href="#L2260">2260</a> <em class="jxr_javadoccomment">	 * @param value The set to make unmodifiable. Can be null.</em>
+<a class="jxr_linenumber" name="L2261" href="#L2261">2261</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="L2262" href="#L2262">2262</a> <em class="jxr_javadoccomment">	 */</em>
+<a class="jxr_linenumber" name="L2263" href="#L2263">2263</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> &lt;T&gt; Set&lt;T&gt; u(Set&lt;? <strong class="jxr_keyword">extends</strong> T&gt; value) {
+<a class="jxr_linenumber" name="L2264" href="#L2264">2264</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="L2265" href="#L2265">2265</a> 	}
+<a class="jxr_linenumber" name="L2266" href="#L2266">2266</a> 
+<a class="jxr_linenumber" name="L2267" href="#L2267">2267</a> 	<strong class="jxr_keyword">private</strong> <a name="CollectionUtils" href="../../../../../org/apache/juneau/commons/utils/CollectionUtils.html#CollectionUtils">CollectionUtils</a>() {}
+<a class="jxr_linenumber" name="L2268" href="#L2268">2268</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/commons/utils/StringUtils.html b/site/xref/org/apache/juneau/commons/utils/StringUtils.html
index 08b8d06c5f..947557dc40 100644
--- a/site/xref/org/apache/juneau/commons/utils/StringUtils.html
+++ b/site/xref/org/apache/juneau/commons/utils/StringUtils.html
@@ -6417,7 +6417,7 @@
 <a class="jxr_linenumber" name="L6409" href="#L6409">6409</a> 		<strong class="jxr_keyword">if</strong> (s == <strong class="jxr_keyword">null</strong>)
 <a class="jxr_linenumber" name="L6410" href="#L6410">6410</a> 			<strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;  <em class="jxr_comment">// NOSONAR - Intentional.</em>
 <a class="jxr_linenumber" name="L6411" href="#L6411">6411</a> 		<strong class="jxr_keyword">if</strong> (isEmpty(s))
-<a class="jxr_linenumber" name="L6412" href="#L6412">6412</a> 			<strong class="jxr_keyword">return</strong> Collections.emptyMap();
+<a class="jxr_linenumber" name="L6412" href="#L6412">6412</a> 			<strong class="jxr_keyword">return</strong> mape();
 <a class="jxr_linenumber" name="L6413" href="#L6413">6413</a> 
 <a class="jxr_linenumber" name="L6414" href="#L6414">6414</a> 		<strong class="jxr_keyword">var</strong> m = <strong class="jxr_keyword">new</strong> LinkedHashMap&lt;String,String&gt;();
 <a class="jxr_linenumber" name="L6415" href="#L6415">6415</a> 
diff --git a/site/xref/org/apache/juneau/rest/RestSession.html b/site/xref/org/apache/juneau/rest/RestSession.html
index f89761880b..1765d4a985 100644
--- a/site/xref/org/apache/juneau/rest/RestSession.html
+++ b/site/xref/org/apache/juneau/rest/RestSession.html
@@ -388,7 +388,7 @@
 <a class="jxr_linenumber" name="L380" href="#L380">380</a> 	@SuppressWarnings(<span class="jxr_string">"unchecked"</span>)
 <a class="jxr_linenumber" name="L381" href="#L381">381</a> 	<strong class="jxr_keyword">public</strong> Map&lt;String,String&gt; getPathVars() {
 <a class="jxr_linenumber" name="L382" href="#L382">382</a> 		<strong class="jxr_keyword">var</strong> m = (Map&lt;String,String&gt;)req.getAttribute(REST_PATHVARS_ATTR);
-<a class="jxr_linenumber" name="L383" href="#L383">383</a> 		<strong class="jxr_keyword">return</strong> m == <strong class="jxr_keyword">null</strong> ? Collections.emptyMap() : m;
+<a class="jxr_linenumber" name="L383" href="#L383">383</a> 		<strong class="jxr_keyword">return</strong> m == <strong class="jxr_keyword">null</strong> ? mape() : m;
 <a class="jxr_linenumber" name="L384" href="#L384">384</a> 	}
 <a class="jxr_linenumber" name="L385" href="#L385">385</a> 
 <a class="jxr_linenumber" name="L386" href="#L386">386</a> 	<em class="jxr_javadoccomment">/**</em>
diff --git a/site/xref/org/apache/juneau/rest/httppart/RequestPathParams.html b/site/xref/org/apache/juneau/rest/httppart/RequestPathParams.html
index 0587ff9cc7..1f6d0e94ec 100644
--- a/site/xref/org/apache/juneau/rest/httppart/RequestPathParams.html
+++ b/site/xref/org/apache/juneau/rest/httppart/RequestPathParams.html
@@ -136,7 +136,7 @@
 <a class="jxr_linenumber" name="L128" href="#L128">128</a> 
 <a class="jxr_linenumber" name="L129" href="#L129">129</a> 		<em class="jxr_comment">// Add parameters from parent context if any.</em>
 <a class="jxr_linenumber" name="L130" href="#L130">130</a> 		@SuppressWarnings(<span class="jxr_string">"unchecked"</span>)
-<a class="jxr_linenumber" name="L131" href="#L131">131</a> 		<strong class="jxr_keyword">var</strong> parentVars = (Map&lt;String,String&gt;)req.getAttribute(<span class="jxr_string">"juneau.pathVars"</span>).orElse(Collections.emptyMap());
+<a class="jxr_linenumber" name="L131" href="#L131">131</a> 		<strong class="jxr_keyword">var</strong> parentVars = (Map&lt;String,String&gt;)req.getAttribute(<span class="jxr_string">"juneau.pathVars"</span>).orElse(mape());
 <a class="jxr_linenumber" name="L132" href="#L132">132</a> 		<strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">var</strong> e : parentVars.entrySet())
 <a class="jxr_linenumber" name="L133" href="#L133">133</a> 			add(e.getKey(), e.getValue());
 <a class="jxr_linenumber" name="L134" href="#L134">134</a> 
diff --git a/site/xref/org/apache/juneau/rest/mock/MockPathResolver.html b/site/xref/org/apache/juneau/rest/mock/MockPathResolver.html
index bd598d8f6f..789753e514 100644
--- a/site/xref/org/apache/juneau/rest/mock/MockPathResolver.html
+++ b/site/xref/org/apache/juneau/rest/mock/MockPathResolver.html
@@ -24,227 +24,228 @@
 <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.<strong class="jxr_keyword">rest</strong>.mock;
 <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.commons.utils.StateEnum.*;
-<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.commons.utils.StringUtils.*;
-<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.commons.utils.ThrowableUtils.*;
-<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.commons.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.util.*;
-<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.collections.*;
-<a class="jxr_linenumber" name="L27" href="#L27">27</a>  <strong class="jxr_keyword">import</strong> org.apache.juneau.commons.utils.*;
-<a class="jxr_linenumber" name="L28" href="#L28">28</a>  <strong class="jxr_keyword">import</strong> org.apache.juneau.<strong class="jxr_keyword">rest</strong>.util.*;
-<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"> * Used to resolve incoming URLS to the various URL artifacts of &lt;l&gt;HttpServletRequest&lt;/l&gt;.</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"> * &lt;h5 class='section'&gt;See Also:&lt;/h5&gt;&lt;ul&gt;</em>
-<a class="jxr_linenumber" name="L34" href="#L34">34</a>  <em class="jxr_javadoccomment"> * 	&lt;li class='link'&gt;&lt;a class="doclink" href="<a href="https://juneau.apache.org/docs/topics/JuneauRestMockBasics" target="alexandria_uri">https://juneau.apache.org/docs/topics/JuneauRestMockBasics</a>"&gt;juneau-rest-mock Basics&lt;/a&gt;</em>
-<a class="jxr_linenumber" name="L35" href="#L35">35</a>  <em class="jxr_javadoccomment"> * &lt;/ul&gt;</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>  <strong class="jxr_keyword">class</strong> <a name="MockPathResolver" href="../../../../../org/apache/juneau/rest/mock/MockPathResolver.html#MockPathResolver">MockPathResolver</a> {
-<a class="jxr_linenumber" name="L38" href="#L38">38</a>  
-<a class="jxr_linenumber" name="L39" href="#L39">39</a>  	<strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> String fixSegment(String s, Map&lt;String,Object&gt; pathVars) {
-<a class="jxr_linenumber" name="L40" href="#L40">40</a>  		s = formatNamed(emptyIfNull(s), pathVars);
-<a class="jxr_linenumber" name="L41" href="#L41">41</a>  		<strong class="jxr_keyword">if</strong> (s.isEmpty() || s.equals(<span class="jxr_string">"/"</span>))
-<a class="jxr_linenumber" name="L42" href="#L42">42</a>  			<strong class="jxr_keyword">return</strong> <span class="jxr_string">""</span>;
-<a class="jxr_linenumber" name="L43" href="#L43">43</a>  		s = trimTrailingSlashes(s);
-<a class="jxr_linenumber" name="L44" href="#L44">44</a>  		<strong class="jxr_keyword">if</strong> (s.charAt(0) != '/')
-<a class="jxr_linenumber" name="L45" href="#L45">45</a>  			s = '/' + s;
-<a class="jxr_linenumber" name="L46" href="#L46">46</a>  		<strong class="jxr_keyword">return</strong> s;
-<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>  	<strong class="jxr_keyword">private</strong> String uri, target, contextPath, servletPath, remainder;
-<a class="jxr_linenumber" name="L51" href="#L51">51</a>  
-<a class="jxr_linenumber" name="L52" href="#L52">52</a>  	<strong class="jxr_keyword">private</strong> String error;
-<a class="jxr_linenumber" name="L53" href="#L53">53</a>  
-<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">	 * Constructor.</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">	 * @param target</em>
-<a class="jxr_linenumber" name="L58" href="#L58">58</a>  <em class="jxr_javadoccomment">	 * 	The target portion of the URL (e.g. &lt;js&gt;"<a href="http://localhost" target="alexandria_uri">http://localhost</a>"&lt;/js&gt;).</em>
-<a class="jxr_linenumber" name="L59" href="#L59">59</a>  <em class="jxr_javadoccomment">	 * 	&lt;br&gt;If &lt;jk&gt;null&lt;/jk&gt;, &lt;js&gt;"<a href="http://localhost" target="alexandria_uri">http://localhost</a>"&lt;/js&gt; is assumed.</em>
-<a class="jxr_linenumber" name="L60" href="#L60">60</a>  <em class="jxr_javadoccomment">	 * @param contextPath</em>
-<a class="jxr_linenumber" name="L61" href="#L61">61</a>  <em class="jxr_javadoccomment">	 * 	The context path of the servlet, or &lt;jk&gt;null&lt;/jk&gt; if unknown or doesn't have one.</em>
-<a class="jxr_linenumber" name="L62" href="#L62">62</a>  <em class="jxr_javadoccomment">	 * @param servletPath</em>
-<a class="jxr_linenumber" name="L63" href="#L63">63</a>  <em class="jxr_javadoccomment">	 * 	The servlet path of the servlet, or &lt;jk&gt;null&lt;/jk&gt; if unknown or doesn't have one.</em>
-<a class="jxr_linenumber" name="L64" href="#L64">64</a>  <em class="jxr_javadoccomment">	 * @param pathToResolve</em>
-<a class="jxr_linenumber" name="L65" href="#L65">65</a>  <em class="jxr_javadoccomment">	 * 	The path to resolve.</em>
-<a class="jxr_linenumber" name="L66" href="#L66">66</a>  <em class="jxr_javadoccomment">	 * 	&lt;br&gt;Can be relative to servlet or an absolute path.</em>
-<a class="jxr_linenumber" name="L67" href="#L67">67</a>  <em class="jxr_javadoccomment">	 * @param pathVars</em>
-<a class="jxr_linenumber" name="L68" href="#L68">68</a>  <em class="jxr_javadoccomment">	 * 	Optional path variables to resolve in the context path or servlet path.</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>  	<strong class="jxr_keyword">public</strong> <a name="MockPathResolver" href="../../../../../org/apache/juneau/rest/mock/MockPathResolver.html#MockPathResolver">MockPathResolver</a>(String target, String contextPath, String servletPath, String pathToResolve, Map&lt;String,Object&gt; pathVars) {
-<a class="jxr_linenumber" name="L71" href="#L71">71</a>  		<strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="L72" href="#L72">72</a>  			init(target, contextPath, servletPath, pathToResolve, pathVars);
-<a class="jxr_linenumber" name="L73" href="#L73">73</a>  		} <strong class="jxr_keyword">catch</strong> (Exception e) {
-<a class="jxr_linenumber" name="L74" href="#L74">74</a>  			error = lm(e);
-<a class="jxr_linenumber" name="L75" href="#L75">75</a>  		}
-<a class="jxr_linenumber" name="L76" href="#L76">76</a>  	}
-<a class="jxr_linenumber" name="L77" href="#L77">77</a>  
-<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">	 * Returns the context path of the URL.</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">	 * @return The context path of the URL always starting with &lt;js&gt;'/'&lt;/js&gt;, or an empty string if it doesn't exist.</em>
-<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>  	<strong class="jxr_keyword">public</strong> String getContextPath() { <strong class="jxr_keyword">return</strong> contextPath; }
-<a class="jxr_linenumber" name="L84" href="#L84">84</a>  
-<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">	 * Returns any parsing errors.</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">	 * @return Any parsing errors.</em>
-<a class="jxr_linenumber" name="L89" href="#L89">89</a>  <em class="jxr_javadoccomment">	 */</em>
-<a class="jxr_linenumber" name="L90" href="#L90">90</a>  	<strong class="jxr_keyword">public</strong> String getError() { <strong class="jxr_keyword">return</strong> error; }
-<a class="jxr_linenumber" name="L91" href="#L91">91</a>  
-<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">	 * Returns the remainder of the URL following the context and servlet paths.</em>
-<a class="jxr_linenumber" name="L94" href="#L94">94</a>  <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L95" href="#L95">95</a>  <em class="jxr_javadoccomment">	 * @return The remainder of the URL.</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>  	<strong class="jxr_keyword">public</strong> String getRemainder() { <strong class="jxr_keyword">return</strong> remainder; }
-<a class="jxr_linenumber" name="L98" href="#L98">98</a>  
-<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">	 * Returns the servlet path of the URL.</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">	 * @return The servlet path of the URL always starting with &lt;js&gt;'/'&lt;/js&gt;, or an empty string if it doesn't exist.</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> 	<strong class="jxr_keyword">public</strong> String getServletPath() { <strong class="jxr_keyword">return</strong> servletPath; }
-<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 just the hostname portion of the URL.</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">	 * @return The hostname portion of the URL.</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> 	<strong class="jxr_keyword">public</strong> String getTarget() { <strong class="jxr_keyword">return</strong> target; }
-<a class="jxr_linenumber" name="L112" href="#L112">112</a> 
-<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">	 * Returns the fully-qualified URL.</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">	 * @return The fully-qualified URL.</em>
-<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> 	<strong class="jxr_keyword">public</strong> String getURI() { <strong class="jxr_keyword">return</strong> uri; }
-<a class="jxr_linenumber" name="L119" href="#L119">119</a> 
-<a class="jxr_linenumber" name="L120" href="#L120">120</a> 	@Override
-<a class="jxr_linenumber" name="L121" href="#L121">121</a> 	<strong class="jxr_keyword">public</strong> String toString() {
-<a class="jxr_linenumber" name="L122" href="#L122">122</a> 		<em class="jxr_comment">// @formatter:off</em>
-<a class="jxr_linenumber" name="L123" href="#L123">123</a> 		<strong class="jxr_keyword">return</strong> JsonMap.create()
-<a class="jxr_linenumber" name="L124" href="#L124">124</a> 			.append(<span class="jxr_string">"uri"</span>, uri)
-<a class="jxr_linenumber" name="L125" href="#L125">125</a> 			.append(<span class="jxr_string">"contextPath"</span>, contextPath)
-<a class="jxr_linenumber" name="L126" href="#L126">126</a> 			.append(<span class="jxr_string">"servletPath"</span>, servletPath)
-<a class="jxr_linenumber" name="L127" href="#L127">127</a> 			.append(<span class="jxr_string">"remainder"</span>, remainder)
-<a class="jxr_linenumber" name="L128" href="#L128">128</a> 			.append(<span class="jxr_string">"target"</span>, target)
-<a class="jxr_linenumber" name="L129" href="#L129">129</a> 			.append(<span class="jxr_string">"error"</span>, error)
-<a class="jxr_linenumber" name="L130" href="#L130">130</a> 			.toString();
-<a class="jxr_linenumber" name="L131" href="#L131">131</a> 		<em class="jxr_comment">// @formatter:on</em>
-<a class="jxr_linenumber" name="L132" href="#L132">132</a> 	}
-<a class="jxr_linenumber" name="L133" href="#L133">133</a> 
-<a class="jxr_linenumber" name="L134" href="#L134">134</a> 	<strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> init(String target, String contextPath, String servletPath, String pathToResolve, Map&lt;String,Object&gt; pathVars) {
-<a class="jxr_linenumber" name="L135" href="#L135">135</a> 
-<a class="jxr_linenumber" name="L136" href="#L136">136</a> 		target = trimTrailingSlashes(emptyIfNull(target));
-<a class="jxr_linenumber" name="L137" href="#L137">137</a> 		<strong class="jxr_keyword">if</strong> (target.isEmpty())
-<a class="jxr_linenumber" name="L138" href="#L138">138</a> 			target = <span class="jxr_string">"http://localhost"</span>;
-<a class="jxr_linenumber" name="L139" href="#L139">139</a> 
-<a class="jxr_linenumber" name="L140" href="#L140">140</a> 		contextPath = fixSegment(contextPath, pathVars);
-<a class="jxr_linenumber" name="L141" href="#L141">141</a> 		servletPath = fixSegment(servletPath, pathVars);
-<a class="jxr_linenumber" name="L142" href="#L142">142</a> 		pathToResolve = emptyIfNull(pathToResolve);
-<a class="jxr_linenumber" name="L143" href="#L143">143</a> 
-<a class="jxr_linenumber" name="L144" href="#L144">144</a> 		<strong class="jxr_keyword">if</strong> (! (pathToResolve.startsWith(<span class="jxr_string">"http://"</span>) || pathToResolve.startsWith(<span class="jxr_string">"https://"</span>))) {
-<a class="jxr_linenumber" name="L145" href="#L145">145</a> 			pathToResolve = fixSegment(pathToResolve, Collections.emptyMap());
-<a class="jxr_linenumber" name="L146" href="#L146">146</a> 			<strong class="jxr_keyword">this</strong>.uri = target + contextPath + servletPath + pathToResolve;
-<a class="jxr_linenumber" name="L147" href="#L147">147</a> 			<strong class="jxr_keyword">this</strong>.target = target;
-<a class="jxr_linenumber" name="L148" href="#L148">148</a> 			<strong class="jxr_keyword">this</strong>.contextPath = contextPath;
-<a class="jxr_linenumber" name="L149" href="#L149">149</a> 			<strong class="jxr_keyword">this</strong>.servletPath = servletPath;
-<a class="jxr_linenumber" name="L150" href="#L150">150</a> 			<strong class="jxr_keyword">this</strong>.remainder = pathToResolve;
-<a class="jxr_linenumber" name="L151" href="#L151">151</a> 			<strong class="jxr_keyword">return</strong>;
-<a class="jxr_linenumber" name="L152" href="#L152">152</a> 		}
-<a class="jxr_linenumber" name="L153" href="#L153">153</a> 
-<a class="jxr_linenumber" name="L154" href="#L154">154</a> 		<em class="jxr_comment">// Path starts with http[s]: so we have to parse it to resolve variables.</em>
-<a class="jxr_linenumber" name="L155" href="#L155">155</a> 		<strong class="jxr_keyword">this</strong>.uri = pathToResolve;
-<a class="jxr_linenumber" name="L156" href="#L156">156</a> 
-<a class="jxr_linenumber" name="L157" href="#L157">157</a> 		<em class="jxr_comment">// S3 - Found "http://", looking for any character other than '/' (end of target).</em>
-<a class="jxr_linenumber" name="L158" href="#L158">158</a> 		<em class="jxr_comment">// S4 - Found  any character, looking for 3rd '/' (end of target).</em>
-<a class="jxr_linenumber" name="L159" href="#L159">159</a> 		<em class="jxr_comment">// S5 - Found 3rd '/', resolving contextPath.</em>
-<a class="jxr_linenumber" name="L160" href="#L160">160</a> 		<em class="jxr_comment">// S6 - Resolved contextPath, resolving servletPath.</em>
-<a class="jxr_linenumber" name="L161" href="#L161">161</a> 		<em class="jxr_comment">// S7 - Resolved servletPath.</em>
-<a class="jxr_linenumber" name="L162" href="#L162">162</a> 		StateEnum state = S3;
-<a class="jxr_linenumber" name="L163" href="#L163">163</a> 
-<a class="jxr_linenumber" name="L164" href="#L164">164</a> 		<strong class="jxr_keyword">int</strong> cpSegments = countChars(contextPath, '/');
-<a class="jxr_linenumber" name="L165" href="#L165">165</a> 		<strong class="jxr_keyword">int</strong> spSegments = countChars(servletPath, '/');
-<a class="jxr_linenumber" name="L166" href="#L166">166</a> 
-<a class="jxr_linenumber" name="L167" href="#L167">167</a> 		<strong class="jxr_keyword">this</strong>.contextPath = <span class="jxr_string">""</span>;
-<a class="jxr_linenumber" name="L168" href="#L168">168</a> 		<strong class="jxr_keyword">this</strong>.servletPath = <span class="jxr_string">""</span>;
-<a class="jxr_linenumber" name="L169" href="#L169">169</a> 		<strong class="jxr_keyword">this</strong>.remainder = <span class="jxr_string">""</span>;
-<a class="jxr_linenumber" name="L170" href="#L170">170</a> 
-<a class="jxr_linenumber" name="L171" href="#L171">171</a> 		<strong class="jxr_keyword">int</strong> mark = 0;
-<a class="jxr_linenumber" name="L172" href="#L172">172</a> 		<strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">var</strong> i = uri.indexOf(<span class="jxr_string">"://"</span>) + 3; i &lt; uri.length(); i++) {
-<a class="jxr_linenumber" name="L173" href="#L173">173</a> 			<strong class="jxr_keyword">var</strong> c = uri.charAt(i);
-<a class="jxr_linenumber" name="L174" href="#L174">174</a> 			<strong class="jxr_keyword">if</strong> (state == S3) {
-<a class="jxr_linenumber" name="L175" href="#L175">175</a> 				<strong class="jxr_keyword">if</strong> (c != '/')
-<a class="jxr_linenumber" name="L176" href="#L176">176</a> 					state = S4;
-<a class="jxr_linenumber" name="L177" href="#L177">177</a> 				<strong class="jxr_keyword">else</strong>
-<a class="jxr_linenumber" name="L178" href="#L178">178</a> 					<strong class="jxr_keyword">break</strong>;
-<a class="jxr_linenumber" name="L179" href="#L179">179</a> 			} <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (state == S4) {
-<a class="jxr_linenumber" name="L180" href="#L180">180</a> 				<strong class="jxr_keyword">if</strong> (c == '/') {
-<a class="jxr_linenumber" name="L181" href="#L181">181</a> 					<strong class="jxr_keyword">this</strong>.target = uri.substring(0, i);
-<a class="jxr_linenumber" name="L182" href="#L182">182</a> 					state = S5;
-<a class="jxr_linenumber" name="L183" href="#L183">183</a> 					<strong class="jxr_keyword">if</strong> (contextPath.isEmpty()) {
-<a class="jxr_linenumber" name="L184" href="#L184">184</a> 						state = S6;
-<a class="jxr_linenumber" name="L185" href="#L185">185</a> 						<strong class="jxr_keyword">if</strong> (servletPath.isEmpty()) {
-<a class="jxr_linenumber" name="L186" href="#L186">186</a> 							state = S7;
-<a class="jxr_linenumber" name="L187" href="#L187">187</a> 						}
-<a class="jxr_linenumber" name="L188" href="#L188">188</a> 					}
-<a class="jxr_linenumber" name="L189" href="#L189">189</a> 					mark = i;
-<a class="jxr_linenumber" name="L190" href="#L190">190</a> 				}
-<a class="jxr_linenumber" name="L191" href="#L191">191</a> 			} <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (state == S5) {
-<a class="jxr_linenumber" name="L192" href="#L192">192</a> 				<strong class="jxr_keyword">if</strong> (c == '/') {
-<a class="jxr_linenumber" name="L193" href="#L193">193</a> 					cpSegments--;
-<a class="jxr_linenumber" name="L194" href="#L194">194</a> 					<strong class="jxr_keyword">if</strong> (cpSegments == 0) {
-<a class="jxr_linenumber" name="L195" href="#L195">195</a> 						<strong class="jxr_keyword">this</strong>.contextPath = uri.substring(mark, i);
-<a class="jxr_linenumber" name="L196" href="#L196">196</a> 						mark = i;
-<a class="jxr_linenumber" name="L197" href="#L197">197</a> 						state = S6;
-<a class="jxr_linenumber" name="L198" href="#L198">198</a> 						<strong class="jxr_keyword">if</strong> (servletPath.isEmpty()) {
-<a class="jxr_linenumber" name="L199" href="#L199">199</a> 							state = S7;
-<a class="jxr_linenumber" name="L200" href="#L200">200</a> 						}
-<a class="jxr_linenumber" name="L201" href="#L201">201</a> 					}
-<a class="jxr_linenumber" name="L202" href="#L202">202</a> 				}
-<a class="jxr_linenumber" name="L203" href="#L203">203</a> 			} <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (state == S6) {
-<a class="jxr_linenumber" name="L204" href="#L204">204</a> 				<strong class="jxr_keyword">if</strong> (c == '/') {
-<a class="jxr_linenumber" name="L205" href="#L205">205</a> 					spSegments--;
-<a class="jxr_linenumber" name="L206" href="#L206">206</a> 					<strong class="jxr_keyword">if</strong> (spSegments == 0) {
-<a class="jxr_linenumber" name="L207" href="#L207">207</a> 						<strong class="jxr_keyword">this</strong>.servletPath = uri.substring(mark, i);
-<a class="jxr_linenumber" name="L208" href="#L208">208</a> 						mark = i;
-<a class="jxr_linenumber" name="L209" href="#L209">209</a> 						state = S7;
-<a class="jxr_linenumber" name="L210" href="#L210">210</a> 					}
-<a class="jxr_linenumber" name="L211" href="#L211">211</a> 				}
-<a class="jxr_linenumber" name="L212" href="#L212">212</a> 			}
-<a class="jxr_linenumber" name="L213" href="#L213">213</a> 		}
-<a class="jxr_linenumber" name="L214" href="#L214">214</a> 
-<a class="jxr_linenumber" name="L215" href="#L215">215</a> 		<strong class="jxr_keyword">if</strong> (state == S4) {
-<a class="jxr_linenumber" name="L216" href="#L216">216</a> 			<strong class="jxr_keyword">this</strong>.target = uri;
-<a class="jxr_linenumber" name="L217" href="#L217">217</a> 		} <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (state == S5) {
-<a class="jxr_linenumber" name="L218" href="#L218">218</a> 			<strong class="jxr_keyword">this</strong>.contextPath = uri.substring(mark);
-<a class="jxr_linenumber" name="L219" href="#L219">219</a> 		} <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (state == S6) {
-<a class="jxr_linenumber" name="L220" href="#L220">220</a> 			<strong class="jxr_keyword">this</strong>.servletPath = uri.substring(mark);
-<a class="jxr_linenumber" name="L221" href="#L221">221</a> 		} <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (state == S7) {
-<a class="jxr_linenumber" name="L222" href="#L222">222</a> 			<strong class="jxr_keyword">this</strong>.remainder = uri.substring(mark);
-<a class="jxr_linenumber" name="L223" href="#L223">223</a> 		} <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="L224" href="#L224">224</a> 			<strong class="jxr_keyword">throw</strong> rex(<span class="jxr_string">"Invalid URI pattern encountered:  {0}"</span>, uri);
-<a class="jxr_linenumber" name="L225" href="#L225">225</a> 		}
-<a class="jxr_linenumber" name="L226" href="#L226">226</a> 
-<a class="jxr_linenumber" name="L227" href="#L227">227</a> 		<strong class="jxr_keyword">if</strong> (! contextPath.isEmpty()) {
-<a class="jxr_linenumber" name="L228" href="#L228">228</a> 			<strong class="jxr_keyword">var</strong> p = UrlPathMatcher.of(contextPath);
-<a class="jxr_linenumber" name="L229" href="#L229">229</a> 			<strong class="jxr_keyword">if</strong> (p.match(UrlPath.of(<strong class="jxr_keyword">this</strong>.contextPath)) == <strong class="jxr_keyword">null</strong>)
-<a class="jxr_linenumber" name="L230" href="#L230">230</a> 				<strong class="jxr_keyword">throw</strong> rex(<span class="jxr_string">"Context path [{0}] not found in URI:  {1}"</span>, contextPath, uri);
-<a class="jxr_linenumber" name="L231" href="#L231">231</a> 		}
-<a class="jxr_linenumber" name="L232" href="#L232">232</a> 
-<a class="jxr_linenumber" name="L233" href="#L233">233</a> 		<strong class="jxr_keyword">if</strong> (! servletPath.isEmpty()) {
-<a class="jxr_linenumber" name="L234" href="#L234">234</a> 			<strong class="jxr_keyword">var</strong> p = UrlPathMatcher.of(servletPath);
-<a class="jxr_linenumber" name="L235" href="#L235">235</a> 			<strong class="jxr_keyword">if</strong> (p.match(UrlPath.of(<strong class="jxr_keyword">this</strong>.servletPath)) == <strong class="jxr_keyword">null</strong>)
-<a class="jxr_linenumber" name="L236" href="#L236">236</a> 				<strong class="jxr_keyword">throw</strong> rex(<span class="jxr_string">"Servlet path [{0}] not found in URI:  {1}"</span>, servletPath, uri);
-<a class="jxr_linenumber" name="L237" href="#L237">237</a> 		}
-<a class="jxr_linenumber" name="L238" href="#L238">238</a> 	}
-<a class="jxr_linenumber" name="L239" href="#L239">239</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.commons.utils.CollectionUtils.*;
+<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.commons.utils.StateEnum.*;
+<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.commons.utils.StringUtils.*;
+<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.commons.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.commons.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.util.*;
+<a class="jxr_linenumber" name="L26" href="#L26">26</a>  
+<a class="jxr_linenumber" name="L27" href="#L27">27</a>  <strong class="jxr_keyword">import</strong> org.apache.juneau.collections.*;
+<a class="jxr_linenumber" name="L28" href="#L28">28</a>  <strong class="jxr_keyword">import</strong> org.apache.juneau.commons.utils.*;
+<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <strong class="jxr_keyword">import</strong> org.apache.juneau.<strong class="jxr_keyword">rest</strong>.util.*;
+<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"> * Used to resolve incoming URLS to the various URL artifacts of &lt;l&gt;HttpServletRequest&lt;/l&gt;.</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"> * &lt;h5 class='section'&gt;See Also:&lt;/h5&gt;&lt;ul&gt;</em>
+<a class="jxr_linenumber" name="L35" href="#L35">35</a>  <em class="jxr_javadoccomment"> * 	&lt;li class='link'&gt;&lt;a class="doclink" href="<a href="https://juneau.apache.org/docs/topics/JuneauRestMockBasics" target="alexandria_uri">https://juneau.apache.org/docs/topics/JuneauRestMockBasics</a>"&gt;juneau-rest-mock Basics&lt;/a&gt;</em>
+<a class="jxr_linenumber" name="L36" href="#L36">36</a>  <em class="jxr_javadoccomment"> * &lt;/ul&gt;</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">class</strong> <a name="MockPathResolver" href="../../../../../org/apache/juneau/rest/mock/MockPathResolver.html#MockPathResolver">MockPathResolver</a> {
+<a class="jxr_linenumber" name="L39" href="#L39">39</a>  
+<a class="jxr_linenumber" name="L40" href="#L40">40</a>  	<strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> String fixSegment(String s, Map&lt;String,Object&gt; pathVars) {
+<a class="jxr_linenumber" name="L41" href="#L41">41</a>  		s = formatNamed(emptyIfNull(s), pathVars);
+<a class="jxr_linenumber" name="L42" href="#L42">42</a>  		<strong class="jxr_keyword">if</strong> (s.isEmpty() || s.equals(<span class="jxr_string">"/"</span>))
+<a class="jxr_linenumber" name="L43" href="#L43">43</a>  			<strong class="jxr_keyword">return</strong> <span class="jxr_string">""</span>;
+<a class="jxr_linenumber" name="L44" href="#L44">44</a>  		s = trimTrailingSlashes(s);
+<a class="jxr_linenumber" name="L45" href="#L45">45</a>  		<strong class="jxr_keyword">if</strong> (s.charAt(0) != '/')
+<a class="jxr_linenumber" name="L46" href="#L46">46</a>  			s = '/' + s;
+<a class="jxr_linenumber" name="L47" href="#L47">47</a>  		<strong class="jxr_keyword">return</strong> s;
+<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>  	<strong class="jxr_keyword">private</strong> String uri, target, contextPath, servletPath, remainder;
+<a class="jxr_linenumber" name="L52" href="#L52">52</a>  
+<a class="jxr_linenumber" name="L53" href="#L53">53</a>  	<strong class="jxr_keyword">private</strong> String error;
+<a class="jxr_linenumber" name="L54" href="#L54">54</a>  
+<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">	 * Constructor.</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">	 * @param target</em>
+<a class="jxr_linenumber" name="L59" href="#L59">59</a>  <em class="jxr_javadoccomment">	 * 	The target portion of the URL (e.g. &lt;js&gt;"<a href="http://localhost" target="alexandria_uri">http://localhost</a>"&lt;/js&gt;).</em>
+<a class="jxr_linenumber" name="L60" href="#L60">60</a>  <em class="jxr_javadoccomment">	 * 	&lt;br&gt;If &lt;jk&gt;null&lt;/jk&gt;, &lt;js&gt;"<a href="http://localhost" target="alexandria_uri">http://localhost</a>"&lt;/js&gt; is assumed.</em>
+<a class="jxr_linenumber" name="L61" href="#L61">61</a>  <em class="jxr_javadoccomment">	 * @param contextPath</em>
+<a class="jxr_linenumber" name="L62" href="#L62">62</a>  <em class="jxr_javadoccomment">	 * 	The context path of the servlet, or &lt;jk&gt;null&lt;/jk&gt; if unknown or doesn't have one.</em>
+<a class="jxr_linenumber" name="L63" href="#L63">63</a>  <em class="jxr_javadoccomment">	 * @param servletPath</em>
+<a class="jxr_linenumber" name="L64" href="#L64">64</a>  <em class="jxr_javadoccomment">	 * 	The servlet path of the servlet, or &lt;jk&gt;null&lt;/jk&gt; if unknown or doesn't have one.</em>
+<a class="jxr_linenumber" name="L65" href="#L65">65</a>  <em class="jxr_javadoccomment">	 * @param pathToResolve</em>
+<a class="jxr_linenumber" name="L66" href="#L66">66</a>  <em class="jxr_javadoccomment">	 * 	The path to resolve.</em>
+<a class="jxr_linenumber" name="L67" href="#L67">67</a>  <em class="jxr_javadoccomment">	 * 	&lt;br&gt;Can be relative to servlet or an absolute path.</em>
+<a class="jxr_linenumber" name="L68" href="#L68">68</a>  <em class="jxr_javadoccomment">	 * @param pathVars</em>
+<a class="jxr_linenumber" name="L69" href="#L69">69</a>  <em class="jxr_javadoccomment">	 * 	Optional path variables to resolve in the context path or servlet path.</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>  	<strong class="jxr_keyword">public</strong> <a name="MockPathResolver" href="../../../../../org/apache/juneau/rest/mock/MockPathResolver.html#MockPathResolver">MockPathResolver</a>(String target, String contextPath, String servletPath, String pathToResolve, Map&lt;String,Object&gt; pathVars) {
+<a class="jxr_linenumber" name="L72" href="#L72">72</a>  		<strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="L73" href="#L73">73</a>  			init(target, contextPath, servletPath, pathToResolve, pathVars);
+<a class="jxr_linenumber" name="L74" href="#L74">74</a>  		} <strong class="jxr_keyword">catch</strong> (Exception e) {
+<a class="jxr_linenumber" name="L75" href="#L75">75</a>  			error = lm(e);
+<a class="jxr_linenumber" name="L76" href="#L76">76</a>  		}
+<a class="jxr_linenumber" name="L77" href="#L77">77</a>  	}
+<a class="jxr_linenumber" name="L78" href="#L78">78</a>  
+<a class="jxr_linenumber" name="L79" href="#L79">79</a>  	<em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L80" href="#L80">80</a>  <em class="jxr_javadoccomment">	 * Returns the context path of the URL.</em>
+<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">	 * @return The context path of the URL always starting with &lt;js&gt;'/'&lt;/js&gt;, or an empty string if it doesn't exist.</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>  	<strong class="jxr_keyword">public</strong> String getContextPath() { <strong class="jxr_keyword">return</strong> contextPath; }
+<a class="jxr_linenumber" name="L85" href="#L85">85</a>  
+<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">	 * Returns any parsing errors.</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">	 * @return Any parsing errors.</em>
+<a class="jxr_linenumber" name="L90" href="#L90">90</a>  <em class="jxr_javadoccomment">	 */</em>
+<a class="jxr_linenumber" name="L91" href="#L91">91</a>  	<strong class="jxr_keyword">public</strong> String getError() { <strong class="jxr_keyword">return</strong> error; }
+<a class="jxr_linenumber" name="L92" href="#L92">92</a>  
+<a class="jxr_linenumber" name="L93" href="#L93">93</a>  	<em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="L94" href="#L94">94</a>  <em class="jxr_javadoccomment">	 * Returns the remainder of the URL following the context and servlet paths.</em>
+<a class="jxr_linenumber" name="L95" href="#L95">95</a>  <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L96" href="#L96">96</a>  <em class="jxr_javadoccomment">	 * @return The remainder of the URL.</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>  	<strong class="jxr_keyword">public</strong> String getRemainder() { <strong class="jxr_keyword">return</strong> remainder; }
+<a class="jxr_linenumber" name="L99" href="#L99">99</a>  
+<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">	 * Returns the servlet path of the URL.</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">	 * @return The servlet path of the URL always starting with &lt;js&gt;'/'&lt;/js&gt;, or an empty string if it doesn't exist.</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> String getServletPath() { <strong class="jxr_keyword">return</strong> servletPath; }
+<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 just the hostname portion of the URL.</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">	 * @return The hostname portion of the URL.</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> 	<strong class="jxr_keyword">public</strong> String getTarget() { <strong class="jxr_keyword">return</strong> target; }
+<a class="jxr_linenumber" name="L113" href="#L113">113</a> 
+<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> <em class="jxr_javadoccomment">	 * Returns the fully-qualified URL.</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">	 * @return The fully-qualified URL.</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> 	<strong class="jxr_keyword">public</strong> String getURI() { <strong class="jxr_keyword">return</strong> uri; }
+<a class="jxr_linenumber" name="L120" href="#L120">120</a> 
+<a class="jxr_linenumber" name="L121" href="#L121">121</a> 	@Override
+<a class="jxr_linenumber" name="L122" href="#L122">122</a> 	<strong class="jxr_keyword">public</strong> String toString() {
+<a class="jxr_linenumber" name="L123" href="#L123">123</a> 		<em class="jxr_comment">// @formatter:off</em>
+<a class="jxr_linenumber" name="L124" href="#L124">124</a> 		<strong class="jxr_keyword">return</strong> JsonMap.create()
+<a class="jxr_linenumber" name="L125" href="#L125">125</a> 			.append(<span class="jxr_string">"uri"</span>, uri)
+<a class="jxr_linenumber" name="L126" href="#L126">126</a> 			.append(<span class="jxr_string">"contextPath"</span>, contextPath)
+<a class="jxr_linenumber" name="L127" href="#L127">127</a> 			.append(<span class="jxr_string">"servletPath"</span>, servletPath)
+<a class="jxr_linenumber" name="L128" href="#L128">128</a> 			.append(<span class="jxr_string">"remainder"</span>, remainder)
+<a class="jxr_linenumber" name="L129" href="#L129">129</a> 			.append(<span class="jxr_string">"target"</span>, target)
+<a class="jxr_linenumber" name="L130" href="#L130">130</a> 			.append(<span class="jxr_string">"error"</span>, error)
+<a class="jxr_linenumber" name="L131" href="#L131">131</a> 			.toString();
+<a class="jxr_linenumber" name="L132" href="#L132">132</a> 		<em class="jxr_comment">// @formatter:on</em>
+<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> 	<strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> init(String target, String contextPath, String servletPath, String pathToResolve, Map&lt;String,Object&gt; pathVars) {
+<a class="jxr_linenumber" name="L136" href="#L136">136</a> 
+<a class="jxr_linenumber" name="L137" href="#L137">137</a> 		target = trimTrailingSlashes(emptyIfNull(target));
+<a class="jxr_linenumber" name="L138" href="#L138">138</a> 		<strong class="jxr_keyword">if</strong> (target.isEmpty())
+<a class="jxr_linenumber" name="L139" href="#L139">139</a> 			target = <span class="jxr_string">"http://localhost"</span>;
+<a class="jxr_linenumber" name="L140" href="#L140">140</a> 
+<a class="jxr_linenumber" name="L141" href="#L141">141</a> 		contextPath = fixSegment(contextPath, pathVars);
+<a class="jxr_linenumber" name="L142" href="#L142">142</a> 		servletPath = fixSegment(servletPath, pathVars);
+<a class="jxr_linenumber" name="L143" href="#L143">143</a> 		pathToResolve = emptyIfNull(pathToResolve);
+<a class="jxr_linenumber" name="L144" href="#L144">144</a> 
+<a class="jxr_linenumber" name="L145" href="#L145">145</a> 		<strong class="jxr_keyword">if</strong> (! (pathToResolve.startsWith(<span class="jxr_string">"http://"</span>) || pathToResolve.startsWith(<span class="jxr_string">"https://"</span>))) {
+<a class="jxr_linenumber" name="L146" href="#L146">146</a> 			pathToResolve = fixSegment(pathToResolve, mape());
+<a class="jxr_linenumber" name="L147" href="#L147">147</a> 			<strong class="jxr_keyword">this</strong>.uri = target + contextPath + servletPath + pathToResolve;
+<a class="jxr_linenumber" name="L148" href="#L148">148</a> 			<strong class="jxr_keyword">this</strong>.target = target;
+<a class="jxr_linenumber" name="L149" href="#L149">149</a> 			<strong class="jxr_keyword">this</strong>.contextPath = contextPath;
+<a class="jxr_linenumber" name="L150" href="#L150">150</a> 			<strong class="jxr_keyword">this</strong>.servletPath = servletPath;
+<a class="jxr_linenumber" name="L151" href="#L151">151</a> 			<strong class="jxr_keyword">this</strong>.remainder = pathToResolve;
+<a class="jxr_linenumber" name="L152" href="#L152">152</a> 			<strong class="jxr_keyword">return</strong>;
+<a class="jxr_linenumber" name="L153" href="#L153">153</a> 		}
+<a class="jxr_linenumber" name="L154" href="#L154">154</a> 
+<a class="jxr_linenumber" name="L155" href="#L155">155</a> 		<em class="jxr_comment">// Path starts with http[s]: so we have to parse it to resolve variables.</em>
+<a class="jxr_linenumber" name="L156" href="#L156">156</a> 		<strong class="jxr_keyword">this</strong>.uri = pathToResolve;
+<a class="jxr_linenumber" name="L157" href="#L157">157</a> 
+<a class="jxr_linenumber" name="L158" href="#L158">158</a> 		<em class="jxr_comment">// S3 - Found "http://", looking for any character other than '/' (end of target).</em>
+<a class="jxr_linenumber" name="L159" href="#L159">159</a> 		<em class="jxr_comment">// S4 - Found  any character, looking for 3rd '/' (end of target).</em>
+<a class="jxr_linenumber" name="L160" href="#L160">160</a> 		<em class="jxr_comment">// S5 - Found 3rd '/', resolving contextPath.</em>
+<a class="jxr_linenumber" name="L161" href="#L161">161</a> 		<em class="jxr_comment">// S6 - Resolved contextPath, resolving servletPath.</em>
+<a class="jxr_linenumber" name="L162" href="#L162">162</a> 		<em class="jxr_comment">// S7 - Resolved servletPath.</em>
+<a class="jxr_linenumber" name="L163" href="#L163">163</a> 		StateEnum state = S3;
+<a class="jxr_linenumber" name="L164" href="#L164">164</a> 
+<a class="jxr_linenumber" name="L165" href="#L165">165</a> 		<strong class="jxr_keyword">int</strong> cpSegments = countChars(contextPath, '/');
+<a class="jxr_linenumber" name="L166" href="#L166">166</a> 		<strong class="jxr_keyword">int</strong> spSegments = countChars(servletPath, '/');
+<a class="jxr_linenumber" name="L167" href="#L167">167</a> 
+<a class="jxr_linenumber" name="L168" href="#L168">168</a> 		<strong class="jxr_keyword">this</strong>.contextPath = <span class="jxr_string">""</span>;
+<a class="jxr_linenumber" name="L169" href="#L169">169</a> 		<strong class="jxr_keyword">this</strong>.servletPath = <span class="jxr_string">""</span>;
+<a class="jxr_linenumber" name="L170" href="#L170">170</a> 		<strong class="jxr_keyword">this</strong>.remainder = <span class="jxr_string">""</span>;
+<a class="jxr_linenumber" name="L171" href="#L171">171</a> 
+<a class="jxr_linenumber" name="L172" href="#L172">172</a> 		<strong class="jxr_keyword">int</strong> mark = 0;
+<a class="jxr_linenumber" name="L173" href="#L173">173</a> 		<strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">var</strong> i = uri.indexOf(<span class="jxr_string">"://"</span>) + 3; i &lt; uri.length(); i++) {
+<a class="jxr_linenumber" name="L174" href="#L174">174</a> 			<strong class="jxr_keyword">var</strong> c = uri.charAt(i);
+<a class="jxr_linenumber" name="L175" href="#L175">175</a> 			<strong class="jxr_keyword">if</strong> (state == S3) {
+<a class="jxr_linenumber" name="L176" href="#L176">176</a> 				<strong class="jxr_keyword">if</strong> (c != '/')
+<a class="jxr_linenumber" name="L177" href="#L177">177</a> 					state = S4;
+<a class="jxr_linenumber" name="L178" href="#L178">178</a> 				<strong class="jxr_keyword">else</strong>
+<a class="jxr_linenumber" name="L179" href="#L179">179</a> 					<strong class="jxr_keyword">break</strong>;
+<a class="jxr_linenumber" name="L180" href="#L180">180</a> 			} <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (state == S4) {
+<a class="jxr_linenumber" name="L181" href="#L181">181</a> 				<strong class="jxr_keyword">if</strong> (c == '/') {
+<a class="jxr_linenumber" name="L182" href="#L182">182</a> 					<strong class="jxr_keyword">this</strong>.target = uri.substring(0, i);
+<a class="jxr_linenumber" name="L183" href="#L183">183</a> 					state = S5;
+<a class="jxr_linenumber" name="L184" href="#L184">184</a> 					<strong class="jxr_keyword">if</strong> (contextPath.isEmpty()) {
+<a class="jxr_linenumber" name="L185" href="#L185">185</a> 						state = S6;
+<a class="jxr_linenumber" name="L186" href="#L186">186</a> 						<strong class="jxr_keyword">if</strong> (servletPath.isEmpty()) {
+<a class="jxr_linenumber" name="L187" href="#L187">187</a> 							state = S7;
+<a class="jxr_linenumber" name="L188" href="#L188">188</a> 						}
+<a class="jxr_linenumber" name="L189" href="#L189">189</a> 					}
+<a class="jxr_linenumber" name="L190" href="#L190">190</a> 					mark = i;
+<a class="jxr_linenumber" name="L191" href="#L191">191</a> 				}
+<a class="jxr_linenumber" name="L192" href="#L192">192</a> 			} <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (state == S5) {
+<a class="jxr_linenumber" name="L193" href="#L193">193</a> 				<strong class="jxr_keyword">if</strong> (c == '/') {
+<a class="jxr_linenumber" name="L194" href="#L194">194</a> 					cpSegments--;
+<a class="jxr_linenumber" name="L195" href="#L195">195</a> 					<strong class="jxr_keyword">if</strong> (cpSegments == 0) {
+<a class="jxr_linenumber" name="L196" href="#L196">196</a> 						<strong class="jxr_keyword">this</strong>.contextPath = uri.substring(mark, i);
+<a class="jxr_linenumber" name="L197" href="#L197">197</a> 						mark = i;
+<a class="jxr_linenumber" name="L198" href="#L198">198</a> 						state = S6;
+<a class="jxr_linenumber" name="L199" href="#L199">199</a> 						<strong class="jxr_keyword">if</strong> (servletPath.isEmpty()) {
+<a class="jxr_linenumber" name="L200" href="#L200">200</a> 							state = S7;
+<a class="jxr_linenumber" name="L201" href="#L201">201</a> 						}
+<a class="jxr_linenumber" name="L202" href="#L202">202</a> 					}
+<a class="jxr_linenumber" name="L203" href="#L203">203</a> 				}
+<a class="jxr_linenumber" name="L204" href="#L204">204</a> 			} <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (state == S6) {
+<a class="jxr_linenumber" name="L205" href="#L205">205</a> 				<strong class="jxr_keyword">if</strong> (c == '/') {
+<a class="jxr_linenumber" name="L206" href="#L206">206</a> 					spSegments--;
+<a class="jxr_linenumber" name="L207" href="#L207">207</a> 					<strong class="jxr_keyword">if</strong> (spSegments == 0) {
+<a class="jxr_linenumber" name="L208" href="#L208">208</a> 						<strong class="jxr_keyword">this</strong>.servletPath = uri.substring(mark, i);
+<a class="jxr_linenumber" name="L209" href="#L209">209</a> 						mark = i;
+<a class="jxr_linenumber" name="L210" href="#L210">210</a> 						state = S7;
+<a class="jxr_linenumber" name="L211" href="#L211">211</a> 					}
+<a class="jxr_linenumber" name="L212" href="#L212">212</a> 				}
+<a class="jxr_linenumber" name="L213" href="#L213">213</a> 			}
+<a class="jxr_linenumber" name="L214" href="#L214">214</a> 		}
+<a class="jxr_linenumber" name="L215" href="#L215">215</a> 
+<a class="jxr_linenumber" name="L216" href="#L216">216</a> 		<strong class="jxr_keyword">if</strong> (state == S4) {
+<a class="jxr_linenumber" name="L217" href="#L217">217</a> 			<strong class="jxr_keyword">this</strong>.target = uri;
+<a class="jxr_linenumber" name="L218" href="#L218">218</a> 		} <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (state == S5) {
+<a class="jxr_linenumber" name="L219" href="#L219">219</a> 			<strong class="jxr_keyword">this</strong>.contextPath = uri.substring(mark);
+<a class="jxr_linenumber" name="L220" href="#L220">220</a> 		} <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (state == S6) {
+<a class="jxr_linenumber" name="L221" href="#L221">221</a> 			<strong class="jxr_keyword">this</strong>.servletPath = uri.substring(mark);
+<a class="jxr_linenumber" name="L222" href="#L222">222</a> 		} <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (state == S7) {
+<a class="jxr_linenumber" name="L223" href="#L223">223</a> 			<strong class="jxr_keyword">this</strong>.remainder = uri.substring(mark);
+<a class="jxr_linenumber" name="L224" href="#L224">224</a> 		} <strong class="jxr_keyword">else</strong> {
+<a class="jxr_linenumber" name="L225" href="#L225">225</a> 			<strong class="jxr_keyword">throw</strong> rex(<span class="jxr_string">"Invalid URI pattern encountered:  {0}"</span>, uri);
+<a class="jxr_linenumber" name="L226" href="#L226">226</a> 		}
+<a class="jxr_linenumber" name="L227" href="#L227">227</a> 
+<a class="jxr_linenumber" name="L228" href="#L228">228</a> 		<strong class="jxr_keyword">if</strong> (! contextPath.isEmpty()) {
+<a class="jxr_linenumber" name="L229" href="#L229">229</a> 			<strong class="jxr_keyword">var</strong> p = UrlPathMatcher.of(contextPath);
+<a class="jxr_linenumber" name="L230" href="#L230">230</a> 			<strong class="jxr_keyword">if</strong> (p.match(UrlPath.of(<strong class="jxr_keyword">this</strong>.contextPath)) == <strong class="jxr_keyword">null</strong>)
+<a class="jxr_linenumber" name="L231" href="#L231">231</a> 				<strong class="jxr_keyword">throw</strong> rex(<span class="jxr_string">"Context path [{0}] not found in URI:  {1}"</span>, contextPath, uri);
+<a class="jxr_linenumber" name="L232" href="#L232">232</a> 		}
+<a class="jxr_linenumber" name="L233" href="#L233">233</a> 
+<a class="jxr_linenumber" name="L234" href="#L234">234</a> 		<strong class="jxr_keyword">if</strong> (! servletPath.isEmpty()) {
+<a class="jxr_linenumber" name="L235" href="#L235">235</a> 			<strong class="jxr_keyword">var</strong> p = UrlPathMatcher.of(servletPath);
+<a class="jxr_linenumber" name="L236" href="#L236">236</a> 			<strong class="jxr_keyword">if</strong> (p.match(UrlPath.of(<strong class="jxr_keyword">this</strong>.servletPath)) == <strong class="jxr_keyword">null</strong>)
+<a class="jxr_linenumber" name="L237" href="#L237">237</a> 				<strong class="jxr_keyword">throw</strong> rex(<span class="jxr_string">"Servlet path [{0}] not found in URI:  {1}"</span>, servletPath, uri);
+<a class="jxr_linenumber" name="L238" href="#L238">238</a> 		}
+<a class="jxr_linenumber" name="L239" href="#L239">239</a> 	}
+<a class="jxr_linenumber" name="L240" href="#L240">240</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/util/UrlPathMatch.html b/site/xref/org/apache/juneau/rest/util/UrlPathMatch.html
index 74a9469e5d..278d5ac35a 100644
--- a/site/xref/org/apache/juneau/rest/util/UrlPathMatch.html
+++ b/site/xref/org/apache/juneau/rest/util/UrlPathMatch.html
@@ -25,132 +25,133 @@
 <a class="jxr_linenumber" name="L17" href="#L17">17</a>  <strong class="jxr_keyword">package</strong> org.apache.juneau.<strong class="jxr_keyword">rest</strong>.util;
 <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.collections.JsonMap.*;
-<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.commons.utils.StringUtils.*;
-<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.commons.utils.Utils.*;
-<a class="jxr_linenumber" name="L22" href="#L22">22</a>  
-<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.commons.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"> * Represents a URL path pattern match.</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"> * For example, given the pattern &lt;js&gt;"/foo/{bar}/*"&lt;/js&gt; and the path &lt;js&gt;"/foo/123/baz/qux"&lt;/js&gt;, this match gives</em>
-<a class="jxr_linenumber" name="L31" href="#L31">31</a>  <em class="jxr_javadoccomment"> * you a map containing &lt;js&gt;"{bar:123}"&lt;/js&gt; and a remainder string containing &lt;js&gt;"baz/qux"&lt;/js&gt;.</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"> */</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="UrlPathMatch" href="../../../../../org/apache/juneau/rest/util/UrlPathMatch.html#UrlPathMatch">UrlPathMatch</a> {
-<a class="jxr_linenumber" name="L35" href="#L35">35</a>  
-<a class="jxr_linenumber" name="L36" href="#L36">36</a>  	<strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong> matchedParts;
-<a class="jxr_linenumber" name="L37" href="#L37">37</a>  	<strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> String path;
-<a class="jxr_linenumber" name="L38" href="#L38">38</a>  	<strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> Map&lt;String,String&gt; vars;
-<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">	 * Constructor.</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 path The path being matched against.  Can be &lt;jk&gt;null&lt;/jk&gt;.</em>
-<a class="jxr_linenumber" name="L44" href="#L44">44</a>  <em class="jxr_javadoccomment">	 * @param matchedParts The number of parts that were matched against the path.</em>
-<a class="jxr_linenumber" name="L45" href="#L45">45</a>  <em class="jxr_javadoccomment">	 * @param keys The variable keys.  Can be &lt;jk&gt;null&lt;/jk&gt;.</em>
-<a class="jxr_linenumber" name="L46" href="#L46">46</a>  <em class="jxr_javadoccomment">	 * @param values The variable values.  Can be &lt;jk&gt;null&lt;/jk&gt;.</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">protected</strong> <a name="UrlPathMatch" href="../../../../../org/apache/juneau/rest/util/UrlPathMatch.html#UrlPathMatch">UrlPathMatch</a>(String path, <strong class="jxr_keyword">int</strong> matchedParts, String[] keys, String[] values) {
-<a class="jxr_linenumber" name="L49" href="#L49">49</a>  		<strong class="jxr_keyword">this</strong>.path = path;
-<a class="jxr_linenumber" name="L50" href="#L50">50</a>  		<strong class="jxr_keyword">this</strong>.matchedParts = matchedParts;
-<a class="jxr_linenumber" name="L51" href="#L51">51</a>  		<strong class="jxr_keyword">this</strong>.vars = keys == <strong class="jxr_keyword">null</strong> ? Collections.emptyMap() : <strong class="jxr_keyword">new</strong> SimpleMap&lt;&gt;(keys, values);
-<a class="jxr_linenumber" name="L52" href="#L52">52</a>  	}
-<a class="jxr_linenumber" name="L53" href="#L53">53</a>  
-<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">	 * Returns the part of the URL that the pattern matched against.</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">	 * @return</em>
-<a class="jxr_linenumber" name="L58" href="#L58">58</a>  <em class="jxr_javadoccomment">	 * The part of the URL that the pattern matched against.</em>
-<a class="jxr_linenumber" name="L59" href="#L59">59</a>  <em class="jxr_javadoccomment">	 * &lt;br&gt;Can be &lt;jk&gt;null&lt;/jk&gt; if nothing matched.</em>
-<a class="jxr_linenumber" name="L60" href="#L60">60</a>  <em class="jxr_javadoccomment">	 * &lt;br&gt;Otherwise, always starts with &lt;js&gt;'/'&lt;/js&gt;.</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>  	<strong class="jxr_keyword">public</strong> String getPrefix() {
-<a class="jxr_linenumber" name="L63" href="#L63">63</a>  		<strong class="jxr_keyword">var</strong> c = 0;
-<a class="jxr_linenumber" name="L64" href="#L64">64</a>  		<strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">var</strong> j = 0; j &lt; matchedParts; j++) {
-<a class="jxr_linenumber" name="L65" href="#L65">65</a>  			c = path.indexOf('/', c + 1);
-<a class="jxr_linenumber" name="L66" href="#L66">66</a>  			<strong class="jxr_keyword">if</strong> (c == -1)
-<a class="jxr_linenumber" name="L67" href="#L67">67</a>  				c = path.length();
-<a class="jxr_linenumber" name="L68" href="#L68">68</a>  		}
-<a class="jxr_linenumber" name="L69" href="#L69">69</a>  		<strong class="jxr_keyword">return</strong> nullIfEmpty(path.substring(0, c));
-<a class="jxr_linenumber" name="L70" href="#L70">70</a>  	}
-<a class="jxr_linenumber" name="L71" href="#L71">71</a>  
-<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>  <em class="jxr_javadoccomment">	 * Returns the remainder of the path after the pattern match has been made.</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">	 * &lt;p&gt;</em>
-<a class="jxr_linenumber" name="L76" href="#L76">76</a>  <em class="jxr_javadoccomment">	 * Same as {#link {@link #getSuffix()} but trims the leading slash if there is one.</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">	 * @return The remainder of the path after the pattern match has been made.</em>
-<a class="jxr_linenumber" name="L79" href="#L79">79</a>  <em class="jxr_javadoccomment">	 */</em>
-<a class="jxr_linenumber" name="L80" href="#L80">80</a>  	<strong class="jxr_keyword">public</strong> String getRemainder() {
-<a class="jxr_linenumber" name="L81" href="#L81">81</a>  		<strong class="jxr_keyword">var</strong> suffix = getSuffix();
-<a class="jxr_linenumber" name="L82" href="#L82">82</a>  		<strong class="jxr_keyword">if</strong> (isNotEmpty(suffix) &amp;&amp; suffix.charAt(0) == '/')
-<a class="jxr_linenumber" name="L83" href="#L83">83</a>  			suffix = suffix.substring(1);
-<a class="jxr_linenumber" name="L84" href="#L84">84</a>  		<strong class="jxr_keyword">return</strong> suffix;
-<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>  	<em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="L88" href="#L88">88</a>  <em class="jxr_javadoccomment">	 * Returns the remainder of the URL after the pattern was matched.</em>
-<a class="jxr_linenumber" name="L89" href="#L89">89</a>  <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L90" href="#L90">90</a>  <em class="jxr_javadoccomment">	 * @return</em>
-<a class="jxr_linenumber" name="L91" href="#L91">91</a>  <em class="jxr_javadoccomment">	 * The remainder of the URL after the pattern was matched.</em>
-<a class="jxr_linenumber" name="L92" href="#L92">92</a>  <em class="jxr_javadoccomment">	 * &lt;br&gt;Can be &lt;jk&gt;null&lt;/jk&gt; if nothing remains to be matched.</em>
-<a class="jxr_linenumber" name="L93" href="#L93">93</a>  <em class="jxr_javadoccomment">	 * &lt;br&gt;Otherwise, always starts with &lt;js&gt;'/'&lt;/js&gt;.</em>
-<a class="jxr_linenumber" name="L94" href="#L94">94</a>  <em class="jxr_javadoccomment">	 */</em>
-<a class="jxr_linenumber" name="L95" href="#L95">95</a>  	<strong class="jxr_keyword">public</strong> String getSuffix() {
-<a class="jxr_linenumber" name="L96" href="#L96">96</a>  		<strong class="jxr_keyword">var</strong> s = path;
-<a class="jxr_linenumber" name="L97" href="#L97">97</a>  		<strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">var</strong> j = 0; j &lt; matchedParts; j++) {
-<a class="jxr_linenumber" name="L98" href="#L98">98</a>  			<strong class="jxr_keyword">var</strong> k = s.indexOf('/', 1);
-<a class="jxr_linenumber" name="L99" href="#L99">99</a>  			<strong class="jxr_keyword">if</strong> (k == -1)
-<a class="jxr_linenumber" name="L100" href="#L100">100</a> 				<strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="L101" href="#L101">101</a> 			s = s.substring(k);
-<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> s;
-<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 a map of the path variables and values.</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">	 * @return</em>
-<a class="jxr_linenumber" name="L110" href="#L110">110</a> <em class="jxr_javadoccomment">	 * 	An unmodifiable map of variable keys/values.</em>
-<a class="jxr_linenumber" name="L111" href="#L111">111</a> <em class="jxr_javadoccomment">	 * 	&lt;br&gt;Returns an empty map if no variables were found in the path.</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> Map&lt;String,String&gt; getVars() { <strong class="jxr_keyword">return</strong> vars; }
-<a class="jxr_linenumber" name="L114" href="#L114">114</a> 
-<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">	 * Returns &lt;jk&gt;true&lt;/jk&gt; if any of the variable values are blank.</em>
-<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">	 * @return &lt;jk&gt;true&lt;/jk&gt; if any of the variable values are blank.</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> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> hasEmptyVars() {
-<a class="jxr_linenumber" name="L121" href="#L121">121</a> 		<strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">var</strong> v : vars.values())
-<a class="jxr_linenumber" name="L122" href="#L122">122</a> 			<strong class="jxr_keyword">if</strong> (isEmpty(v))
-<a class="jxr_linenumber" name="L123" href="#L123">123</a> 				<strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
-<a class="jxr_linenumber" name="L124" href="#L124">124</a> 		<strong class="jxr_keyword">return</strong> false;
-<a class="jxr_linenumber" name="L125" href="#L125">125</a> 	}
-<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">	 * Returns &lt;jk&gt;true&lt;/jk&gt; if this match contains one or more variables.</em>
-<a class="jxr_linenumber" name="L129" href="#L129">129</a> <em class="jxr_javadoccomment">	 *</em>
-<a class="jxr_linenumber" name="L130" href="#L130">130</a> <em class="jxr_javadoccomment">	 * @return &lt;jk&gt;true&lt;/jk&gt; if this match contains one or more variables.</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> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> hasVars() {
-<a class="jxr_linenumber" name="L133" href="#L133">133</a> 		<strong class="jxr_keyword">return</strong> ! vars.isEmpty();
-<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">/* Overridden from Object */</em>
-<a class="jxr_linenumber" name="L137" href="#L137">137</a> 	<strong class="jxr_keyword">public</strong> String toString() {
-<a class="jxr_linenumber" name="L138" href="#L138">138</a> 		<em class="jxr_comment">// @formatter:off</em>
-<a class="jxr_linenumber" name="L139" href="#L139">139</a> 		<strong class="jxr_keyword">return</strong> filteredMap()
-<a class="jxr_linenumber" name="L140" href="#L140">140</a> 			.append(<span class="jxr_string">"v"</span>, getVars())
-<a class="jxr_linenumber" name="L141" href="#L141">141</a> 			.append(<span class="jxr_string">"r"</span>, getRemainder())
-<a class="jxr_linenumber" name="L142" href="#L142">142</a> 			.asString();
-<a class="jxr_linenumber" name="L143" href="#L143">143</a> 		<em class="jxr_comment">// @formatter:on</em>
-<a class="jxr_linenumber" name="L144" href="#L144">144</a> 	}
-<a class="jxr_linenumber" name="L145" href="#L145">145</a> }
+<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.commons.utils.CollectionUtils.*;
+<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.commons.utils.StringUtils.*;
+<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.commons.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.util.*;
+<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.commons.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"> * Represents a URL path pattern match.</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"> * For example, given the pattern &lt;js&gt;"/foo/{bar}/*"&lt;/js&gt; and the path &lt;js&gt;"/foo/123/baz/qux"&lt;/js&gt;, this match gives</em>
+<a class="jxr_linenumber" name="L32" href="#L32">32</a>  <em class="jxr_javadoccomment"> * you a map containing &lt;js&gt;"{bar:123}"&lt;/js&gt; and a remainder string containing &lt;js&gt;"baz/qux"&lt;/js&gt;.</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"> */</em>
+<a class="jxr_linenumber" name="L35" href="#L35">35</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a name="UrlPathMatch" href="../../../../../org/apache/juneau/rest/util/UrlPathMatch.html#UrlPathMatch">UrlPathMatch</a> {
+<a class="jxr_linenumber" name="L36" href="#L36">36</a>  
+<a class="jxr_linenumber" name="L37" href="#L37">37</a>  	<strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong> matchedParts;
+<a class="jxr_linenumber" name="L38" href="#L38">38</a>  	<strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> String path;
+<a class="jxr_linenumber" name="L39" href="#L39">39</a>  	<strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> Map&lt;String,String&gt; vars;
+<a class="jxr_linenumber" name="L40" href="#L40">40</a>  
+<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">	 * Constructor.</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 path The path being matched against.  Can be &lt;jk&gt;null&lt;/jk&gt;.</em>
+<a class="jxr_linenumber" name="L45" href="#L45">45</a>  <em class="jxr_javadoccomment">	 * @param matchedParts The number of parts that were matched against the path.</em>
+<a class="jxr_linenumber" name="L46" href="#L46">46</a>  <em class="jxr_javadoccomment">	 * @param keys The variable keys.  Can be &lt;jk&gt;null&lt;/jk&gt;.</em>
+<a class="jxr_linenumber" name="L47" href="#L47">47</a>  <em class="jxr_javadoccomment">	 * @param values The variable values.  Can be &lt;jk&gt;null&lt;/jk&gt;.</em>
+<a class="jxr_linenumber" name="L48" href="#L48">48</a>  <em class="jxr_javadoccomment">	 */</em>
+<a class="jxr_linenumber" name="L49" href="#L49">49</a>  	<strong class="jxr_keyword">protected</strong> <a name="UrlPathMatch" href="../../../../../org/apache/juneau/rest/util/UrlPathMatch.html#UrlPathMatch">UrlPathMatch</a>(String path, <strong class="jxr_keyword">int</strong> matchedParts, String[] keys, String[] values) {
+<a class="jxr_linenumber" name="L50" href="#L50">50</a>  		<strong class="jxr_keyword">this</strong>.path = path;
+<a class="jxr_linenumber" name="L51" href="#L51">51</a>  		<strong class="jxr_keyword">this</strong>.matchedParts = matchedParts;
+<a class="jxr_linenumber" name="L52" href="#L52">52</a>  		<strong class="jxr_keyword">this</strong>.vars = keys == <strong class="jxr_keyword">null</strong> ? mape() : <strong class="jxr_keyword">new</strong> SimpleMap&lt;&gt;(keys, values);
+<a class="jxr_linenumber" name="L53" href="#L53">53</a>  	}
+<a class="jxr_linenumber" name="L54" href="#L54">54</a>  
+<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">	 * Returns the part of the URL that the pattern matched against.</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">	 * @return</em>
+<a class="jxr_linenumber" name="L59" href="#L59">59</a>  <em class="jxr_javadoccomment">	 * The part of the URL that the pattern matched against.</em>
+<a class="jxr_linenumber" name="L60" href="#L60">60</a>  <em class="jxr_javadoccomment">	 * &lt;br&gt;Can be &lt;jk&gt;null&lt;/jk&gt; if nothing matched.</em>
+<a class="jxr_linenumber" name="L61" href="#L61">61</a>  <em class="jxr_javadoccomment">	 * &lt;br&gt;Otherwise, always starts with &lt;js&gt;'/'&lt;/js&gt;.</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>  	<strong class="jxr_keyword">public</strong> String getPrefix() {
+<a class="jxr_linenumber" name="L64" href="#L64">64</a>  		<strong class="jxr_keyword">var</strong> c = 0;
+<a class="jxr_linenumber" name="L65" href="#L65">65</a>  		<strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">var</strong> j = 0; j &lt; matchedParts; j++) {
+<a class="jxr_linenumber" name="L66" href="#L66">66</a>  			c = path.indexOf('/', c + 1);
+<a class="jxr_linenumber" name="L67" href="#L67">67</a>  			<strong class="jxr_keyword">if</strong> (c == -1)
+<a class="jxr_linenumber" name="L68" href="#L68">68</a>  				c = path.length();
+<a class="jxr_linenumber" name="L69" href="#L69">69</a>  		}
+<a class="jxr_linenumber" name="L70" href="#L70">70</a>  		<strong class="jxr_keyword">return</strong> nullIfEmpty(path.substring(0, c));
+<a class="jxr_linenumber" name="L71" href="#L71">71</a>  	}
+<a class="jxr_linenumber" name="L72" href="#L72">72</a>  
+<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">	 * Returns the remainder of the path after the pattern match has been made.</em>
+<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">	 * &lt;p&gt;</em>
+<a class="jxr_linenumber" name="L77" href="#L77">77</a>  <em class="jxr_javadoccomment">	 * Same as {#link {@link #getSuffix()} but trims the leading slash if there is one.</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">	 * @return The remainder of the path after the pattern match has been made.</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>  	<strong class="jxr_keyword">public</strong> String getRemainder() {
+<a class="jxr_linenumber" name="L82" href="#L82">82</a>  		<strong class="jxr_keyword">var</strong> suffix = getSuffix();
+<a class="jxr_linenumber" name="L83" href="#L83">83</a>  		<strong class="jxr_keyword">if</strong> (isNotEmpty(suffix) &amp;&amp; suffix.charAt(0) == '/')
+<a class="jxr_linenumber" name="L84" href="#L84">84</a>  			suffix = suffix.substring(1);
+<a class="jxr_linenumber" name="L85" href="#L85">85</a>  		<strong class="jxr_keyword">return</strong> suffix;
+<a class="jxr_linenumber" name="L86" href="#L86">86</a>  	}
+<a class="jxr_linenumber" name="L87" href="#L87">87</a>  
+<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">	 * Returns the remainder of the URL after the pattern was matched.</em>
+<a class="jxr_linenumber" name="L90" href="#L90">90</a>  <em class="jxr_javadoccomment">	 *</em>
+<a class="jxr_linenumber" name="L91" href="#L91">91</a>  <em class="jxr_javadoccomment">	 * @return</em>
+<a class="jxr_linenumber" name="L92" href="#L92">92</a>  <em class="jxr_javadoccomment">	 * The remainder of the URL after the pattern was matched.</em>
+<a class="jxr_linenumber" name="L93" href="#L93">93</a>  <em class="jxr_javadoccomment">	 * &lt;br&gt;Can be &lt;jk&gt;null&lt;/jk&gt; if nothing remains to be matched.</em>
+<a class="jxr_linenumber" name="L94" href="#L94">94</a>  <em class="jxr_javadoccomment">	 * &lt;br&gt;Otherwise, always starts with &lt;js&gt;'/'&lt;/js&gt;.</em>
+<a class="jxr_linenumber" name="L95" href="#L95">95</a>  <em class="jxr_javadoccomment">	 */</em>
+<a class="jxr_linenumber" name="L96" href="#L96">96</a>  	<strong class="jxr_keyword">public</strong> String getSuffix() {
+<a class="jxr_linenumber" name="L97" href="#L97">97</a>  		<strong class="jxr_keyword">var</strong> s = path;
+<a class="jxr_linenumber" name="L98" href="#L98">98</a>  		<strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">var</strong> j = 0; j &lt; matchedParts; j++) {
+<a class="jxr_linenumber" name="L99" href="#L99">99</a>  			<strong class="jxr_keyword">var</strong> k = s.indexOf('/', 1);
+<a class="jxr_linenumber" name="L100" href="#L100">100</a> 			<strong class="jxr_keyword">if</strong> (k == -1)
+<a class="jxr_linenumber" name="L101" href="#L101">101</a> 				<strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="L102" href="#L102">102</a> 			s = s.substring(k);
+<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> s;
+<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 a map of the path variables and values.</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">	 * @return</em>
+<a class="jxr_linenumber" name="L111" href="#L111">111</a> <em class="jxr_javadoccomment">	 * 	An unmodifiable map of variable keys/values.</em>
+<a class="jxr_linenumber" name="L112" href="#L112">112</a> <em class="jxr_javadoccomment">	 * 	&lt;br&gt;Returns an empty map if no variables were found in the path.</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> Map&lt;String,String&gt; getVars() { <strong class="jxr_keyword">return</strong> vars; }
+<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">	 * Returns &lt;jk&gt;true&lt;/jk&gt; if any of the variable values are blank.</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">	 * @return &lt;jk&gt;true&lt;/jk&gt; if any of the variable values are blank.</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">public</strong> <strong class="jxr_keyword">boolean</strong> hasEmptyVars() {
+<a class="jxr_linenumber" name="L122" href="#L122">122</a> 		<strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">var</strong> v : vars.values())
+<a class="jxr_linenumber" name="L123" href="#L123">123</a> 			<strong class="jxr_keyword">if</strong> (isEmpty(v))
+<a class="jxr_linenumber" name="L124" href="#L124">124</a> 				<strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
+<a class="jxr_linenumber" name="L125" href="#L125">125</a> 		<strong class="jxr_keyword">return</strong> false;
+<a class="jxr_linenumber" name="L126" href="#L126">126</a> 	}
+<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">	 * Returns &lt;jk&gt;true&lt;/jk&gt; if this match contains one or more variables.</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">	 * @return &lt;jk&gt;true&lt;/jk&gt; if this match contains one or more variables.</em>
+<a class="jxr_linenumber" name="L132" href="#L132">132</a> <em class="jxr_javadoccomment">	 */</em>
+<a class="jxr_linenumber" name="L133" href="#L133">133</a> 	<strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> hasVars() {
+<a class="jxr_linenumber" name="L134" href="#L134">134</a> 		<strong class="jxr_keyword">return</strong> ! vars.isEmpty();
+<a class="jxr_linenumber" name="L135" href="#L135">135</a> 	}
+<a class="jxr_linenumber" name="L136" href="#L136">136</a> 
+<a class="jxr_linenumber" name="L137" href="#L137">137</a> 	@Override <em class="jxr_comment">/* Overridden from Object */</em>
+<a class="jxr_linenumber" name="L138" href="#L138">138</a> 	<strong class="jxr_keyword">public</strong> String toString() {
+<a class="jxr_linenumber" name="L139" href="#L139">139</a> 		<em class="jxr_comment">// @formatter:off</em>
+<a class="jxr_linenumber" name="L140" href="#L140">140</a> 		<strong class="jxr_keyword">return</strong> filteredMap()
+<a class="jxr_linenumber" name="L141" href="#L141">141</a> 			.append(<span class="jxr_string">"v"</span>, getVars())
+<a class="jxr_linenumber" name="L142" href="#L142">142</a> 			.append(<span class="jxr_string">"r"</span>, getRemainder())
+<a class="jxr_linenumber" name="L143" href="#L143">143</a> 			.asString();
+<a class="jxr_linenumber" name="L144" href="#L144">144</a> 		<em class="jxr_comment">// @formatter:on</em>
+<a class="jxr_linenumber" name="L145" href="#L145">145</a> 	}
+<a class="jxr_linenumber" name="L146" href="#L146">146</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/serializer/Serializer.html b/site/xref/org/apache/juneau/serializer/Serializer.html
index 7502cd16bc..1bda8b36f2 100644
--- a/site/xref/org/apache/juneau/serializer/Serializer.html
+++ b/site/xref/org/apache/juneau/serializer/Serializer.html
@@ -1387,7 +1387,7 @@
 <a class="jxr_linenumber" name="L1379" href="#L1379">1379</a> <em class="jxr_javadoccomment">	 * 	Never &lt;jk&gt;null&lt;/jk&gt;.</em>
 <a class="jxr_linenumber" name="L1380" href="#L1380">1380</a> <em class="jxr_javadoccomment">	 */</em>
 <a class="jxr_linenumber" name="L1381" href="#L1381">1381</a> 	<strong class="jxr_keyword">public</strong> Map&lt;String,String&gt; getResponseHeaders(<a name="SerializerSession" href="../../../../org/apache/juneau/serializer/SerializerSession.html#SerializerSession">SerializerSession</a> session) {
-<a class="jxr_linenumber" name="L1382" href="#L1382">1382</a> 		<strong class="jxr_keyword">return</strong> Collections.emptyMap();
+<a class="jxr_linenumber" name="L1382" href="#L1382">1382</a> 		<strong class="jxr_keyword">return</strong> mape();
 <a class="jxr_linenumber" name="L1383" href="#L1383">1383</a> 	}
 <a class="jxr_linenumber" name="L1384" href="#L1384">1384</a> 
 <a class="jxr_linenumber" name="L1385" href="#L1385">1385</a> 	@Override <em class="jxr_comment">/* Overridden from Context */</em>