package com.fasterxml.jackson.core.util;

Container similar to EnumSet meant for storing sets of JacksonFeatures (usually Enums): main difference being that these sets are immutable. Also only supports relatively small sets of features: specifically, up to 31 features.
Since:2.12
/** * Container similar to {@link java.util.EnumSet} meant for storing sets of * {@link JacksonFeature}s (usually {@link java.lang.Enum}s): main * difference being that these sets are immutable. Also only supports relatively * small sets of features: specifically, up to 31 features. * * @since 2.12 */
public final class JacksonFeatureSet<F extends JacksonFeature> { protected int _enabled;
Constructor for creating instance with specific bitmask, wherein 1 bit means matching JacksonFeature is enabled and 0 disabled.
Params:
  • bitmask – Bitmask for features that are enabled
/** * Constructor for creating instance with specific bitmask, wherein * {@code 1} bit means matching {@link JacksonFeature} is enabled and * {@code 0} disabled. * * @param bitmask Bitmask for features that are enabled */
protected JacksonFeatureSet(int bitmask) { _enabled = bitmask; }
"Default" factory which will calculate settings based on default-enabled status of all features.
Params:
  • allFeatures – Set of all features (enabled or disabled): usually from Enum.values()
Type parameters:
  • <F> – Self-reference type for convenience
Returns:Feature set instance constructed
/** * "Default" factory which will calculate settings based on default-enabled * status of all features. * * @param <F> Self-reference type for convenience * * @param allFeatures Set of all features (enabled or disabled): usually from * {@code Enum.values()} * * @return Feature set instance constructed */
public static <F extends JacksonFeature> JacksonFeatureSet<F> fromDefaults(F[] allFeatures) { // first sanity check if (allFeatures.length > 31) { final String desc = allFeatures[0].getClass().getName(); throw new IllegalArgumentException(String.format( "Can not use type `%s` with JacksonFeatureSet: too many entries (%d > 31)", desc, allFeatures.length)); } int flags = 0; for (F f : allFeatures) { if (f.enabledByDefault()) { flags |= f.getMask(); } } return new JacksonFeatureSet<F>(flags); } public static <F extends JacksonFeature> JacksonFeatureSet<F> fromBitmask(int bitmask) { return new JacksonFeatureSet<F>(bitmask); }
Mutant factory for getting a set in which specified feature is enabled: will either return this instance (if no change), or newly created set (if there is change).
Params:
  • feature – Feature to enable in set returned
Returns:Newly created set of state of feature changed; this if not
/** * Mutant factory for getting a set in which specified feature is enabled: * will either return this instance (if no change), or newly created set (if there * is change). * * @param feature Feature to enable in set returned * * @return Newly created set of state of feature changed; {@code this} if not */
public JacksonFeatureSet<F> with(F feature) { int newMask = _enabled | feature.getMask(); return (newMask == _enabled) ? this : new JacksonFeatureSet<F>(newMask); }
Mutant factory for getting a set in which specified feature is disabled: will either return this instance (if no change), or newly created set (if there is change).
Params:
  • feature – Feature to disable in set returned
Returns:Newly created set of state of feature changed; this if not
/** * Mutant factory for getting a set in which specified feature is disabled: * will either return this instance (if no change), or newly created set (if there * is change). * * @param feature Feature to disable in set returned * * @return Newly created set of state of feature changed; {@code this} if not */
public JacksonFeatureSet<F> without(F feature) { int newMask = _enabled & ~feature.getMask(); return (newMask == _enabled) ? this : new JacksonFeatureSet<F>(newMask); }
Main accessor for checking whether given feature is enabled in this feature set.
Params:
  • feature – Feature to check
Returns:True if feature is enabled in this set; false otherwise
/** * Main accessor for checking whether given feature is enabled in this feature set. * * @param feature Feature to check * * @return True if feature is enabled in this set; false otherwise */
public boolean isEnabled(F feature) { return (feature.getMask() & _enabled) != 0; }
Accessor for underlying bitmask
Returns:Bitmask of enabled features
/** * Accessor for underlying bitmask * * @return Bitmask of enabled features */
public int asBitmask() { return _enabled; } }