Is your feature request related to a problem? Please describe.
In Jackson 2.x, I am wrapping JsonGenerator to add syntax highlighting.
This is done using a combination of PrettyPrinter and JsonGeneratorDelegate. The pretty-printer is stateful, and so I've set a new PrettyPrinter instance per JsonGenerator.
In 3.x however, there is no longer any setPrettyPrinter in JsonGenerator, so I am coming up short.
Describe the solution you'd like
Ideally, I'd be able to output the same as before via JsonGeneratorDecorator, and/or at least without copying a lot of resources. Is this possible in 3.x and/or what am I doing wrong? Cant even make any pretty-printing work with 3.0.0-rc10 at the moment
Usage example
This code does not pretty-print (and even if it did, it would not be ok to share the pretty printer).
Additional context
No response
Comment From: cowtowncoder
Ah. This is actually solved by making PrettyPrinter implement [tools.jackson.core.util.]Instantiatable.
If so, configured instance is not used as-is, but rather its createInstance() method is called to create actual instance.
Same works for 2.x as well.
Comment From: skjolber
Tried the Instantiatable, but there is no way to access the newly constructed PrettyPrinter instance via the JsonGenerator (no getter for JsonGeneratorBase._cfgPrettyPrinter), so fail.
So then was only able to make it work using an ObjectWriteContext with JsonFactory.createGenerator(..).
Is adding a getter for _cfgPrettyPrinter an alternative? And/or am I missing something here?
Either way, I fear not being able to use JsonGeneratorDecorator is going to be messy.
Comment From: cowtowncoder
@skjolber Sounds like adding getter for PrettyPrinter would be an option. If so, I need to add it REALLY quickly now
But quick question: why is access needed in the first place?
Comment From: cowtowncoder
Created https://github.com/FasterXML/jackson-core/issues/1480, will implement.
Comment From: skjolber
But quick question: why is access needed in the first place?
The pretty-printer (SyntaxHighlightingPrettyPrinter) state is adjusted by the JsonGenerator wrapper (SyntaxHighlightingJsonGenerator) in order to get the desired output.
Example 1, Example 2, Example 3.
Comment From: skjolber
Thanks, now works as expected! 💯
Edit: I might be back for a setter too.