Skip to content

fix(deps): bump: bump com.cedarsoftware:json-io from 4.93.0 to 4.94.0#359

Open
dependabot[bot] wants to merge 1 commit into3.xfrom
dependabot/gradle/3.x/com.cedarsoftware-json-io-4.94.0
Open

fix(deps): bump: bump com.cedarsoftware:json-io from 4.93.0 to 4.94.0#359
dependabot[bot] wants to merge 1 commit into3.xfrom
dependabot/gradle/3.x/com.cedarsoftware-json-io-4.94.0

Conversation

@dependabot
Copy link
Contributor

@dependabot dependabot bot commented on behalf of github Feb 16, 2026

Bumps com.cedarsoftware:json-io from 4.93.0 to 4.94.0.

Changelog

Sourced from com.cedarsoftware:json-io's changelog.

4.94.0 - 2026-02-14

  • PERFORMANCE: Read-side scalar coercion hot paths refactored to avoid legacy coerceLong()/coerceDouble() indirection:
    • Added target-kind based scalar coercion (scalarTargetKind / fastScalarCoercion) in Resolver.
    • ObjectResolver / MapResolver now use precomputed scalar target kinds in array and field hot loops.
    • Primitive array assignment now uses direct no-allocation writes via shared tryAssignParsedScalarToArray(...). This reduces wrapper churn and removes repeated coercion dispatch overhead in numeric-heavy deserialization.
  • PERFORMANCE: JsonWriter.writeMapBody(...) (both Iterator and JsonObject paths) now uses specialized loop branches with hoisted invariants (skipNullFields, json5UnquotedKeys, maxStringLength) to reduce per-entry branch checks in map write hot loops.
  • MAINTENANCE/PERFORMANCE: Inlined and removed now-redundant MapResolver.fastPrimitiveCoercion(...) wrapper after scalar coercion consolidation.
  • MAINTENANCE: Removed unused private method ToonWriter.writeCollectionElements(Collection<?>).
  • PERFORMANCE: JsonParser now uses a parser-only JsonObject.appendFieldForParser() fast path for object field insertion, avoiding JsonObject.put() duplicate-key search (indexOf) on the common unique-key path. This reduces parse-time key insertion overhead and shifts work from linear duplicate checks to direct append.
  • PERFORMANCE: Added thread-local buffer recycling in JsonIo String-based JSON paths:
    • toJson(Object, WriteOptions) now reuses FastByteArrayOutputStream and FastWriter buffers.
    • toJava(String, ...) and toJava(InputStream, ...) builder paths now reuse FastReader char/pushback buffers. This removes repeated stream/buffer construction churn in benchmark loops and reduces allocation pressure.
  • PERFORMANCE: Read numeric pipeline optimized:
    • JsonParser floating-point parsing now takes a direct Double.parseDouble() fast path when configured for DOUBLE mode, bypassing minimal-number analysis in the default path.
    • ObjectResolver.traverseArray() now has a primitive-array direct assignment path for parsed JSON Long/Double values, avoiding intermediate wrapper coercion in hot loops.
  • PERFORMANCE: JsonWriter custom-writer gate checks are now class-cached via shared DefaultWriteOptions caches (using ClassValueMap):
    • Added per-declared-class gate cache for isNotCustomWrittenClass and declared custom writer resolution.
    • Runtime custom writer resolution now reuses the existing getCustomWriter()/writerCache path after gate pass (no duplicate runtime cache layer). This lowers hot-loop cost in writeUsingCustomWriter() / getCustomWriterIfAllowed(), avoids per-JsonWriter cache construction churn in short-lived writer workloads, and removes redundant runtime cache indirection.
  • PERFORMANCE: JsonWriter now consistently honors cycleSupport(false) by bypassing objsReferenced / @id lookup work across write hot paths (object/map/collection/array/custom writer) while retaining lightweight visited-marker guarding to prevent infinite recursion on accidental cyclic input.
  • PERFORMANCE: Added cached write-field planning (WriteFieldPlan) in WriteOptionsBuilder and switched JsonWriter object/enum/trace field loops to use precomputed per-class metadata (serialized key literal, declared container generic types, and trace-skip hints), reducing repeated reflection/generic analysis in hot paths.
  • PERFORMANCE: Added cached read injector planning (InjectorPlan) in ReadOptionsBuilder and wired ObjectResolver/Resolver field lookup paths to use it, reducing repeated map resolution overhead during traversal and unresolved-reference patching.
  • PERFORMANCE: Accessor.retrieve() now uses sticky fallback flags for lambda/VarHandle/MethodHandle paths; once an optimized path fails, it is bypassed on subsequent calls instead of repeatedly throwing/falling back.
  • PERFORMANCE: Injector.inject() now applies assignability-based pre-conversion before reflective set/invoke, reducing exception-driven control flow in hot assignment paths while preserving fallback conversion behavior.
  • BUG FIX / PERFORMANCE: ObjectResolver generic inference now runs incrementally (on-demand) and no longer relies on the deep markUntypedObjects() pre-pass. This reduces upfront traversal work while preserving nested generic correctness across parameterized object fields, collections, and maps.
  • BUG FIX: ObjectResolver map generic typing now preserves and applies both key and value generic types during traversal, fixing cases where complex map keys/values could remain as JsonObject instead of resolving to target types.
  • CLEANUP: Removed legacy pre-pass code path and associated temporary API toggles (ReadOptions.useLegacyMarkUntypedObjectsPrepass() and ReadOptionsBuilder.useLegacyMarkUntypedObjectsPrepass(boolean)).
  • BUG FIX: JsonWriter.write() now always clears objVisited/objsReferenced in a finally block, preventing state leakage and object retention if write/flush throws.
  • BUG FIX: JsonWriter.traceReferences() object-limit handling now enforces limits without off-by-one behavior at the configured boundary.
  • PERFORMANCE: JsonWriter string escaping/writing hot paths optimized: removed String.format("\\u%04x", ...) from control-char escaping, added precomputed control escape strings, and unified smart-quote decision logic to avoid duplicated scanning code.
  • PERFORMANCE: JsonParser hot paths optimized with ASCII-only lowercase conversion for token reads, lookup-table hex parsing, bounded string dedupe caching, and simplified strict-mode whitespace/comment handling.
  • MAINTENANCE: Removed redundant strict-mode checks in skipWhitespaceRead() that were unreachable after strict-branch early return.
  • MAINTENANCE: Replaced resolver/read-path usage of Converter “simple type” APIs with internal Resolver.isPseudoPrimitive(Class<?>) gating (string-convertible, non-container, non-enum scalar-like types). This reduces dependency on confusing Converter simple-type API surface while preserving behavior in Resolver, ObjectResolver, and MapResolver.
  • MAINTENANCE: Refined Resolver.isPseudoPrimitive(Class<?>) to align with read-side semantics by checking isSimpleTypeConversionSupported(String.class, type) (materializable from JSON scalar strings), while still excluding enums.
  • MAINTENANCE: Simplified map pre-conversion decision logic in Resolver.toJava() by consolidating overlapping conditions into focused helpers (isMapLikeJsonType, shouldEarlyConvertMapToNonMap, resolveMapPojoValueTypeForPreConversion, shouldConvertMapValueTypeAsPojo) with parity behavior for map-to-POJO and parameterized map value materialization paths.
  • MAINTENANCE: ObjectResolver scalar fast-path conversion gates now use converter.isConversionSupportedFor(source, target) in both assignField() and readWithFactoryIfExists() (with existing scalar/simple checks retained), reducing dependence on the pair-form "simple type" API without changing behavior.
  • TESTING: Added ReadWithFactoryDeadCodeTest.testReadWithFactoryIfExists_primitiveStringMismatchUsesConversionSupportGate() to verify the primitive/String mismatch fast path uses conversion support checks and preserves null-return fallback for unsupported scalar targets.
  • BUG FIX: ObjectResolver.processJsonObjectElement() now preserves explicit element @type metadata in arrays by only applying declared component type when the element type is missing. This fixes polymorphic array deserialization where explicit subtype entries could be overwritten by the declared array component type.
  • TESTING: Added PolymorphicArrayElementTypeTest to verify explicit array element @type is honored over declared component type inference.
  • BUG FIX: Resolver.wrapException() now preserves the causal chain by constructing JsonIoException(message, cause) instead of creating a message-only wrapper. This restores root exception context for conversion failures.
  • TESTING: Added ResolverValueToTargetTest.conversionFailurePreservesCause() to assert conversion failure wrappers retain the original cause.
  • MAINTENANCE/PERFORMANCE: ObjectResolver nested collection type-marking path was cleaned up by removing an unused collectionClass parameter and eliminating per-nested-array ArrayList copy allocation in handleArrayInCollection(). Nested arrays now reuse the existing JsonObject wrapper for traversal, reducing allocation churn in deep generic collection payloads.
  • MAINTENANCE: Version bump to 4.94.0, java-util dependency updated to 4.94.0.
Commits
  • 0b6e095 Refine Resolver pseudo-primitive gate to String->type semantics
  • 12aeb71 Optimize scalar coercion and map writer hot loops
  • e02ff5a Fix unknownTypeClass map instantiation to avoid copy-constructor path
  • 35f1adb Expand resolver read-path coverage and map-mode key handling
  • 4fc74da Replace simple-type converter gates with pseudo-primitive resolver checks
  • 9e38f0c Use isConversionSupportedFor in readWithFactory fast path
  • e7e08b6 Use general conversion support gate in assignField scalar path
  • d124195 Reduce iterator allocations in JsonWriter map and field loops
  • 7b08b25 Optimize read numeric pipeline in parser and array traversal
  • 6d2aaff Optimize JsonWriter custom-writer gate caching and remove redundant runtime c...
  • Additional commits viewable in compare view

Dependabot compatibility score

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 commands and options

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 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)

Bumps [com.cedarsoftware:json-io](https://github.com/jdereg/json-io) from 4.93.0 to 4.94.0.
- [Changelog](https://github.com/jdereg/json-io/blob/master/changelog.md)
- [Commits](jdereg/json-io@4.93.0...4.94.0)

---
updated-dependencies:
- dependency-name: com.cedarsoftware:json-io
  dependency-version: 4.94.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot bot added dependencies Pull requests that update a dependency file java Pull requests that update java code labels Feb 16, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file java Pull requests that update java code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants

Comments