Adds a pp(Any?) and T.pp() method to pretty print any Java or Kotlin object.
pp(Any?) takes any object and prints it in a pretty format.
T.pp() pretty prints inside a method chain when called on an object inline.
| Approach | Instruction |
|---|---|
Gradle |
testImplementation "com.tylerthrailkill.helpers:pretty-print:{version}" |
Gradle Kotlin DSL |
testImplementation("com.tylerthrailkill.helpers:pretty-print:$version") |
Maven |
<dependency>
<groupId>com.tylerthrailkill.helpers</groupId>
<artifactId>pretty-print</artifactId>
<version>{version}</version>
</dependency> |
`pp(obj: Any?, indent: Int = 2, writeTo: Appendable = System.out, wrappedLineWidth: Int = 80)
| Parameter | Description | Default |
|---|---|---|
|
object to print |
|
|
changes the number of spaces used to indent each level of the output |
|
|
changes the |
|
|
changes the number of characters allowed before wrapping in a multiline string |
|
Top Level Method
data class TinyObject(var int: Int)
pp(TinyObject(1))TinyObject(
int = 1
)Inline method
data class TinyObject(var int: Int)
fun callSomething(obj: Any?) {
println("inline wrapper function entered")
}
callSomething(TinyObject(1).pp())TinyObject(
int = 1
)
inline wrapper function enteredList
pp(listOf("1", 2, 3.0, true))[
"1",
2,
3.0,
true
]Object with list
data class OL(val list: List<String>)
pp(OL(listOf("1")))OL(
list = [
"1"
]
)Map
pp(mapOf("key1" to "value1", "key2" to "value2")){
"key1" -> "value1",
"key2" -> "value2"
}Object with map
data class OM(val map: Map<Any, Any>)
pp(OM(mapOf(1 to "value", "key" to 1)))OM(
map = {
1 -> "value",
"key" -> 1
}
)Multiline strings
pp("Goodbye, cruel world. Goodbye, cruel lamp.", wrappedLineWidth = 22)"""
Goodbye, cruel world.
Goodbye, cruel lamp.
"""Multiline strings with unicode line breaking
pp("Goodbye, cruel world. Goodbye, cruel lamp.", wrappedLineWidth = 27)"""
Goodbye, cruel world. Good
bye, cruel lamp.
"""pp("😍️🥞😍️", wrappedLineWidth = 3)"""
😍️
🥞
😍️
"""Multiple fields
pp(SmallObject("Goodbye, cruel world. Goodbye, cruel lamp.", 1))SmallObject(
field1 = "Goodbye, cruel world. Goodbye, cruel lamp."
field2 = 1
)Different indent size
data class TinyObject(var int: Int)
pp(TinyObject(1), tabSize = 0)TinyObject(
int = 1
)data class TinyObject(var int: Int)
pp(TinyObject(1), tabSize = 10)TinyObject(
int = 1
)Different output stream
val stream = ByteArrayOutputStream()
pp(TinyObject(1), printStream = PrintStream(stream))
println(":::")
print(stream.toString())
println(":::"):::
TinyObject(
int = 1
)
:::Cyclic references
data class O1(var c: O2? = null)
data class O2(var c: O1? = null)
val sco1 = O1()
val sco2 = O2(sco1)
sco1.c = sco2
pp(sco1)O1(
c = O2(
c = cyclic reference detected for 50699452
)
)[$id=50699452]