Skip to content

Commit

Permalink
Refactor configuration of generator, parser features for ObjectMapper
Browse files Browse the repository at this point in the history
  • Loading branch information
cowtowncoder committed Feb 2, 2018
1 parent 59166d9 commit 3419c38
Show file tree
Hide file tree
Showing 6 changed files with 158 additions and 174 deletions.
Expand Up @@ -61,11 +61,6 @@ public final class DeserializationConfig
*/ */
protected final int _parserFeatures; 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. * States of {@link com.fasterxml.jackson.core.FormatFeature}s to enable/disable.
*/ */
Expand Down Expand Up @@ -93,7 +88,6 @@ protected DeserializationConfig(DeserializationConfig src,
_deserFeatures = src._deserFeatures; _deserFeatures = src._deserFeatures;
_problemHandlers = src._problemHandlers; _problemHandlers = src._problemHandlers;
_parserFeatures = src._parserFeatures; _parserFeatures = src._parserFeatures;
_parserFeaturesToChange = src._parserFeaturesToChange;
_formatReadFeatures = src._formatReadFeatures; _formatReadFeatures = src._formatReadFeatures;
_formatReadFeaturesToChange = src._formatReadFeaturesToChange; _formatReadFeaturesToChange = src._formatReadFeaturesToChange;
} }
Expand All @@ -102,7 +96,7 @@ protected DeserializationConfig(DeserializationConfig src,
* @since 3.0 * @since 3.0
*/ */
public DeserializationConfig(MapperBuilder<?,?> b, public DeserializationConfig(MapperBuilder<?,?> b,
int mapperFeatures, int deserFeatures, int mapperFeatures, int deserFeatures, int parserFeatures,
SimpleMixInResolver mixins, RootNameLookup rootNames, SimpleMixInResolver mixins, RootNameLookup rootNames,
ConfigOverrides configOverrides) ConfigOverrides configOverrides)
{ {
Expand All @@ -111,8 +105,7 @@ public DeserializationConfig(MapperBuilder<?,?> b,
mixins, rootNames, configOverrides); mixins, rootNames, configOverrides);
_deserFeatures = deserFeatures; _deserFeatures = deserFeatures;
_problemHandlers = null; _problemHandlers = null;
_parserFeatures = 0; _parserFeatures = parserFeatures;
_parserFeaturesToChange = 0;
_formatReadFeatures = 0; _formatReadFeatures = 0;
_formatReadFeaturesToChange = 0; _formatReadFeaturesToChange = 0;
} }
Expand All @@ -125,15 +118,13 @@ public DeserializationConfig(MapperBuilder<?,?> b,
*/ */


private DeserializationConfig(DeserializationConfig src, private DeserializationConfig(DeserializationConfig src,
int mapperFeatures, int deserFeatures, int mapperFeatures, int deserFeatures, int parserFeatures,
int parserFeatures, int parserFeatureMask,
int formatFeatures, int formatFeatureMask) int formatFeatures, int formatFeatureMask)
{ {
super(src, mapperFeatures); super(src, mapperFeatures);
_deserFeatures = deserFeatures; _deserFeatures = deserFeatures;
_problemHandlers = src._problemHandlers; _problemHandlers = src._problemHandlers;
_parserFeatures = parserFeatures; _parserFeatures = parserFeatures;
_parserFeaturesToChange = parserFeatureMask;
_formatReadFeatures = formatFeatures; _formatReadFeatures = formatFeatures;
_formatReadFeaturesToChange = formatFeatureMask; _formatReadFeaturesToChange = formatFeatureMask;
} }
Expand All @@ -148,7 +139,6 @@ private DeserializationConfig(DeserializationConfig src, SubtypeResolver str)
_deserFeatures = src._deserFeatures; _deserFeatures = src._deserFeatures;
_problemHandlers = src._problemHandlers; _problemHandlers = src._problemHandlers;
_parserFeatures = src._parserFeatures; _parserFeatures = src._parserFeatures;
_parserFeaturesToChange = src._parserFeaturesToChange;
_formatReadFeatures = src._formatReadFeatures; _formatReadFeatures = src._formatReadFeatures;
_formatReadFeaturesToChange = src._formatReadFeaturesToChange; _formatReadFeaturesToChange = src._formatReadFeaturesToChange;
} }
Expand All @@ -159,7 +149,6 @@ private DeserializationConfig(DeserializationConfig src, BaseSettings base)
_deserFeatures = src._deserFeatures; _deserFeatures = src._deserFeatures;
_problemHandlers = src._problemHandlers; _problemHandlers = src._problemHandlers;
_parserFeatures = src._parserFeatures; _parserFeatures = src._parserFeatures;
_parserFeaturesToChange = src._parserFeaturesToChange;
_formatReadFeatures = src._formatReadFeatures; _formatReadFeatures = src._formatReadFeatures;
_formatReadFeaturesToChange = src._formatReadFeaturesToChange; _formatReadFeaturesToChange = src._formatReadFeaturesToChange;
} }
Expand All @@ -170,7 +159,6 @@ private DeserializationConfig(DeserializationConfig src, JsonNodeFactory f)
_deserFeatures = src._deserFeatures; _deserFeatures = src._deserFeatures;
_problemHandlers = src._problemHandlers; _problemHandlers = src._problemHandlers;
_parserFeatures = src._parserFeatures; _parserFeatures = src._parserFeatures;
_parserFeaturesToChange = src._parserFeaturesToChange;
_formatReadFeatures = src._formatReadFeatures; _formatReadFeatures = src._formatReadFeatures;
_formatReadFeaturesToChange = src._formatReadFeaturesToChange; _formatReadFeaturesToChange = src._formatReadFeaturesToChange;
} }
Expand All @@ -182,7 +170,6 @@ private DeserializationConfig(DeserializationConfig src,
_deserFeatures = src._deserFeatures; _deserFeatures = src._deserFeatures;
_problemHandlers = problemHandlers; _problemHandlers = problemHandlers;
_parserFeatures = src._parserFeatures; _parserFeatures = src._parserFeatures;
_parserFeaturesToChange = src._parserFeaturesToChange;
_formatReadFeatures = src._formatReadFeatures; _formatReadFeatures = src._formatReadFeatures;
_formatReadFeaturesToChange = src._formatReadFeaturesToChange; _formatReadFeaturesToChange = src._formatReadFeaturesToChange;
} }
Expand All @@ -193,7 +180,6 @@ private DeserializationConfig(DeserializationConfig src, PropertyName rootName)
_deserFeatures = src._deserFeatures; _deserFeatures = src._deserFeatures;
_problemHandlers = src._problemHandlers; _problemHandlers = src._problemHandlers;
_parserFeatures = src._parserFeatures; _parserFeatures = src._parserFeatures;
_parserFeaturesToChange = src._parserFeaturesToChange;
_formatReadFeatures = src._formatReadFeatures; _formatReadFeatures = src._formatReadFeatures;
_formatReadFeaturesToChange = src._formatReadFeaturesToChange; _formatReadFeaturesToChange = src._formatReadFeaturesToChange;
} }
Expand All @@ -204,7 +190,6 @@ private DeserializationConfig(DeserializationConfig src, Class<?> view)
_deserFeatures = src._deserFeatures; _deserFeatures = src._deserFeatures;
_problemHandlers = src._problemHandlers; _problemHandlers = src._problemHandlers;
_parserFeatures = src._parserFeatures; _parserFeatures = src._parserFeatures;
_parserFeaturesToChange = src._parserFeaturesToChange;
_formatReadFeatures = src._formatReadFeatures; _formatReadFeatures = src._formatReadFeatures;
_formatReadFeaturesToChange = src._formatReadFeaturesToChange; _formatReadFeaturesToChange = src._formatReadFeaturesToChange;
} }
Expand All @@ -215,7 +200,6 @@ protected DeserializationConfig(DeserializationConfig src, ContextAttributes att
_deserFeatures = src._deserFeatures; _deserFeatures = src._deserFeatures;
_problemHandlers = src._problemHandlers; _problemHandlers = src._problemHandlers;
_parserFeatures = src._parserFeatures; _parserFeatures = src._parserFeatures;
_parserFeaturesToChange = src._parserFeaturesToChange;
_formatReadFeatures = src._formatReadFeatures; _formatReadFeatures = src._formatReadFeatures;
_formatReadFeaturesToChange = src._formatReadFeaturesToChange; _formatReadFeaturesToChange = src._formatReadFeaturesToChange;
} }
Expand All @@ -226,7 +210,6 @@ protected DeserializationConfig(DeserializationConfig src, SimpleMixInResolver m
_deserFeatures = src._deserFeatures; _deserFeatures = src._deserFeatures;
_problemHandlers = src._problemHandlers; _problemHandlers = src._problemHandlers;
_parserFeatures = src._parserFeatures; _parserFeatures = src._parserFeatures;
_parserFeaturesToChange = src._parserFeaturesToChange;
_formatReadFeatures = src._formatReadFeatures; _formatReadFeatures = src._formatReadFeatures;
_formatReadFeaturesToChange = src._formatReadFeaturesToChange; _formatReadFeaturesToChange = src._formatReadFeaturesToChange;
} }
Expand All @@ -247,9 +230,8 @@ protected final DeserializationConfig _withBase(BaseSettings newBase) {


@Override @Override
protected final DeserializationConfig _withMapperFeatures(int mapperFeatures) { protected final DeserializationConfig _withMapperFeatures(int mapperFeatures) {
return new DeserializationConfig(this, mapperFeatures, _deserFeatures, return new DeserializationConfig(this, mapperFeatures, _deserFeatures, _parserFeatures,
_parserFeatures, _parserFeaturesToChange, _formatReadFeatures, _formatReadFeaturesToChange);
_formatReadFeatures, _formatReadFeaturesToChange);
} }


/* /*
Expand Down Expand Up @@ -299,8 +281,7 @@ public DeserializationConfig with(DeserializationFeature feature)
{ {
int newDeserFeatures = (_deserFeatures | feature.getMask()); int newDeserFeatures = (_deserFeatures | feature.getMask());
return (newDeserFeatures == _deserFeatures) ? this : return (newDeserFeatures == _deserFeatures) ? this :
new DeserializationConfig(this, _mapperFeatures, newDeserFeatures, new DeserializationConfig(this, _mapperFeatures, newDeserFeatures, _parserFeatures,
_parserFeatures, _parserFeaturesToChange,
_formatReadFeatures, _formatReadFeaturesToChange); _formatReadFeatures, _formatReadFeaturesToChange);
} }


Expand All @@ -316,8 +297,7 @@ public DeserializationConfig with(DeserializationFeature first,
newDeserFeatures |= f.getMask(); newDeserFeatures |= f.getMask();
} }
return (newDeserFeatures == _deserFeatures) ? this : return (newDeserFeatures == _deserFeatures) ? this :
new DeserializationConfig(this, _mapperFeatures, newDeserFeatures, new DeserializationConfig(this, _mapperFeatures, newDeserFeatures, _parserFeatures,
_parserFeatures, _parserFeaturesToChange,
_formatReadFeatures, _formatReadFeaturesToChange); _formatReadFeatures, _formatReadFeaturesToChange);
} }


Expand All @@ -333,7 +313,7 @@ public DeserializationConfig withFeatures(DeserializationFeature... features)
} }
return (newDeserFeatures == _deserFeatures) ? this : return (newDeserFeatures == _deserFeatures) ? this :
new DeserializationConfig(this, _mapperFeatures, newDeserFeatures, new DeserializationConfig(this, _mapperFeatures, newDeserFeatures,
_parserFeatures, _parserFeaturesToChange, _parserFeatures,
_formatReadFeatures, _formatReadFeaturesToChange); _formatReadFeatures, _formatReadFeaturesToChange);
} }


Expand All @@ -346,7 +326,7 @@ public DeserializationConfig without(DeserializationFeature feature)
int newDeserFeatures = _deserFeatures & ~feature.getMask(); int newDeserFeatures = _deserFeatures & ~feature.getMask();
return (newDeserFeatures == _deserFeatures) ? this : return (newDeserFeatures == _deserFeatures) ? this :
new DeserializationConfig(this, _mapperFeatures, newDeserFeatures, new DeserializationConfig(this, _mapperFeatures, newDeserFeatures,
_parserFeatures, _parserFeaturesToChange, _parserFeatures,
_formatReadFeatures, _formatReadFeaturesToChange); _formatReadFeatures, _formatReadFeaturesToChange);
} }


Expand All @@ -362,8 +342,7 @@ public DeserializationConfig without(DeserializationFeature first,
newDeserFeatures &= ~f.getMask(); newDeserFeatures &= ~f.getMask();
} }
return (newDeserFeatures == _deserFeatures) ? this : return (newDeserFeatures == _deserFeatures) ? this :
new DeserializationConfig(this, _mapperFeatures, newDeserFeatures, new DeserializationConfig(this, _mapperFeatures, newDeserFeatures, _parserFeatures,
_parserFeatures, _parserFeaturesToChange,
_formatReadFeatures, _formatReadFeaturesToChange); _formatReadFeatures, _formatReadFeaturesToChange);
} }


Expand All @@ -378,8 +357,7 @@ public DeserializationConfig withoutFeatures(DeserializationFeature... features)
newDeserFeatures &= ~f.getMask(); newDeserFeatures &= ~f.getMask();
} }
return (newDeserFeatures == _deserFeatures) ? this : return (newDeserFeatures == _deserFeatures) ? this :
new DeserializationConfig(this, _mapperFeatures, newDeserFeatures, new DeserializationConfig(this, _mapperFeatures, newDeserFeatures, _parserFeatures,
_parserFeatures, _parserFeaturesToChange,
_formatReadFeatures, _formatReadFeaturesToChange); _formatReadFeatures, _formatReadFeaturesToChange);
} }


Expand All @@ -396,10 +374,8 @@ public DeserializationConfig withoutFeatures(DeserializationFeature... features)
public DeserializationConfig with(JsonParser.Feature feature) public DeserializationConfig with(JsonParser.Feature feature)
{ {
int newSet = _parserFeatures | feature.getMask(); int newSet = _parserFeatures | feature.getMask();
int newMask = _parserFeaturesToChange | feature.getMask(); return (_parserFeatures == newSet)? this :
return ((_parserFeatures == newSet) && (_parserFeaturesToChange == newMask)) ? this : new DeserializationConfig(this, _mapperFeatures, _deserFeatures, newSet,
new DeserializationConfig(this, _mapperFeatures, _deserFeatures,
newSet, newMask,
_formatReadFeatures, _formatReadFeaturesToChange); _formatReadFeatures, _formatReadFeaturesToChange);
} }


Expand All @@ -410,15 +386,11 @@ public DeserializationConfig with(JsonParser.Feature feature)
public DeserializationConfig withFeatures(JsonParser.Feature... features) public DeserializationConfig withFeatures(JsonParser.Feature... features)
{ {
int newSet = _parserFeatures; int newSet = _parserFeatures;
int newMask = _parserFeaturesToChange;
for (JsonParser.Feature f : features) { for (JsonParser.Feature f : features) {
int mask = f.getMask(); newSet |= f.getMask();
newSet |= mask;
newMask |= mask;
} }
return ((_parserFeatures == newSet) && (_parserFeaturesToChange == newMask)) ? this : return (_parserFeatures == newSet) ? this :
new DeserializationConfig(this, _mapperFeatures, _deserFeatures, new DeserializationConfig(this, _mapperFeatures, _deserFeatures, newSet,
newSet, newMask,
_formatReadFeatures, _formatReadFeaturesToChange); _formatReadFeatures, _formatReadFeaturesToChange);
} }


Expand All @@ -429,31 +401,23 @@ public DeserializationConfig withFeatures(JsonParser.Feature... features)
public DeserializationConfig without(JsonParser.Feature feature) public DeserializationConfig without(JsonParser.Feature feature)
{ {
int newSet = _parserFeatures & ~feature.getMask(); int newSet = _parserFeatures & ~feature.getMask();
int newMask = _parserFeaturesToChange | feature.getMask(); return (_parserFeatures == newSet) ? this :
return ((_parserFeatures == newSet) && (_parserFeaturesToChange == newMask)) ? this : new DeserializationConfig(this, _mapperFeatures, _deserFeatures, newSet,
new DeserializationConfig(this, _mapperFeatures, _deserFeatures,
newSet, newMask,
_formatReadFeatures, _formatReadFeaturesToChange); _formatReadFeatures, _formatReadFeaturesToChange);
} }


/** /**
* Fluent factory method that will construct and return a new configuration * Fluent factory method that will construct and return a new configuration
* object instance with specified features disabled. * object instance with specified features disabled.
*
* @since 2.5
*/ */
public DeserializationConfig withoutFeatures(JsonParser.Feature... features) public DeserializationConfig withoutFeatures(JsonParser.Feature... features)
{ {
int newSet = _parserFeatures; int newSet = _parserFeatures;
int newMask = _parserFeaturesToChange;
for (JsonParser.Feature f : features) { for (JsonParser.Feature f : features) {
int mask = f.getMask(); newSet &= ~f.getMask();
newSet &= ~mask;
newMask |= mask;
} }
return ((_parserFeatures == newSet) && (_parserFeaturesToChange == newMask)) ? this : return (_parserFeatures == newSet)? this :
new DeserializationConfig(this, _mapperFeatures, _deserFeatures, new DeserializationConfig(this, _mapperFeatures, _deserFeatures, newSet,
newSet, newMask,
_formatReadFeatures, _formatReadFeaturesToChange); _formatReadFeatures, _formatReadFeaturesToChange);
} }


Expand All @@ -476,7 +440,7 @@ public DeserializationConfig with(FormatFeature feature)
return this; return this;
} }
return new DeserializationConfig(this, _mapperFeatures, _deserFeatures, return new DeserializationConfig(this, _mapperFeatures, _deserFeatures,
_parserFeatures, _parserFeaturesToChange, _parserFeatures,
newSet, newMask); newSet, newMask);
} }


Expand All @@ -495,7 +459,7 @@ public DeserializationConfig withFeatures(FormatFeature... features)
} }
return ((_formatReadFeatures == newSet) && (_formatReadFeaturesToChange == newMask)) ? this : return ((_formatReadFeatures == newSet) && (_formatReadFeaturesToChange == newMask)) ? this :
new DeserializationConfig(this, _mapperFeatures, _deserFeatures, new DeserializationConfig(this, _mapperFeatures, _deserFeatures,
_parserFeatures, _parserFeaturesToChange, _parserFeatures,
newSet, newMask); newSet, newMask);
} }


Expand All @@ -509,7 +473,7 @@ public DeserializationConfig without(FormatFeature feature)
int newMask = _formatReadFeaturesToChange | feature.getMask(); int newMask = _formatReadFeaturesToChange | feature.getMask();
return ((_formatReadFeatures == newSet) && (_formatReadFeaturesToChange == newMask)) ? this : return ((_formatReadFeatures == newSet) && (_formatReadFeaturesToChange == newMask)) ? this :
new DeserializationConfig(this, _mapperFeatures, _deserFeatures, new DeserializationConfig(this, _mapperFeatures, _deserFeatures,
_parserFeatures, _parserFeaturesToChange, _parserFeatures,
newSet, newMask); newSet, newMask);
} }


Expand All @@ -528,7 +492,7 @@ public DeserializationConfig withoutFeatures(FormatFeature... features)
} }
return ((_formatReadFeatures == newSet) && (_formatReadFeaturesToChange == newMask)) ? this : return ((_formatReadFeatures == newSet) && (_formatReadFeaturesToChange == newMask)) ? this :
new DeserializationConfig(this, _mapperFeatures, _deserFeatures, new DeserializationConfig(this, _mapperFeatures, _deserFeatures,
_parserFeatures, _parserFeaturesToChange, _parserFeatures,
newSet, newMask); newSet, newMask);
} }


Expand Down Expand Up @@ -574,7 +538,7 @@ public DeserializationConfig withNoProblemHandlers() {
* @since 3.0 * @since 3.0
*/ */
public int getParserFeatures(int defaults) { public int getParserFeatures(int defaults) {
return (defaults & ~_parserFeaturesToChange) | _parserFeatures; return _parserFeatures;
} }


/** /**
Expand Down Expand Up @@ -603,19 +567,13 @@ public final boolean isEnabled(DeserializationFeature f) {
return (_deserFeatures & f.getMask()) != 0; return (_deserFeatures & f.getMask()) != 0;
} }


public final boolean isEnabled(JsonParser.Feature f, TokenStreamFactory factory) { public final boolean isEnabled(JsonParser.Feature f) {
int mask = f.getMask(); return (_parserFeatures & f.getMask()) != 0;
if ((_parserFeaturesToChange & mask) != 0) {
return (_parserFeatures & f.getMask()) != 0;
}
return factory.isEnabled(f);
} }


/** /**
* Bulk access method for checking that all features specified by * Bulk access method for checking that all features specified by
* mask are enabled. * mask are enabled.
*
* @since 2.3
*/ */
public final boolean hasDeserializationFeatures(int featureMask) { public final boolean hasDeserializationFeatures(int featureMask) {
return (_deserFeatures & featureMask) == featureMask; return (_deserFeatures & featureMask) == featureMask;
Expand All @@ -624,8 +582,6 @@ public final boolean hasDeserializationFeatures(int featureMask) {
/** /**
* Bulk access method for checking that at least one of features specified by * Bulk access method for checking that at least one of features specified by
* mask is enabled. * mask is enabled.
*
* @since 2.6
*/ */
public final boolean hasSomeOfFeatures(int featureMask) { public final boolean hasSomeOfFeatures(int featureMask) {
return (_deserFeatures & featureMask) != 0; return (_deserFeatures & featureMask) != 0;
Expand All @@ -640,12 +596,10 @@ public final int getDeserializationFeatures() {
} }


/** /**
* Convenience method equivalant to: * Convenience method equivalent to:
*<code> *<code>
* isEnabled(DeserializationFeature.FAIL_ON_TRAILING_TOKENS) * isEnabled(DeserializationFeature.FAIL_ON_TRAILING_TOKENS)
*</code> *</code>
*
* @since 2.9
*/ */
public final boolean requiresFullValue() { public final boolean requiresFullValue() {
return DeserializationFeature.FAIL_ON_TRAILING_TOKENS.enabledIn(_deserFeatures); return DeserializationFeature.FAIL_ON_TRAILING_TOKENS.enabledIn(_deserFeatures);
Expand Down

0 comments on commit 3419c38

Please sign in to comment.