Skip to content

Commit 963c876

Browse files
committed
Merge branch '2.12'
2 parents edaca42 + b26d1af commit 963c876

File tree

6 files changed

+111
-3
lines changed

6 files changed

+111
-3
lines changed

release-notes/VERSION-2.x

+2
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ JSON library.
2121
#619: Add `StreamReadCapability` for further format-based/format-agnostic
2222
handling improvements
2323
#627: Add `JsonParser.isExpectedNumberIntToken()` convenience method
24+
#630: Add `StreamWriteCapability` for further format-based/format-agnostic
25+
handling improvements
2426
- Deprecate `JsonParser.getCurrentTokenId()` (use `#currentTokenId()` instead)
2527

2628
2.11.1 (25-Jun-2020)

src/main/java/com/fasterxml/jackson/core/JsonGenerator.java

+11
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import com.fasterxml.jackson.core.io.CharacterEscapes;
1414
import com.fasterxml.jackson.core.type.WritableTypeId;
1515
import com.fasterxml.jackson.core.type.WritableTypeId.Inclusion;
16+
import com.fasterxml.jackson.core.util.JacksonFeatureSet;
1617
import com.fasterxml.jackson.core.util.VersionUtil;
1718

1819
import static com.fasterxml.jackson.core.JsonTokenId.*;
@@ -285,6 +286,16 @@ protected JsonGenerator() { }
285286
*/
286287
public boolean canWriteFormattedNumbers() { return false; }
287288

289+
/**
290+
* Accessor for getting metadata on capabilities of this parser, based on
291+
* underlying data format being read (directly or indirectly).
292+
*
293+
* @return Set of read capabilities for content to read via this parser
294+
*
295+
* @since 2.12
296+
*/
297+
public abstract JacksonFeatureSet<StreamWriteCapability> getWriteCapabilities();
298+
288299
/*
289300
/**********************************************************************
290301
/* Public API, write methods, structural
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package com.fasterxml.jackson.core;
2+
3+
import com.fasterxml.jackson.core.util.JacksonFeature;
4+
5+
/**
6+
* Set of on/off capabilities that a {@link JsonGenerator} for given format
7+
* (or in case of buffering, original format) has.
8+
* Used in some cases to adjust aspects of things like content conversions and
9+
* coercions by format-agnostic functionality.
10+
* Specific or expected usage documented by individual capability entry Javadocs.
11+
*
12+
* @since 2.12
13+
*/
14+
public enum StreamWriteCapability
15+
implements JacksonFeature
16+
{
17+
/**
18+
* Capability that indicates that the data format is able to express binary
19+
* data natively, without using textual encoding like Base64.
20+
*<p>
21+
* Capability is currently enabled for all binary formats and none of textual
22+
* formats.
23+
*/
24+
CAN_WRITE_BINARY_NATIVELY(false),
25+
26+
/**
27+
* Capability that indicates that the data format is able to write
28+
* "formatted numbers": that is, output of numbers is done as Strings
29+
* and caller is allowed to pass in logical number values as Strings.
30+
*<p>
31+
* Capability is currently enabled for most textual formats and none of binary
32+
* formats.
33+
*/
34+
CAN_WRITE_FORMATTED_NUMBERS(false)
35+
;
36+
37+
/**
38+
* Whether feature is enabled or disabled by default.
39+
*/
40+
private final boolean _defaultState;
41+
42+
private final int _mask;
43+
44+
private StreamWriteCapability(boolean defaultState) {
45+
_defaultState = defaultState;
46+
_mask = (1 << ordinal());
47+
}
48+
49+
@Override
50+
public boolean enabledByDefault() { return _defaultState; }
51+
@Override
52+
public boolean enabledIn(int flags) { return (flags & _mask) != 0; }
53+
@Override
54+
public int getMask() { return _mask; }
55+
}

src/main/java/com/fasterxml/jackson/core/base/GeneratorBase.java

+30-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.fasterxml.jackson.core.*;
44
import com.fasterxml.jackson.core.util.DefaultPrettyPrinter;
5+
import com.fasterxml.jackson.core.util.JacksonFeatureSet;
56

67
import java.io.IOException;
78
import java.io.InputStream;
@@ -35,7 +36,35 @@ public abstract class GeneratorBase extends JsonGenerator
3536
* huge "plain" serialization. See [core#315] for details.
3637
*/
3738
protected final static int MAX_BIG_DECIMAL_SCALE = 9999;
38-
39+
40+
/*
41+
/**********************************************************************
42+
/* Default capabilities
43+
/**********************************************************************
44+
*/
45+
46+
/**
47+
* Default set of {@link StreamReadCapability}ies that may be used as
48+
* basis for format-specific readers (or as bogus instance if non-null
49+
* set needs to be passed).
50+
*/
51+
protected final static JacksonFeatureSet<StreamWriteCapability> DEFAULT_WRITE_CAPABILITIES
52+
= JacksonFeatureSet.fromDefaults(StreamWriteCapability.values());
53+
54+
/**
55+
* Default set of {@link StreamReadCapability}ies for typical textual formats,
56+
* to use either as-is, or as a base with possible differences.
57+
*/
58+
protected final static JacksonFeatureSet<StreamWriteCapability> DEFAULT_TEXTUAL_WRITE_CAPABILITIES
59+
= DEFAULT_WRITE_CAPABILITIES.with(StreamWriteCapability.CAN_WRITE_FORMATTED_NUMBERS);
60+
61+
/**
62+
* Default set of {@link StreamReadCapability}ies for typical binary formats,
63+
* to use either as-is, or as a base with possible differences.
64+
*/
65+
protected final static JacksonFeatureSet<StreamWriteCapability> DEFAULT_BINARY_WRITE_CAPABILITIES
66+
= DEFAULT_WRITE_CAPABILITIES.with(StreamWriteCapability.CAN_WRITE_BINARY_NATIVELY);
67+
3968
/*
4069
/**********************************************************************
4170
/* Configuration

src/main/java/com/fasterxml/jackson/core/json/JsonGeneratorBase.java

+8-2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import com.fasterxml.jackson.core.io.CharTypes;
88
import com.fasterxml.jackson.core.io.CharacterEscapes;
99
import com.fasterxml.jackson.core.io.IOContext;
10+
import com.fasterxml.jackson.core.util.JacksonFeatureSet;
1011

1112
/**
1213
* Intermediate base class shared by JSON-backed generators
@@ -156,14 +157,19 @@ public JsonGeneratorBase(ObjectWriteContext writeCtxt, IOContext ctxt,
156157

157158
/*
158159
/**********************************************************************
159-
/* Versioned, accessors
160+
/* Versioned, accessors, capabilities
160161
/**********************************************************************
161162
*/
162163

163164
@Override public Version version() { return PackageVersion.VERSION; }
164165

165166
public boolean isEnabled(JsonWriteFeature f) { return f.enabledIn(_formatWriteFeatures); }
166-
167+
168+
@Override
169+
public JacksonFeatureSet<StreamWriteCapability> getWriteCapabilities() {
170+
return DEFAULT_WRITE_CAPABILITIES;
171+
}
172+
167173
/*
168174
/**********************************************************************
169175
/* Overridden configuration methods

src/main/java/com/fasterxml/jackson/core/util/JsonGeneratorDelegate.java

+5
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,11 @@ public void setCurrentValue(Object v) {
8585
@Override
8686
public boolean canWriteFormattedNumbers() { return delegate.canWriteFormattedNumbers(); }
8787

88+
@Override
89+
public JacksonFeatureSet<StreamWriteCapability> getWriteCapabilities() {
90+
return delegate.getWriteCapabilities();
91+
}
92+
8893
/*
8994
/**********************************************************************
9095
/* Public API, configuration

0 commit comments

Comments
 (0)