dependabot[bot] opened a new pull request, #21049:
URL: https://github.com/apache/camel/pull/21049

   Bumps [com.cedarsoftware:java-util](https://github.com/jdereg/java-util) 
from 4.84.0 to 4.87.0.
   <details>
   <summary>Changelog</summary>
   <p><em>Sourced from <a 
href="https://github.com/jdereg/java-util/blob/master/changelog.md";>com.cedarsoftware:java-util's
 changelog</a>.</em></p>
   <blockquote>
   <h4>4.87.0  - 2026-01-26</h4>
   <ul>
   <li><strong>BUILD</strong>: Version alignment with json-io 4.87.0
   <ul>
   <li>Keeping java-util and json-io version numbers synchronized simplifies 
dependency management and ensures compatibility</li>
   </ul>
   </li>
   </ul>
   <h4>4.86.0  - 2025-01-26</h4>
   <ul>
   <li><strong>PERFORMANCE</strong>: <code>CompactMap</code> - Multiple 
optimizations reducing memory allocation and improving iteration performance
   <ul>
   <li>Fixed redundant <code>get()</code> call in 
<code>entrySet().contains()</code> - now reuses the result instead of calling 
both <code>get()</code> and <code>containsKey()</code></li>
   <li>Use <code>getCachedLegacyConstructed()</code> consistently in 
<code>switchBackingFromMapToArray()</code> instead of calling 
<code>getClass().getName().endsWith()</code></li>
   <li>Cache <code>CompactMapComparator</code> instances statically - 4 
pre-created comparators for all combinations of case-insensitive and reverse 
ordering</li>
   <li>Added <code>isArraySorted()</code> check in <code>quickSort()</code> to 
skip unnecessary sorting during iteration (common case since binary insertion 
in <code>put()</code> maintains order)</li>
   </ul>
   </li>
   </ul>
   <h4>4.85.0  - 2025-01-24</h4>
   <ul>
   <li><strong>PERFORMANCE</strong>: <code>ClassUtilities</code> - Lock-free 
cache operations using CAS-based removal
   <ul>
   <li>Replaced synchronized blocks in <code>fromCache()</code>, 
<code>toCache()</code>, and <code>drainQueue()</code> with 
<code>ConcurrentHashMap.remove(key, value)</code></li>
   <li>CAS-based removal only removes if the exact WeakReference is still 
present, preventing race conditions</li>
   <li>Eliminates lock contention in high-throughput class loading 
scenarios</li>
   </ul>
   </li>
   <li><strong>PERFORMANCE</strong>: <code>ClassUtilities</code> - Added cache 
for assignable type lookups in <code>getArgForType()</code>
   <ul>
   <li>New <code>ASSIGNABLE_TYPE_CACHE</code> using 
<code>ClassValueMap&lt;Optional&lt;Supplier&lt;Object&gt;&gt;&gt;</code> avoids 
repeated O(n) scans of <code>ASSIGNABLE_CLASS_MAPPING</code></li>
   <li>Uses <code>Optional</code> to distinguish &quot;no match found&quot; 
(<code>Optional.empty()</code>) from &quot;not yet cached&quot; 
(<code>null</code>)</li>
   <li>Improves constructor parameter resolution performance for repeated type 
lookups</li>
   </ul>
   </li>
   <li><strong>PERFORMANCE</strong>: <code>ClassUtilities</code> - Optimized 
synthetic parameter name detection
   <ul>
   <li>Added <code>isSyntheticArgName()</code> method using efficient string 
operations instead of regex</li>
   <li>Avoids <code>Pattern.matcher().matches()</code> overhead for checking 
&quot;arg0&quot;, &quot;arg1&quot;, etc. patterns</li>
   <li>Used in constructor parameter resolution to detect compiler-generated 
names</li>
   </ul>
   </li>
   <li><strong>PERFORMANCE</strong>: <code>DeepEquals</code> - Replace O(n²) 
visited set copying with O(1) ScopedSet for unordered collections
   <ul>
   <li>Previously, comparing unordered collections copied the entire visited 
set for each probe element (O(n × k))</li>
   <li>New <code>ScopedSet</code> wrapper creates a lightweight view with O(1) 
creation time</li>
   <li>Tracks local additions separately and discards them when probe 
completes</li>
   <li>Significant improvement for comparing large unordered collections/maps 
with cycles</li>
   </ul>
   </li>
   <li><strong>PERFORMANCE</strong>: <code>DeepEquals</code> - Multiple 
optimizations reducing per-comparison overhead
   <ul>
   <li>Replaced <code>ConcurrentSet</code> with <code>HashSet</code> for 
visited tracking - no concurrent access occurs</li>
   <li>Cache system properties at class load time instead of parsing on every 
call</li>
   <li>Simplified <code>hashCode()</code> by removing unnecessary 
<code>finalizeHash()</code> call</li>
   </ul>
   </li>
   <li><strong>IMPROVED</strong>: <code>ConcurrentNavigableSetNullSafe</code> - 
Changed sentinel from String to Object instance
   <ul>
   <li>Previous <code>&quot;null_&quot; + UUID.randomUUID()</code> String could 
theoretically collide with user data</li>
   <li>New <code>new Object()</code> sentinel is guaranteed unique and cannot 
collide</li>
   <li>Also changed from <code>.equals()</code> to identity comparison 
(<code>==</code>) for sentinel detection</li>
   </ul>
   </li>
   <li><strong>BUG FIX</strong>: <code>ClassValueMap</code> - Fixed 
<code>clear()</code> race condition that could leave permanently stale cache 
entries
   <ul>
   <li>Previous order: invalidate cache → clear backingMap (allowed concurrent 
<code>get()</code> to repopulate cache from still-populated backingMap)</li>
   <li>Fixed order: snapshot keys → clear backingMap → invalidate cache 
(ensures any <code>computeValue</code> after clear sees empty map)</li>
   <li>After <code>clear()</code> completes, all subsequent <code>get()</code> 
calls now see correct state</li>
   </ul>
   </li>
   <li><strong>BUG FIX</strong>: <code>ConcurrentNavigableMapNullSafe</code> - 
Fixed <code>ClassCastException</code> on sub-map views
   <ul>
   <li>Navigational methods (<code>lowerKey</code>, <code>floorKey</code>, 
<code>ceilingKey</code>, <code>higherKey</code>, etc.) incorrectly cast to 
<code>ConcurrentSkipListMap</code></li>
   <li>Sub-map, head-map, tail-map, and descending-map views are not 
<code>ConcurrentSkipListMap</code> instances</li>
   <li>Fixed by casting to <code>ConcurrentNavigableMap</code> instead (the 
interface that defines these methods)</li>
   </ul>
   </li>
   <li><strong>BUG FIX</strong>: <code>ConcurrentNavigableSetNullSafe</code> - 
Fixed user comparators that don't handle nulls throwing NPE
   <ul>
   <li>Comparators like <code>String.CASE_INSENSITIVE_ORDER</code> would throw 
NPE when comparing null elements</li>
   <li>Wrapper now gracefully falls back to default null ordering (nulls &gt; 
non-nulls) if comparator throws NPE</li>
   <li>User comparators that handle nulls (via 
<code>Comparator.nullsFirst/nullsLast</code> or custom handling) still control 
null ordering</li>
   </ul>
   </li>
   <li><strong>BUILD</strong>: Updated json-io test dependency from 4.83.0 to 
4.84.0</li>
   </ul>
   </blockquote>
   </details>
   <details>
   <summary>Commits</summary>
   <ul>
   <li><a 
href="https://github.com/jdereg/java-util/commit/60d880ffbbc0e5f8e413513b827f1f00b6573576";><code>60d880f</code></a>
 Bump version to 4.87.0</li>
   <li><a 
href="https://github.com/jdereg/java-util/commit/df4457f32988260a8ba6374fc13ec64670016c85";><code>df4457f</code></a>
 Update json-io test dependency to 4.85.0</li>
   <li><a 
href="https://github.com/jdereg/java-util/commit/fdda14259254977aafc90877a119be9e1bc2bffe";><code>fdda142</code></a>
 Bump version to 4.86.0</li>
   <li><a 
href="https://github.com/jdereg/java-util/commit/fab239f02711d832786608709fea6ddf74ca9043";><code>fab239f</code></a>
 Performance: CompactMap optimizations</li>
   <li><a 
href="https://github.com/jdereg/java-util/commit/81651cf28157b215475519e0b5bd83079308b419";><code>81651cf</code></a>
 Change Benefits and More Utilities headers to blue</li>
   <li><a 
href="https://github.com/jdereg/java-util/commit/b76c423c80ab11da36a5aaf87b02194fbd904737";><code>b76c423</code></a>
 Move java-util logo right, double left margin</li>
   <li><a 
href="https://github.com/jdereg/java-util/commit/1ef82953cd1ebe6139037eff4e2b883d9cb5bbf2";><code>1ef8295</code></a>
 Bump cache version to v=3</li>
   <li><a 
href="https://github.com/jdereg/java-util/commit/4580f535d46cfd36f7db1cc87fdcf90ab866ace9";><code>4580f53</code></a>
 Docs: Reduce vertical spacing, make infographic wider</li>
   <li><a 
href="https://github.com/jdereg/java-util/commit/ef2184688d09e0a4d1f267c617aa1e5b9d8f5679";><code>ef21846</code></a>
 Add cache-busting param to infographic URL</li>
   <li><a 
href="https://github.com/jdereg/java-util/commit/f4606450e71ca02b0113bdeae902bbaf6a6c3ce6";><code>f460645</code></a>
 Docs: Move hero infographic to top, remove badge logo</li>
   <li>Additional commits viewable in <a 
href="https://github.com/jdereg/java-util/compare/4.84.0...4.87.0";>compare 
view</a></li>
   </ul>
   </details>
   <br />
   
   
   [![Dependabot compatibility 
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=com.cedarsoftware:java-util&package-manager=maven&previous-version=4.84.0&new-version=4.87.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
   
   Dependabot will resolve any conflicts with this PR as long as you don't 
alter it yourself. You can also trigger a rebase manually by commenting 
`@dependabot rebase`.
   
   [//]: # (dependabot-automerge-start)
   [//]: # (dependabot-automerge-end)
   
   ---
   
   <details>
   <summary>Dependabot commands and options</summary>
   <br />
   
   You can trigger Dependabot actions by commenting on this PR:
   - `@dependabot rebase` will rebase this PR
   - `@dependabot recreate` will recreate this PR, overwriting any edits that 
have been made to it
   - `@dependabot merge` will merge this PR after your CI passes on it
   - `@dependabot squash and merge` will squash and merge this PR after your CI 
passes on it
   - `@dependabot cancel merge` will cancel a previously requested merge and 
block automerging
   - `@dependabot reopen` will reopen this PR if it is closed
   - `@dependabot close` will close this PR and stop Dependabot recreating it. 
You can achieve the same result by closing it manually
   - `@dependabot show <dependency name> ignore conditions` will show all of 
the ignore conditions of the specified dependency
   - `@dependabot ignore this major version` will close this PR and stop 
Dependabot creating any more for this major version (unless you reopen the PR 
or upgrade to it yourself)
   - `@dependabot ignore this minor version` will close this PR and stop 
Dependabot creating any more for this minor version (unless you reopen the PR 
or upgrade to it yourself)
   - `@dependabot ignore this dependency` will close this PR and stop 
Dependabot creating any more for this dependency (unless you reopen the PR or 
upgrade to it yourself)
   
   
   </details>


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to