From a50a56556947d26e9e2a77999b13ed049188f02c Mon Sep 17 00:00:00 2001 From: Tatu Saloranta Date: Tue, 24 Feb 2026 15:52:08 -0800 Subject: [PATCH 1/3] Fix #337: support pretty-printing for Ion --- .../main/java/tools/jackson/dataformat/ion/IonFactory.java | 2 +- .../tools/jackson/dataformat/ion/PrettyPrintWriteTest.java | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/ion/src/main/java/tools/jackson/dataformat/ion/IonFactory.java b/ion/src/main/java/tools/jackson/dataformat/ion/IonFactory.java index eb081a753..f178beb24 100644 --- a/ion/src/main/java/tools/jackson/dataformat/ion/IonFactory.java +++ b/ion/src/main/java/tools/jackson/dataformat/ion/IonFactory.java @@ -513,7 +513,7 @@ protected IonWriter _createTextualIonWriter(ObjectWriteContext writeCtxt, // 18-Feb-2021, tatu: [dataformats-binary#245] pretty-printing. // note: Cannot really make use of Jackson PP, just rely on Ion default // (for now?) - if (writeCtxt.hasPrettyPrinter()) { + if (writeCtxt.getPrettyPrinter() != null) { return IonTextWriterBuilder.pretty().build(w); } return _system.newTextWriter(w); diff --git a/ion/src/test/java/tools/jackson/dataformat/ion/PrettyPrintWriteTest.java b/ion/src/test/java/tools/jackson/dataformat/ion/PrettyPrintWriteTest.java index 555c72de7..933b82ff7 100644 --- a/ion/src/test/java/tools/jackson/dataformat/ion/PrettyPrintWriteTest.java +++ b/ion/src/test/java/tools/jackson/dataformat/ion/PrettyPrintWriteTest.java @@ -33,8 +33,15 @@ public void testBasicPrettyPrintTextual() throws Exception .writeValueAsString(new Point()); assertEquals(EXP, ion.trim()); + mapper = mapper.rebuild() + .enable(SerializationFeature.INDENT_OUTPUT) + .build(); + ion = mapper.writeValueAsString(new Point()); + assertEquals(EXP, ion.trim()); + // But also no indentation if not requested ion = mapper.writer() + .without(SerializationFeature.INDENT_OUTPUT) .writeValueAsString(new Point()); assertEquals("{x:1,y:2}", ion.trim()); } From 887229efee59bbb84f40cbe444ff668f3771fe01 Mon Sep 17 00:00:00 2001 From: Tatu Saloranta Date: Tue, 24 Feb 2026 16:03:09 -0800 Subject: [PATCH 2/3] Tweaking --- .../main/java/tools/jackson/dataformat/ion/IonFactory.java | 6 +++--- ...ettyPrintWriteTest.java => IonPrettyPrintWriteTest.java} | 2 +- .../tools/jackson/dataformat/smile/BaseTestForSmile.java | 3 ++- 3 files changed, 6 insertions(+), 5 deletions(-) rename ion/src/test/java/tools/jackson/dataformat/ion/{PrettyPrintWriteTest.java => IonPrettyPrintWriteTest.java} (98%) diff --git a/ion/src/main/java/tools/jackson/dataformat/ion/IonFactory.java b/ion/src/main/java/tools/jackson/dataformat/ion/IonFactory.java index f178beb24..d706efef4 100644 --- a/ion/src/main/java/tools/jackson/dataformat/ion/IonFactory.java +++ b/ion/src/main/java/tools/jackson/dataformat/ion/IonFactory.java @@ -482,9 +482,9 @@ private JsonParser _createParser(ObjectReadContext readCtxt, IOContext ioCtxt, protected IonGenerator _createGenerator(ObjectWriteContext writeCtxt, OutputStream out, JsonEncoding enc, boolean isManaged) { - IonWriter ion; IOContext ioCtxt = _createContext(_createContentReference(out), isManaged); - Closeable dst; // not necessarily same as 'out'... + final IonWriter ion; + final Closeable dst; // not necessarily same as 'out'... // Binary writers are simpler: no alternate encodings if (_cfgBinaryWriters) { @@ -513,7 +513,7 @@ protected IonWriter _createTextualIonWriter(ObjectWriteContext writeCtxt, // 18-Feb-2021, tatu: [dataformats-binary#245] pretty-printing. // note: Cannot really make use of Jackson PP, just rely on Ion default // (for now?) - if (writeCtxt.getPrettyPrinter() != null) { + if (writeCtxt.hasPrettyPrinter()) { return IonTextWriterBuilder.pretty().build(w); } return _system.newTextWriter(w); diff --git a/ion/src/test/java/tools/jackson/dataformat/ion/PrettyPrintWriteTest.java b/ion/src/test/java/tools/jackson/dataformat/ion/IonPrettyPrintWriteTest.java similarity index 98% rename from ion/src/test/java/tools/jackson/dataformat/ion/PrettyPrintWriteTest.java rename to ion/src/test/java/tools/jackson/dataformat/ion/IonPrettyPrintWriteTest.java index 933b82ff7..8c5152738 100644 --- a/ion/src/test/java/tools/jackson/dataformat/ion/PrettyPrintWriteTest.java +++ b/ion/src/test/java/tools/jackson/dataformat/ion/IonPrettyPrintWriteTest.java @@ -10,7 +10,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; // For [dataformats-binary#245]: no pretty-printing for textual format -public class PrettyPrintWriteTest +public class IonPrettyPrintWriteTest { @JsonPropertyOrder({ "x", "y" }) static class Point { diff --git a/smile/src/test/java/tools/jackson/dataformat/smile/BaseTestForSmile.java b/smile/src/test/java/tools/jackson/dataformat/smile/BaseTestForSmile.java index 53bb5e47c..a2bf43c7a 100644 --- a/smile/src/test/java/tools/jackson/dataformat/smile/BaseTestForSmile.java +++ b/smile/src/test/java/tools/jackson/dataformat/smile/BaseTestForSmile.java @@ -207,7 +207,8 @@ public static IOContext testIOContext() { protected JsonParser createParserUsingStream(TokenStreamFactory f, byte[] input) throws IOException { - return f.createParser(new ByteArrayInputStream(input)); + return f.createParser(ObjectReadContext.empty(), + new ByteArrayInputStream(input)); } /* From cbdc422c47a63d1fdca69f57b122937764162f23 Mon Sep 17 00:00:00 2001 From: Tatu Saloranta Date: Tue, 24 Feb 2026 16:07:21 -0800 Subject: [PATCH 3/3] ... --- .../dataformat/ion/IonPrettyPrintWriteTest.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/ion/src/test/java/tools/jackson/dataformat/ion/IonPrettyPrintWriteTest.java b/ion/src/test/java/tools/jackson/dataformat/ion/IonPrettyPrintWriteTest.java index 8c5152738..929039b67 100644 --- a/ion/src/test/java/tools/jackson/dataformat/ion/IonPrettyPrintWriteTest.java +++ b/ion/src/test/java/tools/jackson/dataformat/ion/IonPrettyPrintWriteTest.java @@ -18,22 +18,23 @@ static class Point { public int y = 2; } + private final IonObjectMapper TEXTUAL_MAPPER = IonObjectMapper.builder(IonFactory.forTextualWriters()).build(); + @Test - public void testBasicPrettyPrintTextual() throws Exception + public void prettyPrintTextual() throws Exception { final String EXP = "{\n x:1,\n y:2\n}"; - IonObjectMapper mapper = IonObjectMapper.builder(IonFactory.forTextualWriters()).build(); - String ion = mapper.writerWithDefaultPrettyPrinter() + String ion = TEXTUAL_MAPPER.writerWithDefaultPrettyPrinter() .writeValueAsString(new Point()); assertEquals(EXP, ion.trim()); - ion = mapper.writer() + ion = TEXTUAL_MAPPER.writer() .with(SerializationFeature.INDENT_OUTPUT) .writeValueAsString(new Point()); assertEquals(EXP, ion.trim()); - mapper = mapper.rebuild() + IonObjectMapper mapper = TEXTUAL_MAPPER.rebuild() .enable(SerializationFeature.INDENT_OUTPUT) .build(); ion = mapper.writeValueAsString(new Point()); @@ -48,7 +49,7 @@ public void testBasicPrettyPrintTextual() throws Exception // and with binary format, should simply be no-op @Test - public void testIgnorePrettyPrintForBinary() throws Exception + public void prettyPrintIgnoredForBinary() throws Exception { IonObjectMapper mapper = IonObjectMapper.builder(IonFactory.forBinaryWriters()).build(); byte[] encoded = mapper.writerWithDefaultPrettyPrinter().writeValueAsBytes(new Point());