diff --git a/src/main/java/com/fasterxml/jackson/databind/deser/std/UntypedObjectDeserializer.java b/src/main/java/com/fasterxml/jackson/databind/deser/std/UntypedObjectDeserializer.java index d1740c11b9..c75d8b18fc 100644 --- a/src/main/java/com/fasterxml/jackson/databind/deser/std/UntypedObjectDeserializer.java +++ b/src/main/java/com/fasterxml/jackson/databind/deser/std/UntypedObjectDeserializer.java @@ -218,32 +218,30 @@ public JsonDeserializer createContextual(DeserializationContext ctxt, boolean preventMerge = (property == null) && Boolean.FALSE.equals(ctxt.getConfig().getDefaultMergeable(Object.class)); // 31-Aug-2024: [databind#4680] Allow custom key deserializer for Object.class deserialization - KeyDeserializer keyDeser = ctxt.findKeyDeserializer(ctxt.constructType(Object.class), property); - boolean isStdKeyDeserImpl = ClassUtil.isJacksonStdImpl(keyDeser); + KeyDeserializer customKeyDeser = ctxt.findKeyDeserializer(ctxt.constructType(Object.class), property); + // but make sure to ignore standard/default key deserializer (perf optimization) + if (customKeyDeser != null) { + if (ClassUtil.isJacksonStdImpl(customKeyDeser)) { + customKeyDeser = null; + } + } // 20-Apr-2014, tatu: If nothing custom, let's use "vanilla" instance, // simpler and can avoid some of delegation if ((_stringDeserializer == null) && (_numberDeserializer == null) && (_mapDeserializer == null) && (_listDeserializer == null) - && getClass() == UntypedObjectDeserializer.class - && isStdKeyDeserImpl) { + && (customKeyDeser == null) + && getClass() == UntypedObjectDeserializer.class) { return UntypedObjectDeserializerNR.instance(preventMerge); } - UntypedObjectDeserializer untyped = null; + UntypedObjectDeserializer deser = this; if (preventMerge != _nonMerging) { - untyped = new UntypedObjectDeserializer(this, preventMerge); - } - if (!isStdKeyDeserImpl) { - if (untyped == null) { - untyped = new UntypedObjectDeserializer(this, keyDeser); - } else { - untyped = new UntypedObjectDeserializer(untyped, keyDeser); - } + deser = new UntypedObjectDeserializer(deser, preventMerge); } - if (untyped != null) { - return untyped; + if (customKeyDeser != null) { + deser = new UntypedObjectDeserializer(deser, customKeyDeser); } - return this; + return deser; } /*