From 157f2c490003c7494af8ecb7d57880cda1fde736 Mon Sep 17 00:00:00 2001 From: Tatu Saloranta Date: Tue, 11 Dec 2018 22:06:44 -0800 Subject: [PATCH] Fix #502 --- release-notes/VERSION-2.x | 1 + .../jackson/core/util/DefaultPrettyPrinter.java | 6 +++++- .../java/com/fasterxml/jackson/core/BaseTest.java | 7 ++++++- .../core/util/TestDefaultPrettyPrinter.java | 15 +++++++++++++++ 4 files changed, 27 insertions(+), 2 deletions(-) diff --git a/release-notes/VERSION-2.x b/release-notes/VERSION-2.x index 925d72c5eb..1972f80c0c 100644 --- a/release-notes/VERSION-2.x +++ b/release-notes/VERSION-2.x @@ -25,6 +25,7 @@ JSON library. `writeRaw(..)`) more efficiently #495: Create `StreamReadFeature` to move non-json specific `JsonParser.Feature`s to #496: Create `StreamWriteFeature` to take over non-json-specific `JsonGenerator.Feature`s +#502: Make `DefaultPrettyPrinter.createInstance()` to fail for sub-classes 2.9.8 (not yet released) diff --git a/src/main/java/com/fasterxml/jackson/core/util/DefaultPrettyPrinter.java b/src/main/java/com/fasterxml/jackson/core/util/DefaultPrettyPrinter.java index d56b16fcf9..7e8250efaf 100644 --- a/src/main/java/com/fasterxml/jackson/core/util/DefaultPrettyPrinter.java +++ b/src/main/java/com/fasterxml/jackson/core/util/DefaultPrettyPrinter.java @@ -157,7 +157,7 @@ public DefaultPrettyPrinter withRootSeparator(SerializableString rootSeparator) } /** - * @since 2.6.0 + * @since 2.6 */ public DefaultPrettyPrinter withRootSeparator(String rootSeparator) { return withRootSeparator((rootSeparator == null) ? null : new SerializedString(rootSeparator)); @@ -252,6 +252,10 @@ public DefaultPrettyPrinter withSeparators(Separators separators) { @Override public DefaultPrettyPrinter createInstance() { + if (getClass() != DefaultPrettyPrinter.class) { // since 2.10 + throw new IllegalStateException("Failed `createInstance()`: "+getClass().getName() + +" does not override method; it has to"); + } return new DefaultPrettyPrinter(this); } diff --git a/src/test/java/com/fasterxml/jackson/core/BaseTest.java b/src/test/java/com/fasterxml/jackson/core/BaseTest.java index 90f75897b6..b3182d6cf2 100644 --- a/src/test/java/com/fasterxml/jackson/core/BaseTest.java +++ b/src/test/java/com/fasterxml/jackson/core/BaseTest.java @@ -566,7 +566,12 @@ protected JsonFactory sharedStreamFactory() { protected JsonFactory newStreamFactory() { return new JsonFactory(); } - + + // @since 2.9.8 + protected JsonFactoryBuilder streamFactoryBuilder() { + return (JsonFactoryBuilder) JsonFactory.builder(); + } + protected String fieldNameFor(int index) { StringBuilder sb = new StringBuilder(16); diff --git a/src/test/java/com/fasterxml/jackson/core/util/TestDefaultPrettyPrinter.java b/src/test/java/com/fasterxml/jackson/core/util/TestDefaultPrettyPrinter.java index ad1a7e7f08..6a56a049f9 100644 --- a/src/test/java/com/fasterxml/jackson/core/util/TestDefaultPrettyPrinter.java +++ b/src/test/java/com/fasterxml/jackson/core/util/TestDefaultPrettyPrinter.java @@ -159,4 +159,19 @@ private String _printTestData(PrettyPrinter pp, boolean useBytes) throws IOExcep } return sw.toString(); } + + // [core#502]: Force sub-classes to reimplement `createInstance` + public void testInvalidSubClass() throws Exception + { + DefaultPrettyPrinter pp = new MyPrettyPrinter(); + try { + pp.createInstance(); + fail("Should not pass"); + } catch (IllegalStateException e) { + verifyException(e, "does not override"); + } + } + + @SuppressWarnings("serial") + static class MyPrettyPrinter extends DefaultPrettyPrinter { } }