diff --git a/ion/src/main/java/tools/jackson/dataformat/ion/IonFactory.java b/ion/src/main/java/tools/jackson/dataformat/ion/IonFactory.java index 4deaa730b..eaff178b8 100644 --- a/ion/src/main/java/tools/jackson/dataformat/ion/IonFactory.java +++ b/ion/src/main/java/tools/jackson/dataformat/ion/IonFactory.java @@ -61,13 +61,13 @@ public class IonFactory * Bitfield (set of flags) of all parser features that are enabled * by default. */ - protected final static int DEFAULT_ION_PARSER_FEATURE_FLAGS = IonParser.Feature.collectDefaults(); + protected final static int DEFAULT_ION_PARSER_FEATURE_FLAGS = IonReadFeature.collectDefaults(); /** * Bitfield (set of flags) of all generator features that are enabled * by default. */ - protected final static int DEFAULT_ION_GENERATOR_FEATURE_FLAGS = IonGenerator.Feature.collectDefaults(); + protected final static int DEFAULT_ION_GENERATOR_FEATURE_FLAGS = IonWriteFeature.collectDefaults(); /* /********************************************************************** @@ -206,14 +206,14 @@ public boolean canHandleBinaryNatively() { /** * Checked whether specified parser feature is enabled. */ - public final boolean isEnabled(IonParser.Feature f) { + public final boolean isEnabled(IonReadFeature f) { return (_formatReadFeatures & f.getMask()) != 0; } /** * Check whether specified generator feature is enabled. */ - public final boolean isEnabled(IonGenerator.Feature f) { + public final boolean isEnabled(IonWriteFeature f) { return (_formatWriteFeatures & f.getMask()) != 0; } @@ -234,13 +234,13 @@ public boolean canUseSchema(FormatSchema schema) { } @Override - public Class getFormatReadFeatureType() { - return IonParser.Feature.class; + public Class getFormatReadFeatureType() { + return IonReadFeature.class; } @Override - public Class getFormatWriteFeatureType() { - return IonGenerator.Feature.class; + public Class getFormatWriteFeatureType() { + return IonWriteFeature.class; } /* diff --git a/ion/src/main/java/tools/jackson/dataformat/ion/IonFactoryBuilder.java b/ion/src/main/java/tools/jackson/dataformat/ion/IonFactoryBuilder.java index 67c452e7c..c79382534 100644 --- a/ion/src/main/java/tools/jackson/dataformat/ion/IonFactoryBuilder.java +++ b/ion/src/main/java/tools/jackson/dataformat/ion/IonFactoryBuilder.java @@ -85,65 +85,65 @@ public IonFactoryBuilder ionSystem(IonSystem system) { // // // Parser features - public IonFactoryBuilder enable(IonParser.Feature f) { + public IonFactoryBuilder enable(IonReadFeature f) { _formatReadFeatures |= f.getMask(); return _this(); } - public IonFactoryBuilder enable(IonParser.Feature first, IonParser.Feature... other) { + public IonFactoryBuilder enable(IonReadFeature first, IonReadFeature... other) { _formatReadFeatures |= first.getMask(); - for (IonParser.Feature f : other) { + for (IonReadFeature f : other) { _formatReadFeatures |= f.getMask(); } return _this(); } - public IonFactoryBuilder disable(IonParser.Feature f) { + public IonFactoryBuilder disable(IonReadFeature f) { _formatReadFeatures &= ~f.getMask(); return _this(); } - public IonFactoryBuilder disable(IonParser.Feature first, IonParser.Feature... other) { + public IonFactoryBuilder disable(IonReadFeature first, IonReadFeature... other) { _formatReadFeatures &= ~first.getMask(); - for (IonParser.Feature f : other) { + for (IonReadFeature f : other) { _formatReadFeatures &= ~f.getMask(); } return _this(); } - public IonFactoryBuilder configure(IonParser.Feature f, boolean state) { + public IonFactoryBuilder configure(IonReadFeature f, boolean state) { return state ? enable(f) : disable(f); } // // // Generator features - public IonFactoryBuilder enable(IonGenerator.Feature f) { + public IonFactoryBuilder enable(IonWriteFeature f) { _formatWriteFeatures |= f.getMask(); return _this(); } - public IonFactoryBuilder enable(IonGenerator.Feature first, IonGenerator.Feature... other) { + public IonFactoryBuilder enable(IonWriteFeature first, IonWriteFeature... other) { _formatWriteFeatures |= first.getMask(); - for (IonGenerator.Feature f : other) { + for (IonWriteFeature f : other) { _formatWriteFeatures |= f.getMask(); } return _this(); } - public IonFactoryBuilder disable(IonGenerator.Feature f) { + public IonFactoryBuilder disable(IonWriteFeature f) { _formatWriteFeatures &= ~f.getMask(); return _this(); } - public IonFactoryBuilder disable(IonGenerator.Feature first, IonGenerator.Feature... other) { + public IonFactoryBuilder disable(IonWriteFeature first, IonWriteFeature... other) { _formatWriteFeatures &= ~first.getMask(); - for (IonGenerator.Feature f : other) { + for (IonWriteFeature f : other) { _formatWriteFeatures &= ~f.getMask(); } return _this(); } - public IonFactoryBuilder configure(IonGenerator.Feature f, boolean state) { + public IonFactoryBuilder configure(IonWriteFeature f, boolean state) { return state ? enable(f) : disable(f); } diff --git a/ion/src/main/java/tools/jackson/dataformat/ion/IonGenerator.java b/ion/src/main/java/tools/jackson/dataformat/ion/IonGenerator.java index de25ae860..04b050b91 100644 --- a/ion/src/main/java/tools/jackson/dataformat/ion/IonGenerator.java +++ b/ion/src/main/java/tools/jackson/dataformat/ion/IonGenerator.java @@ -40,58 +40,6 @@ public class IonGenerator extends GeneratorBase { - /** - * Enumeration that defines all toggleable features for Ion generators - */ - public enum Feature implements FormatFeature - { - /** - * Whether to use Ion native Type Id construct for indicating type (true); - * or "generic" type property (false) when writing. Former works better for - * systems that are Ion-centric; latter may be better choice for interoperability, - * when converting between formats or accepting other formats. - *

- * Enabled by default for backwards compatibility as that has been the behavior - * of `jackson-dataformat-ion` since 2.9 (first official public version) - * - * @see The Ion Specification - * - * @since 2.12 - */ - USE_NATIVE_TYPE_ID(true), - ; - - protected final boolean _defaultState; - protected final int _mask; - - /** - * Method that calculates bit set (flags) of all features that - * are enabled by default. - */ - public static int collectDefaults() - { - int flags = 0; - for (Feature f : values()) { - if (f.enabledByDefault()) { - flags |= f.getMask(); - } - } - return flags; - } - - private Feature(boolean defaultState) { - _defaultState = defaultState; - _mask = (1 << ordinal()); - } - - @Override - public boolean enabledByDefault() { return _defaultState; } - @Override - public boolean enabledIn(int flags) { return (flags & _mask) != 0; } - @Override - public int getMask() { return _mask; } - } - /* /********************************************************************** /* Basic configuration @@ -105,7 +53,7 @@ private Feature(boolean defaultState) { /** * Bit flag composed of bits that indicate which - * {@link IonGenerator.Feature}s + * {@link IonWriteFeature}s * are enabled. */ protected int _formatFeatures; @@ -239,7 +187,7 @@ public void flush() public boolean canWriteTypeId() { // yes, Ion does support Native Type Ids! // 29-Nov-2020, jobarr: Except as per [dataformats-binary#225] might not want to... - return Feature.USE_NATIVE_TYPE_ID.enabledIn(_formatFeatures); + return IonWriteFeature.USE_NATIVE_TYPE_ID.enabledIn(_formatFeatures); } @Override diff --git a/ion/src/main/java/tools/jackson/dataformat/ion/IonObjectMapper.java b/ion/src/main/java/tools/jackson/dataformat/ion/IonObjectMapper.java index 925816eff..47992e4e1 100644 --- a/ion/src/main/java/tools/jackson/dataformat/ion/IonObjectMapper.java +++ b/ion/src/main/java/tools/jackson/dataformat/ion/IonObjectMapper.java @@ -91,21 +91,21 @@ protected MapperBuilderState _saveState() { /****************************************************************** */ - public Builder enable(IonParser.Feature... features) { - for (IonParser.Feature f : features) { + public Builder enable(IonReadFeature... features) { + for (IonReadFeature f : features) { _formatReadFeatures |= f.getMask(); } return this; } - public Builder disable(IonParser.Feature... features) { - for (IonParser.Feature f : features) { + public Builder disable(IonReadFeature... features) { + for (IonReadFeature f : features) { _formatReadFeatures &= ~f.getMask(); } return this; } - public Builder configure(IonParser.Feature feature, boolean state) + public Builder configure(IonReadFeature feature, boolean state) { if (state) { _formatReadFeatures |= feature.getMask(); @@ -115,21 +115,21 @@ public Builder configure(IonParser.Feature feature, boolean state) return this; } - public Builder enable(IonGenerator.Feature... features) { - for (IonGenerator.Feature f : features) { + public Builder enable(IonWriteFeature... features) { + for (IonWriteFeature f : features) { _formatWriteFeatures |= f.getMask(); } return this; } - public Builder disable(IonGenerator.Feature... features) { - for (IonGenerator.Feature f : features) { + public Builder disable(IonWriteFeature... features) { + for (IonWriteFeature f : features) { _formatWriteFeatures &= ~f.getMask(); } return this; } - public Builder configure(IonGenerator.Feature feature, boolean state) + public Builder configure(IonWriteFeature feature, boolean state) { if (state) { _formatWriteFeatures |= feature.getMask(); diff --git a/ion/src/main/java/tools/jackson/dataformat/ion/IonParser.java b/ion/src/main/java/tools/jackson/dataformat/ion/IonParser.java index 641f2eef7..8772cf5a1 100644 --- a/ion/src/main/java/tools/jackson/dataformat/ion/IonParser.java +++ b/ion/src/main/java/tools/jackson/dataformat/ion/IonParser.java @@ -36,54 +36,6 @@ public class IonParser extends ParserMinimalBase { - /** - * Enumeration that defines all togglable features for Ion parsers. - */ - public enum Feature implements FormatFeature - { - /** - * Whether to expect Ion native Type Id construct for indicating type (true); - * or "generic" type property (false) when deserializing. - *

- * Enabled by default for backwards compatibility as that has been the behavior - * of `jackson-dataformat-ion` since 2.9 (first official public version) - * - * @see The Ion Specification - */ - USE_NATIVE_TYPE_ID(true), - ; - - final boolean _defaultState; - final int _mask; - - /** - * Method that calculates bit set (flags) of all features that - * are enabled by default. - */ - public static int collectDefaults() - { - int flags = 0; - for (Feature f : values()) { - if (f.enabledByDefault()) { - flags |= f.getMask(); - } - } - return flags; - } - - private Feature(boolean defaultState) { - _defaultState = defaultState; - _mask = (1 << ordinal()); - } - - @Override - public boolean enabledByDefault() { return _defaultState; } - @Override - public boolean enabledIn(int flags) { return (flags & _mask) != 0; } - @Override - public int getMask() { return _mask; } - } - // @since 2.14 protected final static JacksonFeatureSet ION_READ_CAPABILITIES = DEFAULT_READ_CAPABILITIES.with(StreamReadCapability.EXACT_FLOATS); @@ -100,7 +52,7 @@ private Feature(boolean defaultState) { /** * Bit flag composed of bits that indicate which - * {@link IonParser.Feature}s are enabled. + * {@link IonReadFeature}s are enabled. */ protected int _formatFeatures; @@ -173,7 +125,7 @@ public IOContext ioContext() { public boolean canReadTypeId() { // yes, Ion got 'em // 31-Mar-2021, manaigrn: but we might want to ignore them as per [dataformats-binary#270] - return Feature.USE_NATIVE_TYPE_ID.enabledIn(_formatFeatures); + return IonReadFeature.USE_NATIVE_TYPE_ID.enabledIn(_formatFeatures); } @Override diff --git a/ion/src/main/java/tools/jackson/dataformat/ion/IonReadFeature.java b/ion/src/main/java/tools/jackson/dataformat/ion/IonReadFeature.java new file mode 100644 index 000000000..a9d539e79 --- /dev/null +++ b/ion/src/main/java/tools/jackson/dataformat/ion/IonReadFeature.java @@ -0,0 +1,52 @@ +package tools.jackson.dataformat.ion; + +import tools.jackson.core.FormatFeature; + +/** + * Enumeration that defines all togglable features for Ion parsers. + *

+ * NOTE: in Jackson 2.x this was named {@code IonParser.Feature}. + */ +public enum IonReadFeature implements FormatFeature +{ + /** + * Whether to expect Ion native Type Id construct for indicating type (true); + * or "generic" type property (false) when deserializing. + *

+ * Enabled by default. + * + * @see The Ion Specification + */ + USE_NATIVE_TYPE_ID(true), + ; + + private final boolean _defaultState; + private final int _mask; + + /** + * Method that calculates bit set (flags) of all features that + * are enabled by default. + */ + public static int collectDefaults() + { + int flags = 0; + for (IonReadFeature f : values()) { + if (f.enabledByDefault()) { + flags |= f.getMask(); + } + } + return flags; + } + + private IonReadFeature(boolean defaultState) { + _defaultState = defaultState; + _mask = (1 << ordinal()); + } + + @Override + public boolean enabledByDefault() { return _defaultState; } + @Override + public boolean enabledIn(int flags) { return (flags & _mask) != 0; } + @Override + public int getMask() { return _mask; } +} diff --git a/ion/src/main/java/tools/jackson/dataformat/ion/IonWriteFeature.java b/ion/src/main/java/tools/jackson/dataformat/ion/IonWriteFeature.java new file mode 100644 index 000000000..0a127e9ce --- /dev/null +++ b/ion/src/main/java/tools/jackson/dataformat/ion/IonWriteFeature.java @@ -0,0 +1,54 @@ +package tools.jackson.dataformat.ion; + +import tools.jackson.core.FormatFeature; + +/** + * Enumeration that defines all toggleable features for Ion generators + *

+ * NOTE: in Jackson 2.x this was named {@code IonGenerator.Feature}. + */ +public enum IonWriteFeature implements FormatFeature +{ + /** + * Whether to use Ion native Type Id construct for indicating type (true); + * or "generic" type property (false) when writing. Former works better for + * systems that are Ion-centric; latter may be better choice for interoperability, + * when converting between formats or accepting other formats. + *

+ * Enabled by default. + * + * @see The Ion Specification + */ + USE_NATIVE_TYPE_ID(true), + ; + + private final boolean _defaultState; + private final int _mask; + + /** + * Method that calculates bit set (flags) of all features that + * are enabled by default. + */ + public static int collectDefaults() + { + int flags = 0; + for (IonWriteFeature f : values()) { + if (f.enabledByDefault()) { + flags |= f.getMask(); + } + } + return flags; + } + + private IonWriteFeature(boolean defaultState) { + _defaultState = defaultState; + _mask = (1 << ordinal()); + } + + @Override + public boolean enabledByDefault() { return _defaultState; } + @Override + public boolean enabledIn(int flags) { return (flags & _mask) != 0; } + @Override + public int getMask() { return _mask; } +} \ No newline at end of file diff --git a/ion/src/test/java/tools/jackson/dataformat/ion/fuzz/Fuzz417_64721InvalidIonTest.java b/ion/src/test/java/tools/jackson/dataformat/ion/fuzz/Fuzz417_64721InvalidIonTest.java index dc043165f..980f7d57b 100644 --- a/ion/src/test/java/tools/jackson/dataformat/ion/fuzz/Fuzz417_64721InvalidIonTest.java +++ b/ion/src/test/java/tools/jackson/dataformat/ion/fuzz/Fuzz417_64721InvalidIonTest.java @@ -20,7 +20,7 @@ enum EnumFuzz { public void testFuzz64721AssertionException() throws Exception { IonFactory f = IonFactory .builderForBinaryWriters() - .enable(IonParser.Feature.USE_NATIVE_TYPE_ID) + .enable(IonReadFeature.USE_NATIVE_TYPE_ID) .build(); IonObjectMapper mapper = IonObjectMapper.builder(f).build(); try { diff --git a/ion/src/test/java/tools/jackson/dataformat/ion/fuzz/Fuzz420_65062_65083IOOBETest.java b/ion/src/test/java/tools/jackson/dataformat/ion/fuzz/Fuzz420_65062_65083IOOBETest.java index 38ec9bdb6..41f9e6e0b 100644 --- a/ion/src/test/java/tools/jackson/dataformat/ion/fuzz/Fuzz420_65062_65083IOOBETest.java +++ b/ion/src/test/java/tools/jackson/dataformat/ion/fuzz/Fuzz420_65062_65083IOOBETest.java @@ -18,7 +18,7 @@ public class Fuzz420_65062_65083IOOBETest public void testFuzz6506265083IOOBE() throws Exception { IonFactory f = IonFactory .builderForTextualWriters() - .enable(IonParser.Feature.USE_NATIVE_TYPE_ID) + .enable(IonReadFeature.USE_NATIVE_TYPE_ID) .build(); IonObjectMapper mapper = IonObjectMapper.builder(f).build(); try (InputStream in = getClass().getResourceAsStream("/data/fuzz-420.ion")) { diff --git a/ion/src/test/java/tools/jackson/dataformat/ion/polymorphism/PolymorphicTypeAnnotationsTest.java b/ion/src/test/java/tools/jackson/dataformat/ion/polymorphism/PolymorphicTypeAnnotationsTest.java index ad26ed9ad..c64aeeb03 100644 --- a/ion/src/test/java/tools/jackson/dataformat/ion/polymorphism/PolymorphicTypeAnnotationsTest.java +++ b/ion/src/test/java/tools/jackson/dataformat/ion/polymorphism/PolymorphicTypeAnnotationsTest.java @@ -6,7 +6,7 @@ import com.fasterxml.jackson.annotation.JsonSubTypes.Type; import tools.jackson.dataformat.ion.IonObjectMapper; -import tools.jackson.dataformat.ion.IonParser.Feature; +import tools.jackson.dataformat.ion.IonReadFeature; import com.fasterxml.jackson.annotation.JsonTypeInfo; @@ -53,7 +53,7 @@ public static class Container { @Test public void testNativeTypeIdsDisabledReadsTypeAnnotationsSuccessfully() throws IOException { IonObjectMapper mapper = IonObjectMapper.builder() - .disable(Feature.USE_NATIVE_TYPE_ID) + .disable(IonReadFeature.USE_NATIVE_TYPE_ID) .build(); Container containerWithBaseClass = mapper.readValue(CONTAINER_WITH_TYPED_OBJECT, Container.class); diff --git a/ion/src/test/java/tools/jackson/dataformat/ion/polymorphism/SerializationAnnotationsTest.java b/ion/src/test/java/tools/jackson/dataformat/ion/polymorphism/SerializationAnnotationsTest.java index 9a999546f..16c91b378 100644 --- a/ion/src/test/java/tools/jackson/dataformat/ion/polymorphism/SerializationAnnotationsTest.java +++ b/ion/src/test/java/tools/jackson/dataformat/ion/polymorphism/SerializationAnnotationsTest.java @@ -5,8 +5,8 @@ import com.amazon.ion.util.Equivalence; import com.fasterxml.jackson.annotation.JsonTypeInfo; -import tools.jackson.dataformat.ion.IonGenerator; import tools.jackson.dataformat.ion.IonObjectMapper; +import tools.jackson.dataformat.ion.IonWriteFeature; import org.junit.Assert; import org.junit.Before; @@ -54,7 +54,7 @@ public void testNativeTypeIdsEnabledOnWriteByDefault() throws IOException { @Test public void testNativeTypeIdsCanBeDisabledOnWrite() throws Exception { IonObjectMapper mapper = IonObjectMapper.builderForTextualWriters() - .disable(IonGenerator.Feature.USE_NATIVE_TYPE_ID) + .disable(IonWriteFeature.USE_NATIVE_TYPE_ID) .build(); IonValue subclassAsIon = mapper.writeValueAsIonValue(subclass); @@ -74,7 +74,7 @@ public void testNativeTypeIdsDisabledStillReadsNativeTypesSuccessfully() throws assertEqualIonValues(SUBCLASS_TYPED_BY_ANNOTATION, subclassAsIon); IonObjectMapper reader = IonObjectMapper.builderForTextualWriters() - .disable(IonGenerator.Feature.USE_NATIVE_TYPE_ID) + .disable(IonWriteFeature.USE_NATIVE_TYPE_ID) .build(); BaseClass roundTripInstance = reader.readValue(subclassAsIon, BaseClass.class); diff --git a/release-notes/VERSION b/release-notes/VERSION index 899d25e06..d5f3b610c 100644 --- a/release-notes/VERSION +++ b/release-notes/VERSION @@ -23,3 +23,5 @@ implementations) #522: JSTEP-8: rename `AvroParser.Feature` as `AvroReadFeature`, `AvroGenerator.Feature` as `AvroWriteFeature` #524: JSTEP-8: rename `CBORGenerator.Feature` as `CBORWriteFeature` +#526: JSTEP-8: rename `IonParser.Feature` as `IonReadFeature`, + `IonGenerator.Feature` as `IonWriteFeature`