diff --git a/jr-objects/src/main/java/com/fasterxml/jackson/jr/ob/JSON.java b/jr-objects/src/main/java/com/fasterxml/jackson/jr/ob/JSON.java index 3e3bf115..49f84c90 100644 --- a/jr-objects/src/main/java/com/fasterxml/jackson/jr/ob/JSON.java +++ b/jr-objects/src/main/java/com/fasterxml/jackson/jr/ob/JSON.java @@ -1685,6 +1685,11 @@ private static class ExtContextImpl extends ExtensionContext { _builder = b; } + @Override + public boolean isEnabled(JSON.Feature feature) { + return _builder.isEnabled(feature); + } + @Override public ExtensionContext setTreeCodec(TreeCodec tc) { _builder.treeCodec(tc); diff --git a/jr-objects/src/main/java/com/fasterxml/jackson/jr/ob/api/ExtensionContext.java b/jr-objects/src/main/java/com/fasterxml/jackson/jr/ob/api/ExtensionContext.java index 743c7108..d43a1cc2 100644 --- a/jr-objects/src/main/java/com/fasterxml/jackson/jr/ob/api/ExtensionContext.java +++ b/jr-objects/src/main/java/com/fasterxml/jackson/jr/ob/api/ExtensionContext.java @@ -1,6 +1,7 @@ package com.fasterxml.jackson.jr.ob.api; import com.fasterxml.jackson.core.TreeCodec; +import com.fasterxml.jackson.jr.ob.JSON; /** * API that lets {@link com.fasterxml.jackson.jr.ob.JacksonJrExtension}s to register handlers @@ -10,6 +11,19 @@ */ public abstract class ExtensionContext { + // // // Config access + + /** + * Method for checking whether given {@code JSON.Feature} is enabled. + * + * @param feature Feature to check + * + * @return True if given {@code JSON.Feature} is enabled; {@code false} if not + * + * @since 2.17 + */ + public abstract boolean isEnabled(JSON.Feature feature); + // // // Override of (and access to) singleton handlers /** diff --git a/jr-stree/src/main/java/com/fasterxml/jackson/jr/stree/JacksonJrsTreeCodec.java b/jr-stree/src/main/java/com/fasterxml/jackson/jr/stree/JacksonJrsTreeCodec.java index ac77559b..48a7a9db 100644 --- a/jr-stree/src/main/java/com/fasterxml/jackson/jr/stree/JacksonJrsTreeCodec.java +++ b/jr-stree/src/main/java/com/fasterxml/jackson/jr/stree/JacksonJrsTreeCodec.java @@ -16,8 +16,11 @@ public class JacksonJrsTreeCodec extends TreeCodec public static final JacksonJrsTreeCodec SINGLETON = new JacksonJrsTreeCodec(); - protected ObjectCodec _objectCodec; + protected final ObjectCodec _objectCodec; + // @since 2.17 + protected boolean _failOnDuplicateKeys; + public JacksonJrsTreeCodec() { this(null); } @@ -26,6 +29,11 @@ public JacksonJrsTreeCodec(ObjectCodec codec) { _objectCodec = codec; } + // @since 2.17 + public void setFailOnDuplicateKeys(boolean state) { + _failOnDuplicateKeys = state; + } + @SuppressWarnings("unchecked") @Override public T readTree(JsonParser p) throws IOException { diff --git a/jr-stree/src/main/java/com/fasterxml/jackson/jr/stree/JrSimpleTreeExtension.java b/jr-stree/src/main/java/com/fasterxml/jackson/jr/stree/JrSimpleTreeExtension.java index 9d8954f2..d3588fcc 100644 --- a/jr-stree/src/main/java/com/fasterxml/jackson/jr/stree/JrSimpleTreeExtension.java +++ b/jr-stree/src/main/java/com/fasterxml/jackson/jr/stree/JrSimpleTreeExtension.java @@ -1,5 +1,6 @@ package com.fasterxml.jackson.jr.stree; +import com.fasterxml.jackson.jr.ob.JSON; import com.fasterxml.jackson.jr.ob.JacksonJrExtension; import com.fasterxml.jackson.jr.ob.api.ExtensionContext; @@ -23,9 +24,10 @@ public JrSimpleTreeExtension() { public JrSimpleTreeExtension(JacksonJrsTreeCodec tc) { _codec = tc; } - + @Override protected void register(ExtensionContext ctxt) { + _codec.setFailOnDuplicateKeys(ctxt.isEnabled(JSON.Feature.FAIL_ON_DUPLICATE_MAP_KEYS)); ctxt.setTreeCodec(_codec); } } diff --git a/release-notes/VERSION-2.x b/release-notes/VERSION-2.x index 6d33f36e..e39aa513 100644 --- a/release-notes/VERSION-2.x +++ b/release-notes/VERSION-2.x @@ -15,6 +15,7 @@ Not yet released #7: Support deserialization of `int[]` (contributed by @Shounaks) +#131: Add mechanism for `JacksonJrExtension`s to access state of `JSON.Feature`s 2.17.0-rc1 (26-Feb-2024)