org.jetbrains.kotlin.utils.SmartPrinter.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of kotlin-compiler-embeddable Show documentation
Show all versions of kotlin-compiler-embeddable Show documentation
the Kotlin compiler embeddable
/*
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.utils
/**
* A wrapper around [Printer] that manages indentation in a smarter way.
*
* Unlike [Printer], which always prints the indentation unit whenever you call [print] or [println],
* [SmartPrinter] only prints the indentation unit at the start of the line.
*/
class SmartPrinter private constructor(private val printer: Printer) : IndentingPrinter by printer {
constructor(appendable: Appendable, indent: String = DEFAULT_INDENT) : this(Printer(appendable, indent))
companion object {
private const val DEFAULT_INDENT = " "
}
private var notFirstPrint: Boolean = false
override fun print(vararg objects: Any?): SmartPrinter {
if (notFirstPrint) {
printer.printWithNoIndent(*objects)
} else {
printer.print(*objects)
}
notFirstPrint = true
return this
}
override fun println(vararg objects: Any?): SmartPrinter {
if (notFirstPrint) {
printer.printlnWithNoIndent(*objects)
} else {
printer.println(*objects)
}
notFirstPrint = false
return this
}
override fun printlnMultiLine(s: String): SmartPrinter {
printer.printlnMultiLine(s)
notFirstPrint = false
return this
}
@Deprecated("Unit-returning method is removed", level = DeprecationLevel.HIDDEN)
fun print(objects: Array) {
print(*objects)
}
@Deprecated("Unit-returning method is removed", level = DeprecationLevel.HIDDEN)
fun println(objects: Array) {
println(*objects)
}
}