diff --git a/src/main/java/com/fasterxml/jackson/databind/DeserializationConfig.java b/src/main/java/com/fasterxml/jackson/databind/DeserializationConfig.java index ebf8a8039c..706daa1de2 100644 --- a/src/main/java/com/fasterxml/jackson/databind/DeserializationConfig.java +++ b/src/main/java/com/fasterxml/jackson/databind/DeserializationConfig.java @@ -61,11 +61,6 @@ public final class DeserializationConfig */ protected final int _parserFeatures; - /** - * Bitflag of {@link com.fasterxml.jackson.core.JsonParser.Feature}s to enable/disable - */ - protected final int _parserFeaturesToChange; - /** * States of {@link com.fasterxml.jackson.core.FormatFeature}s to enable/disable. */ @@ -93,7 +88,6 @@ protected DeserializationConfig(DeserializationConfig src, _deserFeatures = src._deserFeatures; _problemHandlers = src._problemHandlers; _parserFeatures = src._parserFeatures; - _parserFeaturesToChange = src._parserFeaturesToChange; _formatReadFeatures = src._formatReadFeatures; _formatReadFeaturesToChange = src._formatReadFeaturesToChange; } @@ -102,7 +96,7 @@ protected DeserializationConfig(DeserializationConfig src, * @since 3.0 */ public DeserializationConfig(MapperBuilder b, - int mapperFeatures, int deserFeatures, + int mapperFeatures, int deserFeatures, int parserFeatures, SimpleMixInResolver mixins, RootNameLookup rootNames, ConfigOverrides configOverrides) { @@ -111,8 +105,7 @@ public DeserializationConfig(MapperBuilder b, mixins, rootNames, configOverrides); _deserFeatures = deserFeatures; _problemHandlers = null; - _parserFeatures = 0; - _parserFeaturesToChange = 0; + _parserFeatures = parserFeatures; _formatReadFeatures = 0; _formatReadFeaturesToChange = 0; } @@ -125,15 +118,13 @@ public DeserializationConfig(MapperBuilder b, */ private DeserializationConfig(DeserializationConfig src, - int mapperFeatures, int deserFeatures, - int parserFeatures, int parserFeatureMask, + int mapperFeatures, int deserFeatures, int parserFeatures, int formatFeatures, int formatFeatureMask) { super(src, mapperFeatures); _deserFeatures = deserFeatures; _problemHandlers = src._problemHandlers; _parserFeatures = parserFeatures; - _parserFeaturesToChange = parserFeatureMask; _formatReadFeatures = formatFeatures; _formatReadFeaturesToChange = formatFeatureMask; } @@ -148,7 +139,6 @@ private DeserializationConfig(DeserializationConfig src, SubtypeResolver str) _deserFeatures = src._deserFeatures; _problemHandlers = src._problemHandlers; _parserFeatures = src._parserFeatures; - _parserFeaturesToChange = src._parserFeaturesToChange; _formatReadFeatures = src._formatReadFeatures; _formatReadFeaturesToChange = src._formatReadFeaturesToChange; } @@ -159,7 +149,6 @@ private DeserializationConfig(DeserializationConfig src, BaseSettings base) _deserFeatures = src._deserFeatures; _problemHandlers = src._problemHandlers; _parserFeatures = src._parserFeatures; - _parserFeaturesToChange = src._parserFeaturesToChange; _formatReadFeatures = src._formatReadFeatures; _formatReadFeaturesToChange = src._formatReadFeaturesToChange; } @@ -170,7 +159,6 @@ private DeserializationConfig(DeserializationConfig src, JsonNodeFactory f) _deserFeatures = src._deserFeatures; _problemHandlers = src._problemHandlers; _parserFeatures = src._parserFeatures; - _parserFeaturesToChange = src._parserFeaturesToChange; _formatReadFeatures = src._formatReadFeatures; _formatReadFeaturesToChange = src._formatReadFeaturesToChange; } @@ -182,7 +170,6 @@ private DeserializationConfig(DeserializationConfig src, _deserFeatures = src._deserFeatures; _problemHandlers = problemHandlers; _parserFeatures = src._parserFeatures; - _parserFeaturesToChange = src._parserFeaturesToChange; _formatReadFeatures = src._formatReadFeatures; _formatReadFeaturesToChange = src._formatReadFeaturesToChange; } @@ -193,7 +180,6 @@ private DeserializationConfig(DeserializationConfig src, PropertyName rootName) _deserFeatures = src._deserFeatures; _problemHandlers = src._problemHandlers; _parserFeatures = src._parserFeatures; - _parserFeaturesToChange = src._parserFeaturesToChange; _formatReadFeatures = src._formatReadFeatures; _formatReadFeaturesToChange = src._formatReadFeaturesToChange; } @@ -204,7 +190,6 @@ private DeserializationConfig(DeserializationConfig src, Class view) _deserFeatures = src._deserFeatures; _problemHandlers = src._problemHandlers; _parserFeatures = src._parserFeatures; - _parserFeaturesToChange = src._parserFeaturesToChange; _formatReadFeatures = src._formatReadFeatures; _formatReadFeaturesToChange = src._formatReadFeaturesToChange; } @@ -215,7 +200,6 @@ protected DeserializationConfig(DeserializationConfig src, ContextAttributes att _deserFeatures = src._deserFeatures; _problemHandlers = src._problemHandlers; _parserFeatures = src._parserFeatures; - _parserFeaturesToChange = src._parserFeaturesToChange; _formatReadFeatures = src._formatReadFeatures; _formatReadFeaturesToChange = src._formatReadFeaturesToChange; } @@ -226,7 +210,6 @@ protected DeserializationConfig(DeserializationConfig src, SimpleMixInResolver m _deserFeatures = src._deserFeatures; _problemHandlers = src._problemHandlers; _parserFeatures = src._parserFeatures; - _parserFeaturesToChange = src._parserFeaturesToChange; _formatReadFeatures = src._formatReadFeatures; _formatReadFeaturesToChange = src._formatReadFeaturesToChange; } @@ -247,9 +230,8 @@ protected final DeserializationConfig _withBase(BaseSettings newBase) { @Override protected final DeserializationConfig _withMapperFeatures(int mapperFeatures) { - return new DeserializationConfig(this, mapperFeatures, _deserFeatures, - _parserFeatures, _parserFeaturesToChange, - _formatReadFeatures, _formatReadFeaturesToChange); + return new DeserializationConfig(this, mapperFeatures, _deserFeatures, _parserFeatures, + _formatReadFeatures, _formatReadFeaturesToChange); } /* @@ -299,8 +281,7 @@ public DeserializationConfig with(DeserializationFeature feature) { int newDeserFeatures = (_deserFeatures | feature.getMask()); return (newDeserFeatures == _deserFeatures) ? this : - new DeserializationConfig(this, _mapperFeatures, newDeserFeatures, - _parserFeatures, _parserFeaturesToChange, + new DeserializationConfig(this, _mapperFeatures, newDeserFeatures, _parserFeatures, _formatReadFeatures, _formatReadFeaturesToChange); } @@ -316,8 +297,7 @@ public DeserializationConfig with(DeserializationFeature first, newDeserFeatures |= f.getMask(); } return (newDeserFeatures == _deserFeatures) ? this : - new DeserializationConfig(this, _mapperFeatures, newDeserFeatures, - _parserFeatures, _parserFeaturesToChange, + new DeserializationConfig(this, _mapperFeatures, newDeserFeatures, _parserFeatures, _formatReadFeatures, _formatReadFeaturesToChange); } @@ -333,7 +313,7 @@ public DeserializationConfig withFeatures(DeserializationFeature... features) } return (newDeserFeatures == _deserFeatures) ? this : new DeserializationConfig(this, _mapperFeatures, newDeserFeatures, - _parserFeatures, _parserFeaturesToChange, + _parserFeatures, _formatReadFeatures, _formatReadFeaturesToChange); } @@ -346,7 +326,7 @@ public DeserializationConfig without(DeserializationFeature feature) int newDeserFeatures = _deserFeatures & ~feature.getMask(); return (newDeserFeatures == _deserFeatures) ? this : new DeserializationConfig(this, _mapperFeatures, newDeserFeatures, - _parserFeatures, _parserFeaturesToChange, + _parserFeatures, _formatReadFeatures, _formatReadFeaturesToChange); } @@ -362,8 +342,7 @@ public DeserializationConfig without(DeserializationFeature first, newDeserFeatures &= ~f.getMask(); } return (newDeserFeatures == _deserFeatures) ? this : - new DeserializationConfig(this, _mapperFeatures, newDeserFeatures, - _parserFeatures, _parserFeaturesToChange, + new DeserializationConfig(this, _mapperFeatures, newDeserFeatures, _parserFeatures, _formatReadFeatures, _formatReadFeaturesToChange); } @@ -378,8 +357,7 @@ public DeserializationConfig withoutFeatures(DeserializationFeature... features) newDeserFeatures &= ~f.getMask(); } return (newDeserFeatures == _deserFeatures) ? this : - new DeserializationConfig(this, _mapperFeatures, newDeserFeatures, - _parserFeatures, _parserFeaturesToChange, + new DeserializationConfig(this, _mapperFeatures, newDeserFeatures, _parserFeatures, _formatReadFeatures, _formatReadFeaturesToChange); } @@ -396,10 +374,8 @@ public DeserializationConfig withoutFeatures(DeserializationFeature... features) public DeserializationConfig with(JsonParser.Feature feature) { int newSet = _parserFeatures | feature.getMask(); - int newMask = _parserFeaturesToChange | feature.getMask(); - return ((_parserFeatures == newSet) && (_parserFeaturesToChange == newMask)) ? this : - new DeserializationConfig(this, _mapperFeatures, _deserFeatures, - newSet, newMask, + return (_parserFeatures == newSet)? this : + new DeserializationConfig(this, _mapperFeatures, _deserFeatures, newSet, _formatReadFeatures, _formatReadFeaturesToChange); } @@ -410,15 +386,11 @@ public DeserializationConfig with(JsonParser.Feature feature) public DeserializationConfig withFeatures(JsonParser.Feature... features) { int newSet = _parserFeatures; - int newMask = _parserFeaturesToChange; for (JsonParser.Feature f : features) { - int mask = f.getMask(); - newSet |= mask; - newMask |= mask; + newSet |= f.getMask(); } - return ((_parserFeatures == newSet) && (_parserFeaturesToChange == newMask)) ? this : - new DeserializationConfig(this, _mapperFeatures, _deserFeatures, - newSet, newMask, + return (_parserFeatures == newSet) ? this : + new DeserializationConfig(this, _mapperFeatures, _deserFeatures, newSet, _formatReadFeatures, _formatReadFeaturesToChange); } @@ -429,31 +401,23 @@ public DeserializationConfig withFeatures(JsonParser.Feature... features) public DeserializationConfig without(JsonParser.Feature feature) { int newSet = _parserFeatures & ~feature.getMask(); - int newMask = _parserFeaturesToChange | feature.getMask(); - return ((_parserFeatures == newSet) && (_parserFeaturesToChange == newMask)) ? this : - new DeserializationConfig(this, _mapperFeatures, _deserFeatures, - newSet, newMask, + return (_parserFeatures == newSet) ? this : + new DeserializationConfig(this, _mapperFeatures, _deserFeatures, newSet, _formatReadFeatures, _formatReadFeaturesToChange); } /** * Fluent factory method that will construct and return a new configuration * object instance with specified features disabled. - * - * @since 2.5 */ public DeserializationConfig withoutFeatures(JsonParser.Feature... features) { int newSet = _parserFeatures; - int newMask = _parserFeaturesToChange; for (JsonParser.Feature f : features) { - int mask = f.getMask(); - newSet &= ~mask; - newMask |= mask; + newSet &= ~f.getMask(); } - return ((_parserFeatures == newSet) && (_parserFeaturesToChange == newMask)) ? this : - new DeserializationConfig(this, _mapperFeatures, _deserFeatures, - newSet, newMask, + return (_parserFeatures == newSet)? this : + new DeserializationConfig(this, _mapperFeatures, _deserFeatures, newSet, _formatReadFeatures, _formatReadFeaturesToChange); } @@ -476,7 +440,7 @@ public DeserializationConfig with(FormatFeature feature) return this; } return new DeserializationConfig(this, _mapperFeatures, _deserFeatures, - _parserFeatures, _parserFeaturesToChange, + _parserFeatures, newSet, newMask); } @@ -495,7 +459,7 @@ public DeserializationConfig withFeatures(FormatFeature... features) } return ((_formatReadFeatures == newSet) && (_formatReadFeaturesToChange == newMask)) ? this : new DeserializationConfig(this, _mapperFeatures, _deserFeatures, - _parserFeatures, _parserFeaturesToChange, + _parserFeatures, newSet, newMask); } @@ -509,7 +473,7 @@ public DeserializationConfig without(FormatFeature feature) int newMask = _formatReadFeaturesToChange | feature.getMask(); return ((_formatReadFeatures == newSet) && (_formatReadFeaturesToChange == newMask)) ? this : new DeserializationConfig(this, _mapperFeatures, _deserFeatures, - _parserFeatures, _parserFeaturesToChange, + _parserFeatures, newSet, newMask); } @@ -528,7 +492,7 @@ public DeserializationConfig withoutFeatures(FormatFeature... features) } return ((_formatReadFeatures == newSet) && (_formatReadFeaturesToChange == newMask)) ? this : new DeserializationConfig(this, _mapperFeatures, _deserFeatures, - _parserFeatures, _parserFeaturesToChange, + _parserFeatures, newSet, newMask); } @@ -574,7 +538,7 @@ public DeserializationConfig withNoProblemHandlers() { * @since 3.0 */ public int getParserFeatures(int defaults) { - return (defaults & ~_parserFeaturesToChange) | _parserFeatures; + return _parserFeatures; } /** @@ -603,19 +567,13 @@ public final boolean isEnabled(DeserializationFeature f) { return (_deserFeatures & f.getMask()) != 0; } - public final boolean isEnabled(JsonParser.Feature f, TokenStreamFactory factory) { - int mask = f.getMask(); - if ((_parserFeaturesToChange & mask) != 0) { - return (_parserFeatures & f.getMask()) != 0; - } - return factory.isEnabled(f); + public final boolean isEnabled(JsonParser.Feature f) { + return (_parserFeatures & f.getMask()) != 0; } /** * Bulk access method for checking that all features specified by * mask are enabled. - * - * @since 2.3 */ public final boolean hasDeserializationFeatures(int featureMask) { return (_deserFeatures & featureMask) == featureMask; @@ -624,8 +582,6 @@ public final boolean hasDeserializationFeatures(int featureMask) { /** * Bulk access method for checking that at least one of features specified by * mask is enabled. - * - * @since 2.6 */ public final boolean hasSomeOfFeatures(int featureMask) { return (_deserFeatures & featureMask) != 0; @@ -640,12 +596,10 @@ public final int getDeserializationFeatures() { } /** - * Convenience method equivalant to: + * Convenience method equivalent to: * * isEnabled(DeserializationFeature.FAIL_ON_TRAILING_TOKENS) * - * - * @since 2.9 */ public final boolean requiresFullValue() { return DeserializationFeature.FAIL_ON_TRAILING_TOKENS.enabledIn(_deserFeatures); diff --git a/src/main/java/com/fasterxml/jackson/databind/MapperBuilder.java b/src/main/java/com/fasterxml/jackson/databind/MapperBuilder.java index 2c69132827..7cd162e38c 100644 --- a/src/main/java/com/fasterxml/jackson/databind/MapperBuilder.java +++ b/src/main/java/com/fasterxml/jackson/databind/MapperBuilder.java @@ -5,6 +5,7 @@ import java.util.TimeZone; import com.fasterxml.jackson.core.*; +import com.fasterxml.jackson.core.util.DefaultPrettyPrinter; import com.fasterxml.jackson.databind.cfg.BaseSettings; import com.fasterxml.jackson.databind.cfg.ConfigOverrides; import com.fasterxml.jackson.databind.cfg.HandlerInstantiator; @@ -34,6 +35,8 @@ public abstract class MapperBuilder base) _streamFactory = base._streamFactory; _baseSettings = base._baseSettings; + _parserFeatures = base._parserFeatures; + _generatorFeatures = base._deserFeatures; + _mapperFeatures = base._mapperFeatures; _serFeatures = base._serFeatures; _deserFeatures = base._deserFeatures; @@ -202,14 +203,16 @@ protected MapperBuilder(MapperBuilder base) public SerializationConfig buildSerializationConfig(SimpleMixInResolver mixins, RootNameLookup rootNames, ConfigOverrides configOverrides) { - return new SerializationConfig(this, _mapperFeatures, _serFeatures, + return new SerializationConfig(this, + _mapperFeatures, _serFeatures, _generatorFeatures, mixins, rootNames, configOverrides); } public DeserializationConfig buildDeserializationConfig(SimpleMixInResolver mixins, RootNameLookup rootNames, ConfigOverrides configOverrides) { - return new DeserializationConfig(this, _mapperFeatures, _deserFeatures, + return new DeserializationConfig(this, + _mapperFeatures, _deserFeatures, _parserFeatures, mixins, rootNames, configOverrides); } @@ -289,6 +292,17 @@ public FilterProvider filterProvider() { return _filterProvider; } + public PrettyPrinter defaultPrettyPrinter() { + if (_defaultPrettyPrinter == null) { + _defaultPrettyPrinter = _defaultPrettyPrinter(); + } + return _defaultPrettyPrinter; + } + + protected PrettyPrinter _defaultPrettyPrinter() { + return DEFAULT_PRETTY_PRINTER; + } + /* /********************************************************** /* Accessors, deserialization @@ -368,7 +382,7 @@ public B configure(SerializationFeature feature, boolean state) } return _this(); } - + public B enable(DeserializationFeature... features) { for (DeserializationFeature f : features) { _deserFeatures |= f.getMask(); @@ -393,6 +407,58 @@ public B configure(DeserializationFeature feature, boolean state) return _this(); } + /* + /********************************************************** + /* Changing features: parser, generator + /********************************************************** + */ + + public B enable(JsonParser.Feature... features) { + for (JsonParser.Feature f : features) { + _parserFeatures |= f.getMask(); + } + return _this(); + } + + public B disable(JsonParser.Feature... features) { + for (JsonParser.Feature f : features) { + _parserFeatures &= ~f.getMask(); + } + return _this(); + } + + public B configure(JsonParser.Feature feature, boolean state) { + if (state) { + _parserFeatures |= feature.getMask(); + } else { + _parserFeatures &= ~feature.getMask(); + } + return _this(); + } + + public B enable(JsonGenerator.Feature... features) { + for (JsonGenerator.Feature f : features) { + _generatorFeatures |= f.getMask(); + } + return _this(); + } + + public B disable(JsonGenerator.Feature... features) { + for (JsonGenerator.Feature f : features) { + _generatorFeatures &= ~f.getMask(); + } + return _this(); + } + + public B configure(JsonGenerator.Feature feature, boolean state) { + if (state) { + _generatorFeatures |= feature.getMask(); + } else { + _generatorFeatures &= ~feature.getMask(); + } + return _this(); + } + /* /********************************************************** /* Changing factories, general @@ -460,6 +526,11 @@ public B filterProvider(FilterProvider prov) { return _this(); } + public B defaultPrettyPrinter(PrettyPrinter pp) { + _defaultPrettyPrinter = pp; + return _this(); + } + /* /********************************************************** /* Changing factories, deserialization diff --git a/src/main/java/com/fasterxml/jackson/databind/ObjectMapper.java b/src/main/java/com/fasterxml/jackson/databind/ObjectMapper.java index ed4f88c60c..83ca006969 100644 --- a/src/main/java/com/fasterxml/jackson/databind/ObjectMapper.java +++ b/src/main/java/com/fasterxml/jackson/databind/ObjectMapper.java @@ -1631,11 +1631,11 @@ public boolean isEnabled(JsonFactory.Feature f) { } public boolean isEnabled(JsonParser.Feature f) { - return _deserializationConfig.isEnabled(f, _streamFactory); + return _deserializationConfig.isEnabled(f); } public boolean isEnabled(JsonGenerator.Feature f) { - return _serializationConfig.isEnabled(f, _streamFactory); + return _serializationConfig.isEnabled(f); } /* diff --git a/src/main/java/com/fasterxml/jackson/databind/SerializationConfig.java b/src/main/java/com/fasterxml/jackson/databind/SerializationConfig.java index ec153fe201..d9b725b7bc 100644 --- a/src/main/java/com/fasterxml/jackson/databind/SerializationConfig.java +++ b/src/main/java/com/fasterxml/jackson/databind/SerializationConfig.java @@ -3,7 +3,6 @@ import java.text.DateFormat; import com.fasterxml.jackson.core.*; -import com.fasterxml.jackson.core.util.DefaultPrettyPrinter; import com.fasterxml.jackson.core.util.Instantiatable; import com.fasterxml.jackson.databind.cfg.*; @@ -30,8 +29,6 @@ public final class SerializationConfig { private static final long serialVersionUID = 3L; - protected final static PrettyPrinter DEFAULT_PRETTY_PRINTER = new DefaultPrettyPrinter(); - /* /********************************************************** /* Configured helper objects @@ -66,16 +63,12 @@ public final class SerializationConfig /* Generator features: generic, format-specific /********************************************************** */ + /** * States of {@link com.fasterxml.jackson.core.JsonGenerator.Feature}s to enable/disable. */ protected final int _generatorFeatures; - /** - * Bitflag of {@link com.fasterxml.jackson.core.JsonGenerator.Feature}s to enable/disable - */ - protected final int _generatorFeaturesToChange; - /** * States of {@link com.fasterxml.jackson.core.FormatFeature}s to enable/disable. */ @@ -104,7 +97,6 @@ protected SerializationConfig(SerializationConfig src, _filterProvider = src._filterProvider; _defaultPrettyPrinter = src._defaultPrettyPrinter; _generatorFeatures = src._generatorFeatures; - _generatorFeaturesToChange = src._generatorFeaturesToChange; _formatWriteFeatures = src._formatWriteFeatures; _formatWriteFeaturesToChange = src._formatWriteFeaturesToChange; } @@ -113,7 +105,7 @@ protected SerializationConfig(SerializationConfig src, * @since 3.0 */ public SerializationConfig(MapperBuilder b, - int mapperFeatures, int serFeatures, + int mapperFeatures, int serFeatures, int genFeatures, SimpleMixInResolver mixins, RootNameLookup rootNames, ConfigOverrides configOverrides) { super(b.baseSettings(), mapperFeatures, @@ -121,9 +113,8 @@ public SerializationConfig(MapperBuilder b, mixins, rootNames, configOverrides); _serFeatures = serFeatures; _filterProvider = b.filterProvider(); - _defaultPrettyPrinter = DEFAULT_PRETTY_PRINTER; - _generatorFeatures = 0; - _generatorFeaturesToChange = 0; + _defaultPrettyPrinter = b.defaultPrettyPrinter(); + _generatorFeatures = genFeatures; _formatWriteFeatures = 0; _formatWriteFeaturesToChange = 0; } @@ -142,14 +133,12 @@ private SerializationConfig(SerializationConfig src, SubtypeResolver str) _filterProvider = src._filterProvider; _defaultPrettyPrinter = src._defaultPrettyPrinter; _generatorFeatures = src._generatorFeatures; - _generatorFeaturesToChange = src._generatorFeaturesToChange; _formatWriteFeatures = src._formatWriteFeatures; _formatWriteFeaturesToChange = src._formatWriteFeaturesToChange; } private SerializationConfig(SerializationConfig src, - int mapperFeatures, int serFeatures, - int generatorFeatures, int generatorFeatureMask, + int mapperFeatures, int serFeatures, int generatorFeatures, int formatFeatures, int formatFeaturesMask) { super(src, mapperFeatures); @@ -157,7 +146,6 @@ private SerializationConfig(SerializationConfig src, _filterProvider = src._filterProvider; _defaultPrettyPrinter = src._defaultPrettyPrinter; _generatorFeatures = generatorFeatures; - _generatorFeaturesToChange = generatorFeatureMask; _formatWriteFeatures = formatFeatures; _formatWriteFeaturesToChange = formatFeaturesMask; } @@ -169,7 +157,6 @@ private SerializationConfig(SerializationConfig src, BaseSettings base) _filterProvider = src._filterProvider; _defaultPrettyPrinter = src._defaultPrettyPrinter; _generatorFeatures = src._generatorFeatures; - _generatorFeaturesToChange = src._generatorFeaturesToChange; _formatWriteFeatures = src._formatWriteFeatures; _formatWriteFeaturesToChange = src._formatWriteFeaturesToChange; } @@ -181,7 +168,6 @@ private SerializationConfig(SerializationConfig src, FilterProvider filters) _filterProvider = filters; _defaultPrettyPrinter = src._defaultPrettyPrinter; _generatorFeatures = src._generatorFeatures; - _generatorFeaturesToChange = src._generatorFeaturesToChange; _formatWriteFeatures = src._formatWriteFeatures; _formatWriteFeaturesToChange = src._formatWriteFeaturesToChange; } @@ -193,7 +179,6 @@ private SerializationConfig(SerializationConfig src, Class view) _filterProvider = src._filterProvider; _defaultPrettyPrinter = src._defaultPrettyPrinter; _generatorFeatures = src._generatorFeatures; - _generatorFeaturesToChange = src._generatorFeaturesToChange; _formatWriteFeatures = src._formatWriteFeatures; _formatWriteFeaturesToChange = src._formatWriteFeaturesToChange; } @@ -205,7 +190,6 @@ private SerializationConfig(SerializationConfig src, PropertyName rootName) _filterProvider = src._filterProvider; _defaultPrettyPrinter = src._defaultPrettyPrinter; _generatorFeatures = src._generatorFeatures; - _generatorFeaturesToChange = src._generatorFeaturesToChange; _formatWriteFeatures = src._formatWriteFeatures; _formatWriteFeaturesToChange = src._formatWriteFeaturesToChange; } @@ -217,7 +201,6 @@ protected SerializationConfig(SerializationConfig src, ContextAttributes attrs) _filterProvider = src._filterProvider; _defaultPrettyPrinter = src._defaultPrettyPrinter; _generatorFeatures = src._generatorFeatures; - _generatorFeaturesToChange = src._generatorFeaturesToChange; _formatWriteFeatures = src._formatWriteFeatures; _formatWriteFeaturesToChange = src._formatWriteFeaturesToChange; } @@ -229,7 +212,6 @@ protected SerializationConfig(SerializationConfig src, SimpleMixInResolver mixin _filterProvider = src._filterProvider; _defaultPrettyPrinter = src._defaultPrettyPrinter; _generatorFeatures = src._generatorFeatures; - _generatorFeaturesToChange = src._generatorFeaturesToChange; _formatWriteFeatures = src._formatWriteFeatures; _formatWriteFeaturesToChange = src._formatWriteFeaturesToChange; } @@ -241,7 +223,6 @@ protected SerializationConfig(SerializationConfig src, PrettyPrinter defaultPP) _filterProvider = src._filterProvider; _defaultPrettyPrinter = defaultPP; _generatorFeatures = src._generatorFeatures; - _generatorFeaturesToChange = src._generatorFeaturesToChange; _formatWriteFeatures = src._formatWriteFeatures; _formatWriteFeaturesToChange = src._formatWriteFeaturesToChange; } @@ -260,7 +241,7 @@ protected final SerializationConfig _withBase(BaseSettings newBase) { @Override protected final SerializationConfig _withMapperFeatures(int mapperFeatures) { return new SerializationConfig(this, mapperFeatures, _serFeatures, - _generatorFeatures, _generatorFeaturesToChange, + _generatorFeatures, _formatWriteFeatures, _formatWriteFeaturesToChange); } @@ -326,8 +307,8 @@ public SerializationConfig with(SerializationFeature feature) { int newSerFeatures = _serFeatures | feature.getMask(); return (newSerFeatures == _serFeatures) ? this - : new SerializationConfig(this, _mapperFeatures, newSerFeatures, - _generatorFeatures, _generatorFeaturesToChange, + : new SerializationConfig(this, + _mapperFeatures, newSerFeatures, _generatorFeatures, _formatWriteFeatures, _formatWriteFeaturesToChange); } @@ -343,7 +324,7 @@ public SerializationConfig with(SerializationFeature first, SerializationFeature } return (newSerFeatures == _serFeatures) ? this : new SerializationConfig(this, _mapperFeatures, newSerFeatures, - _generatorFeatures, _generatorFeaturesToChange, + _generatorFeatures, _formatWriteFeatures, _formatWriteFeaturesToChange); } @@ -359,7 +340,7 @@ public SerializationConfig withFeatures(SerializationFeature... features) } return (newSerFeatures == _serFeatures) ? this : new SerializationConfig(this, _mapperFeatures, newSerFeatures, - _generatorFeatures, _generatorFeaturesToChange, + _generatorFeatures, _formatWriteFeatures, _formatWriteFeaturesToChange); } @@ -372,7 +353,7 @@ public SerializationConfig without(SerializationFeature feature) int newSerFeatures = _serFeatures & ~feature.getMask(); return (newSerFeatures == _serFeatures) ? this : new SerializationConfig(this, _mapperFeatures, newSerFeatures, - _generatorFeatures, _generatorFeaturesToChange, + _generatorFeatures, _formatWriteFeatures, _formatWriteFeaturesToChange); } @@ -388,8 +369,7 @@ public SerializationConfig without(SerializationFeature first, SerializationFeat } return (newSerFeatures == _serFeatures) ? this : new SerializationConfig(this, _mapperFeatures, newSerFeatures, - _generatorFeatures, _generatorFeaturesToChange, - _formatWriteFeatures, _formatWriteFeaturesToChange); + _generatorFeatures, _formatWriteFeatures, _formatWriteFeaturesToChange); } /** @@ -404,8 +384,7 @@ public SerializationConfig withoutFeatures(SerializationFeature... features) } return (newSerFeatures == _serFeatures) ? this : new SerializationConfig(this, _mapperFeatures, newSerFeatures, - _generatorFeatures, _generatorFeaturesToChange, - _formatWriteFeatures, _formatWriteFeaturesToChange); + _generatorFeatures, _formatWriteFeatures, _formatWriteFeaturesToChange); } /* @@ -421,10 +400,8 @@ public SerializationConfig withoutFeatures(SerializationFeature... features) public SerializationConfig with(JsonGenerator.Feature feature) { int newSet = _generatorFeatures | feature.getMask(); - int newMask = _generatorFeaturesToChange | feature.getMask(); - return ((_generatorFeatures == newSet) && (_generatorFeaturesToChange == newMask)) ? this : - new SerializationConfig(this, _mapperFeatures, _serFeatures, - newSet, newMask, + return (_generatorFeatures == newSet) ? this : + new SerializationConfig(this, _mapperFeatures, _serFeatures, newSet, _formatWriteFeatures, _formatWriteFeaturesToChange); } @@ -435,15 +412,11 @@ public SerializationConfig with(JsonGenerator.Feature feature) public SerializationConfig withFeatures(JsonGenerator.Feature... features) { int newSet = _generatorFeatures; - int newMask = _generatorFeaturesToChange; for (JsonGenerator.Feature f : features) { - int mask = f.getMask(); - newSet |= mask; - newMask |= mask; + newSet |= f.getMask(); } - return ((_generatorFeatures == newSet) && (_generatorFeaturesToChange == newMask)) ? this : - new SerializationConfig(this, _mapperFeatures, _serFeatures, - newSet, newMask, + return (_generatorFeatures == newSet) ? this : + new SerializationConfig(this, _mapperFeatures, _serFeatures, newSet, _formatWriteFeatures, _formatWriteFeaturesToChange); } @@ -454,10 +427,8 @@ public SerializationConfig withFeatures(JsonGenerator.Feature... features) public SerializationConfig without(JsonGenerator.Feature feature) { int newSet = _generatorFeatures & ~feature.getMask(); - int newMask = _generatorFeaturesToChange | feature.getMask(); - return ((_generatorFeatures == newSet) && (_generatorFeaturesToChange == newMask)) ? this : - new SerializationConfig(this, _mapperFeatures, _serFeatures, - newSet, newMask, + return (_generatorFeatures == newSet) ? this : + new SerializationConfig(this, _mapperFeatures, _serFeatures, newSet, _formatWriteFeatures, _formatWriteFeaturesToChange); } @@ -468,15 +439,11 @@ public SerializationConfig without(JsonGenerator.Feature feature) public SerializationConfig withoutFeatures(JsonGenerator.Feature... features) { int newSet = _generatorFeatures; - int newMask = _generatorFeaturesToChange; for (JsonGenerator.Feature f : features) { - int mask = f.getMask(); - newSet &= ~mask; - newMask |= mask; + newSet &= ~f.getMask(); } - return ((_generatorFeatures == newSet) && (_generatorFeaturesToChange == newMask)) ? this : - new SerializationConfig(this, _mapperFeatures, _serFeatures, - newSet, newMask, + return (_generatorFeatures == newSet) ? this : + new SerializationConfig(this, _mapperFeatures, _serFeatures, newSet, _formatWriteFeatures, _formatWriteFeaturesToChange); } @@ -495,8 +462,7 @@ public SerializationConfig with(FormatFeature feature) int newSet = _formatWriteFeatures | feature.getMask(); int newMask = _formatWriteFeaturesToChange | feature.getMask(); return ((_formatWriteFeatures == newSet) && (_formatWriteFeaturesToChange == newMask)) ? this : - new SerializationConfig(this, _mapperFeatures, _serFeatures, - _generatorFeatures, _generatorFeaturesToChange, + new SerializationConfig(this, _mapperFeatures, _serFeatures, _generatorFeatures, newSet, newMask); } @@ -514,8 +480,7 @@ public SerializationConfig withFeatures(FormatFeature... features) newMask |= mask; } return ((_formatWriteFeatures == newSet) && (_formatWriteFeaturesToChange == newMask)) ? this : - new SerializationConfig(this, _mapperFeatures, _serFeatures, - _generatorFeatures, _generatorFeaturesToChange, + new SerializationConfig(this, _mapperFeatures, _serFeatures, _generatorFeatures, newSet, newMask); } @@ -528,8 +493,7 @@ public SerializationConfig without(FormatFeature feature) int newSet = _formatWriteFeatures & ~feature.getMask(); int newMask = _formatWriteFeaturesToChange | feature.getMask(); return ((_formatWriteFeatures == newSet) && (_formatWriteFeaturesToChange == newMask)) ? this : - new SerializationConfig(this, _mapperFeatures, _serFeatures, - _generatorFeatures, _generatorFeaturesToChange, + new SerializationConfig(this, _mapperFeatures, _serFeatures, _generatorFeatures, newSet, newMask); } @@ -547,11 +511,10 @@ public SerializationConfig withoutFeatures(FormatFeature... features) newMask |= mask; } return ((_formatWriteFeatures == newSet) && (_formatWriteFeaturesToChange == newMask)) ? this : - new SerializationConfig(this, _mapperFeatures, _serFeatures, - _generatorFeatures, _generatorFeaturesToChange, + new SerializationConfig(this, _mapperFeatures, _serFeatures, _generatorFeatures, newSet, newMask); } - + /* /********************************************************** /* Factory methods, other @@ -590,7 +553,7 @@ public PrettyPrinter constructDefaultPrettyPrinter() { * @since 3.0 */ public int getGeneratorFeatures(int defaults) { - return (defaults & ~_generatorFeaturesToChange) | _generatorFeatures; + return _generatorFeatures; } /** @@ -624,12 +587,8 @@ public final boolean isEnabled(SerializationFeature f) { * for feature, and only if not, checks state of passed-in * factory. */ - public final boolean isEnabled(JsonGenerator.Feature f, TokenStreamFactory factory) { - int mask = f.getMask(); - if ((_generatorFeaturesToChange & mask) != 0) { - return (_generatorFeatures & f.getMask()) != 0; - } - return factory.isEnabled(f); + public final boolean isEnabled(JsonGenerator.Feature f) { + return (_generatorFeatures & f.getMask()) != 0; } /** diff --git a/src/test/java/com/fasterxml/jackson/databind/cfg/DeserializationConfigTest.java b/src/test/java/com/fasterxml/jackson/databind/cfg/DeserializationConfigTest.java index 4b0f31331b..85e0f6a0bd 100644 --- a/src/test/java/com/fasterxml/jackson/databind/cfg/DeserializationConfigTest.java +++ b/src/test/java/com/fasterxml/jackson/databind/cfg/DeserializationConfigTest.java @@ -56,12 +56,13 @@ public void testBasicFeatures() throws Exception public void testParserFeatures() throws Exception { DeserializationConfig config = MAPPER.getDeserializationConfig(); + assertNotSame(config, config.with(JsonParser.Feature.ALLOW_COMMENTS)); assertNotSame(config, config.withFeatures(JsonParser.Feature.ALLOW_COMMENTS, JsonParser.Feature.ALLOW_MISSING_VALUES)); - assertNotSame(config, config.without(JsonParser.Feature.ALLOW_COMMENTS)); - assertNotSame(config, config.withoutFeatures(JsonParser.Feature.ALLOW_COMMENTS, + assertSame(config, config.without(JsonParser.Feature.ALLOW_COMMENTS)); + assertSame(config, config.withoutFeatures(JsonParser.Feature.ALLOW_COMMENTS, JsonParser.Feature.ALLOW_MISSING_VALUES)); } diff --git a/src/test/java/com/fasterxml/jackson/databind/cfg/SerConfigTest.java b/src/test/java/com/fasterxml/jackson/databind/cfg/SerConfigTest.java index f0084e3285..22beaf66ee 100644 --- a/src/test/java/com/fasterxml/jackson/databind/cfg/SerConfigTest.java +++ b/src/test/java/com/fasterxml/jackson/databind/cfg/SerConfigTest.java @@ -5,7 +5,6 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.core.TokenStreamFactory; import com.fasterxml.jackson.databind.*; @@ -52,16 +51,16 @@ public void testSerConfig() throws Exception public void testGeneratorFeatures() throws Exception { SerializationConfig config = MAPPER.getSerializationConfig(); - TokenStreamFactory f = MAPPER.tokenStreamFactory(); - assertFalse(config.isEnabled(JsonGenerator.Feature.ESCAPE_NON_ASCII, f)); + assertFalse(config.isEnabled(JsonGenerator.Feature.ESCAPE_NON_ASCII)); assertNotSame(config, config.with(JsonGenerator.Feature.ESCAPE_NON_ASCII)); SerializationConfig newConfig = config.withFeatures(JsonGenerator.Feature.ESCAPE_NON_ASCII, JsonGenerator.Feature.IGNORE_UNKNOWN); assertNotSame(config, newConfig); - assertTrue(newConfig.isEnabled(JsonGenerator.Feature.ESCAPE_NON_ASCII, f)); + assertTrue(newConfig.isEnabled(JsonGenerator.Feature.ESCAPE_NON_ASCII)); - assertNotSame(config, config.without(JsonGenerator.Feature.ESCAPE_NON_ASCII)); - assertNotSame(config, config.withoutFeatures(JsonGenerator.Feature.ESCAPE_NON_ASCII, + // no change to settings, same object: + assertSame(config, config.without(JsonGenerator.Feature.ESCAPE_NON_ASCII)); + assertSame(config, config.withoutFeatures(JsonGenerator.Feature.ESCAPE_NON_ASCII, JsonGenerator.Feature.IGNORE_UNKNOWN)); }