Skip to content

Commit d93bcb2

Browse files
committed
Fix #551
1 parent 46f5d58 commit d93bcb2

File tree

8 files changed

+109
-127
lines changed

8 files changed

+109
-127
lines changed

release-notes/VERSION

+1
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,5 @@ JSON library.
2626
#492: Ensure primitive type names in error message enclosed in backticks
2727
#495: Create `StreamReadFeature` to move non-json specific `JsonParser.Feature`s to
2828
#496: Create `StreamWriteFeature` to take over non-json-specific `JsonGenerator.Feature`s
29+
#551: Remove `JsonGenerator.setPrettyPrinter()` from 3.0
2930
- Rename `JsonGenerator.Feature.AUTO_CLOSE_JSON_CONTENT` as `AUTO_CLOSE_CONTENT`

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

+2-34
Original file line numberDiff line numberDiff line change
@@ -230,43 +230,11 @@ public void setSchema(FormatSchema schema) {
230230
public FormatSchema getSchema() { return null; }
231231

232232
/*
233-
/**********************************************************
233+
/**********************************************************************
234234
/* Public API, other configuration
235-
/**********************************************************
235+
/**********************************************************************
236236
*/
237237

238-
/**
239-
* Method for setting a custom pretty printer, which is usually
240-
* used to add indentation for improved human readability.
241-
* By default, generator does not do pretty printing.
242-
*<p>
243-
* To use the default pretty printer that comes with core
244-
* Jackson distribution, call {@link #useDefaultPrettyPrinter}
245-
* instead.
246-
*
247-
* @return Generator itself (this), to allow chaining
248-
*/
249-
public JsonGenerator setPrettyPrinter(PrettyPrinter pp) {
250-
return _reportUnsupportedOperation();
251-
}
252-
253-
/**
254-
* Accessor for checking whether this generator has a configured
255-
* {@link PrettyPrinter}; returns it if so, null if none configured.
256-
*/
257-
public PrettyPrinter getPrettyPrinter() {
258-
return null;
259-
}
260-
261-
/**
262-
* Convenience method for enabling pretty-printing using
263-
* the default pretty printer
264-
* ({@link com.fasterxml.jackson.core.util.DefaultPrettyPrinter}).
265-
*
266-
* @return Generator itself (this), to allow chaining
267-
*/
268-
public abstract JsonGenerator useDefaultPrettyPrinter();
269-
270238
/**
271239
* Method that can be called to request that generator escapes
272240
* all character codes above specified code point (if positive value);

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

-8
Original file line numberDiff line numberDiff line change
@@ -181,14 +181,6 @@ public JsonGenerator disable(StreamWriteFeature f) {
181181
return this;
182182
}
183183

184-
@Override public JsonGenerator useDefaultPrettyPrinter() {
185-
// Should not override a pretty printer if one already assigned.
186-
if (getPrettyPrinter() != null) {
187-
return this;
188-
}
189-
return setPrettyPrinter(_constructDefaultPrettyPrinter());
190-
}
191-
192184
/*
193185
/**********************************************************
194186
/* Public API, accessors

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

-11
Original file line numberDiff line numberDiff line change
@@ -171,17 +171,6 @@ public CharacterEscapes getCharacterEscapes() {
171171
return _characterEscapes;
172172
}
173173

174-
@Override
175-
public JsonGenerator setPrettyPrinter(PrettyPrinter pp) {
176-
_cfgPrettyPrinter = pp;
177-
return this;
178-
}
179-
180-
@Override
181-
public PrettyPrinter getPrettyPrinter() {
182-
return _cfgPrettyPrinter;
183-
}
184-
185174
/*
186175
/**********************************************************
187176
/* Partial API

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

+1-2
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@
99
* Default {@link PrettyPrinter} implementation that uses 2-space
1010
* indentation with platform-default linefeeds.
1111
* Usually this class is not instantiated directly, but instead
12-
* method {@link JsonGenerator#useDefaultPrettyPrinter} is
13-
* used, which will use an instance of this class for operation.
12+
* matching feature is used, which will use an instance of this class for operation.
1413
*/
1514
@SuppressWarnings("serial")
1615
public class DefaultPrettyPrinter

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

-13
Original file line numberDiff line numberDiff line change
@@ -130,19 +130,6 @@ public JsonGenerator disable(StreamWriteFeature f) {
130130
/**********************************************************
131131
*/
132132

133-
@Override
134-
public JsonGenerator setPrettyPrinter(PrettyPrinter pp) {
135-
delegate.setPrettyPrinter(pp);
136-
return this;
137-
}
138-
139-
@Override
140-
public PrettyPrinter getPrettyPrinter() { return delegate.getPrettyPrinter(); }
141-
142-
@Override
143-
public JsonGenerator useDefaultPrettyPrinter() { delegate.useDefaultPrettyPrinter();
144-
return this; }
145-
146133
@Override
147134
public JsonGenerator setHighestNonEscapedChar(int charCode) { delegate.setHighestNonEscapedChar(charCode);
148135
return this; }

src/test/java/com/fasterxml/jackson/core/main/TestPrettyPrinter.java

+74-43
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,14 @@ public void testObjectCount() throws Exception
4949
boolean useBytes = (i > 0);
5050
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
5151
StringWriter sw = new StringWriter();
52-
JsonGenerator gen = useBytes ? f.createGenerator(ObjectWriteContext.empty(), bytes)
53-
: f.createGenerator(ObjectWriteContext.empty(), sw);
54-
gen.setPrettyPrinter(new CountPrinter());
52+
53+
ObjectWriteContext ppContext = new ObjectWriteContext.Base() {
54+
@Override
55+
public PrettyPrinter getPrettyPrinter() { return new CountPrinter(); }
56+
};
57+
58+
JsonGenerator gen = useBytes ? f.createGenerator(ppContext, bytes)
59+
: f.createGenerator(ppContext, sw);
5560
gen.writeStartObject();
5661
gen.writeFieldName("x");
5762
gen.writeStartObject();
@@ -76,9 +81,13 @@ public void testArrayCount() throws Exception
7681
boolean useBytes = (i > 0);
7782
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
7883
StringWriter sw = new StringWriter();
79-
JsonGenerator gen = useBytes ? f.createGenerator(ObjectWriteContext.empty(), bytes)
80-
: f.createGenerator(ObjectWriteContext.empty(), sw);
81-
gen.setPrettyPrinter(new CountPrinter());
84+
ObjectWriteContext ppContext = new ObjectWriteContext.Base() {
85+
@Override
86+
public PrettyPrinter getPrettyPrinter() { return new CountPrinter(); }
87+
};
88+
89+
JsonGenerator gen = useBytes ? f.createGenerator(ppContext, bytes)
90+
: f.createGenerator(ppContext, sw);
8291
gen.writeStartArray();
8392
gen.writeNumber(6);
8493
gen.writeStartArray();
@@ -93,38 +102,38 @@ public void testArrayCount() throws Exception
93102
assertEquals(EXP, json);
94103
}
95104
}
96-
97-
public void testSimpleDocWithDefault() throws Exception
98-
{
99-
StringWriter sw = new StringWriter();
100-
JsonGenerator gen = new JsonFactory().createGenerator(ObjectWriteContext.empty(), sw);
101-
gen.useDefaultPrettyPrinter();
102-
_verifyPrettyPrinter(gen, sw);
103-
gen.close();
104-
}
105105

106106
@SuppressWarnings("resource")
107107
public void testSimpleDocWithMinimal() throws Exception
108108
{
109109
StringWriter sw = new StringWriter();
110-
JsonGenerator gen = new JsonFactory().createGenerator(ObjectWriteContext.empty(), sw);
111110
// first with standard minimal
112-
gen.setPrettyPrinter(new MinimalPrettyPrinter());
111+
ObjectWriteContext ppContext = new ObjectWriteContext.Base() {
112+
@Override
113+
public PrettyPrinter getPrettyPrinter() { return new MinimalPrettyPrinter(); }
114+
};
115+
JsonGenerator gen = new JsonFactory().createGenerator(ppContext, sw);
113116
String docStr = _verifyPrettyPrinter(gen, sw);
114117
// which should have no linefeeds, tabs
115118
assertEquals(-1, docStr.indexOf('\n'));
116119
assertEquals(-1, docStr.indexOf('\t'));
117120

118121
// And then with slightly customized variant
119-
gen = new JsonFactory().createGenerator(ObjectWriteContext.empty(), sw);
120-
gen.setPrettyPrinter(new MinimalPrettyPrinter() {
122+
ppContext = new ObjectWriteContext.Base() {
121123
@Override
122-
// use TAB between array values
123-
public void beforeArrayValues(JsonGenerator jg) throws IOException, JsonGenerationException
124-
{
125-
jg.writeRaw("\t");
124+
public PrettyPrinter getPrettyPrinter() {
125+
return new MinimalPrettyPrinter() {
126+
@Override
127+
// use TAB between array values
128+
public void beforeArrayValues(JsonGenerator jg) throws IOException, JsonGenerationException
129+
{
130+
jg.writeRaw("\t");
131+
}
132+
};
126133
}
127-
});
134+
};
135+
136+
gen = new JsonFactory().createGenerator(ppContext, sw);
128137
docStr = _verifyPrettyPrinter(gen, sw);
129138
assertEquals(-1, docStr.indexOf('\n'));
130139
assertTrue(docStr.indexOf('\t') >= 0);
@@ -161,11 +170,17 @@ public void testCustomRootSeparatorWithFactory() throws Exception
161170
public void testCustomSeparatorsWithMinimal() throws Exception
162171
{
163172
StringWriter sw = new StringWriter();
164-
JsonGenerator gen = new JsonFactory().createGenerator(ObjectWriteContext.empty(), sw);
165-
gen.setPrettyPrinter(new MinimalPrettyPrinter().setSeparators(Separators.createDefaultInstance()
166-
.withObjectFieldValueSeparator('=')
167-
.withObjectEntrySeparator(';')
168-
.withArrayValueSeparator('|')));
173+
ObjectWriteContext ppContext = new ObjectWriteContext.Base() {
174+
@Override
175+
public PrettyPrinter getPrettyPrinter() {
176+
return new MinimalPrettyPrinter().setSeparators(Separators.createDefaultInstance()
177+
.withObjectFieldValueSeparator('=')
178+
.withObjectEntrySeparator(';')
179+
.withArrayValueSeparator('|'));
180+
}
181+
};
182+
183+
JsonGenerator gen = new JsonFactory().createGenerator(ppContext, sw);
169184
_writeTestDocument(gen);
170185
gen.close();
171186
assertEquals("[3|\"abc\"|[true]|{\"f\"=null;\"f2\"=null}]", sw.toString());
@@ -174,12 +189,17 @@ public void testCustomSeparatorsWithMinimal() throws Exception
174189
public void testCustomSeparatorsWithPP() throws Exception
175190
{
176191
StringWriter sw = new StringWriter();
177-
JsonGenerator gen = new JsonFactory().createGenerator(ObjectWriteContext.empty(), sw);
178-
gen.setPrettyPrinter(new DefaultPrettyPrinter().withSeparators(Separators.createDefaultInstance()
179-
.withObjectFieldValueSeparator('=')
180-
.withObjectEntrySeparator(';')
181-
.withArrayValueSeparator('|')));
182-
192+
ObjectWriteContext ppContext = new ObjectWriteContext.Base() {
193+
@Override
194+
public PrettyPrinter getPrettyPrinter() {
195+
return new DefaultPrettyPrinter().withSeparators(Separators.createDefaultInstance()
196+
.withObjectFieldValueSeparator('=')
197+
.withObjectEntrySeparator(';')
198+
.withArrayValueSeparator('|'));
199+
}
200+
};
201+
202+
JsonGenerator gen = new JsonFactory().createGenerator(ppContext, sw);
183203
_writeTestDocument(gen);
184204
gen.close();
185205
assertEquals("[ 3| \"abc\"| [ true ]| {" + DefaultIndenter.SYS_LF +
@@ -191,12 +211,18 @@ public void testCustomSeparatorsWithPP() throws Exception
191211
public void testCustomSeparatorsWithPPWithoutSpaces() throws Exception
192212
{
193213
StringWriter sw = new StringWriter();
194-
JsonGenerator gen = new JsonFactory().createGenerator(ObjectWriteContext.empty(), sw);
195-
gen.setPrettyPrinter(new DefaultPrettyPrinter().withSeparators(Separators.createDefaultInstance()
196-
.withObjectFieldValueSeparator('=')
197-
.withObjectEntrySeparator(';')
198-
.withArrayValueSeparator('|'))
199-
.withoutSpacesInObjectEntries());
214+
ObjectWriteContext ppContext = new ObjectWriteContext.Base() {
215+
@Override
216+
public PrettyPrinter getPrettyPrinter() {
217+
return new DefaultPrettyPrinter().withSeparators(Separators.createDefaultInstance()
218+
.withObjectFieldValueSeparator('=')
219+
.withObjectEntrySeparator(';')
220+
.withArrayValueSeparator('|'))
221+
.withoutSpacesInObjectEntries();
222+
}
223+
};
224+
225+
JsonGenerator gen = new JsonFactory().createGenerator(ppContext, sw);
200226

201227
_writeTestDocument(gen);
202228
gen.close();
@@ -269,8 +295,13 @@ private void _writeTestDocument(JsonGenerator gen) throws IOException {
269295
protected String _generateRoot(TokenStreamFactory f, PrettyPrinter pp) throws IOException
270296
{
271297
StringWriter sw = new StringWriter();
272-
JsonGenerator gen = new JsonFactory().createGenerator(ObjectWriteContext.empty(), sw);
273-
gen.setPrettyPrinter(pp);
298+
ObjectWriteContext ppContext = new ObjectWriteContext.Base() {
299+
@Override
300+
public PrettyPrinter getPrettyPrinter() {
301+
return pp;
302+
}
303+
};
304+
JsonGenerator gen = new JsonFactory().createGenerator(ppContext, sw);
274305
gen.writeStartObject();
275306
gen.writeEndObject();
276307
gen.writeStartObject();

src/test/java/com/fasterxml/jackson/core/util/TestDefaultPrettyPrinter.java

+31-16
Original file line numberDiff line numberDiff line change
@@ -85,13 +85,18 @@ public void testTabIndent() throws IOException
8585

8686
public void testRootSeparator() throws IOException
8787
{
88-
DefaultPrettyPrinter pp = new DefaultPrettyPrinter()
89-
.withRootSeparator("|");
9088
final String EXP = "1|2|3";
9189

90+
ObjectWriteContext ppContext = new ObjectWriteContext.Base() {
91+
@Override
92+
public PrettyPrinter getPrettyPrinter() {
93+
return new DefaultPrettyPrinter()
94+
.withRootSeparator("|");
95+
}
96+
};
97+
9298
StringWriter sw = new StringWriter();
93-
JsonGenerator gen = JSON_F.createGenerator(ObjectWriteContext.empty(), sw);
94-
gen.setPrettyPrinter(pp);
99+
JsonGenerator gen = JSON_F.createGenerator(ppContext, sw);
95100

96101
gen.writeNumber(1);
97102
gen.writeNumber(2);
@@ -100,8 +105,7 @@ public void testRootSeparator() throws IOException
100105
assertEquals(EXP, sw.toString());
101106

102107
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
103-
gen = JSON_F.createGenerator(ObjectWriteContext.empty(), bytes);
104-
gen.setPrettyPrinter(pp);
108+
gen = JSON_F.createGenerator(ppContext, bytes);
105109

106110
gen.writeNumber(1);
107111
gen.writeNumber(2);
@@ -110,13 +114,19 @@ public void testRootSeparator() throws IOException
110114
assertEquals(EXP, bytes.toString("UTF-8"));
111115

112116
// Also: let's try removing separator altogether
113-
pp = pp.withRootSeparator((String) null)
114-
.withArrayIndenter(null)
115-
.withObjectIndenter(null)
116-
.withoutSpacesInObjectEntries();
117+
ppContext = new ObjectWriteContext.Base() {
118+
@Override
119+
public PrettyPrinter getPrettyPrinter() {
120+
return new DefaultPrettyPrinter()
121+
.withRootSeparator((String) null)
122+
.withArrayIndenter(null)
123+
.withObjectIndenter(null)
124+
.withoutSpacesInObjectEntries();
125+
}
126+
};
127+
117128
sw = new StringWriter();
118-
gen = JSON_F.createGenerator(ObjectWriteContext.empty(), sw);
119-
gen.setPrettyPrinter(pp);
129+
gen = JSON_F.createGenerator(ppContext, sw);
120130

121131
gen.writeNumber(1);
122132
gen.writeStartArray();
@@ -131,22 +141,27 @@ public void testRootSeparator() throws IOException
131141
assertEquals("1[2]{\"a\":3}", sw.toString());
132142
}
133143

134-
private String _printTestData(PrettyPrinter pp, boolean useBytes) throws IOException
144+
private String _printTestData(final PrettyPrinter pp, boolean useBytes) throws IOException
135145
{
136146
JsonGenerator gen;
137147
StringWriter sw;
138148
ByteArrayOutputStream bytes;
139149

150+
ObjectWriteContext ppContext = new ObjectWriteContext.Base() {
151+
@Override
152+
public PrettyPrinter getPrettyPrinter() { return pp; }
153+
};
154+
140155
if (useBytes) {
141156
sw = null;
142157
bytes = new ByteArrayOutputStream();
143-
gen = JSON_F.createGenerator(ObjectWriteContext.empty(), bytes);
158+
gen = JSON_F.createGenerator(ppContext, bytes);
144159
} else {
145160
sw = new StringWriter();
146161
bytes = null;
147-
gen = JSON_F.createGenerator(ObjectWriteContext.empty(), sw);
162+
gen = JSON_F.createGenerator(ppContext, sw);
148163
}
149-
gen.setPrettyPrinter(pp);
164+
150165
gen.writeStartObject();
151166
gen.writeFieldName("name");
152167
gen.writeString("John Doe");

0 commit comments

Comments
 (0)