diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/dumpKotlinLike.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/dumpKotlinLike.kt index fbf847d5202..9f6b1d36650 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/dumpKotlinLike.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/dumpKotlinLike.kt @@ -29,9 +29,22 @@ import org.jetbrains.kotlin.utils.Printer * * IMPLICIT_DYNAMIC_CAST -- expr /*~> dynamic */ * * REINTERPRET_CAST -- expr /*=> Type */ */ -fun IrElement.dumpKotlinLike(options: KotlinLikeDumpOptions = KotlinLikeDumpOptions()): String { +fun IrElement.dumpKotlinLike(options: KotlinLikeDumpOptions = KotlinLikeDumpOptions()): String = + dumpKotlinLike(this, KotlinLikeDumper::printElement, options) + +fun IrType.dumpKotlinLike(): String = + dumpKotlinLike(this, KotlinLikeDumper::printType) + +fun IrTypeArgument.dumpKotlinLike(): String = + dumpKotlinLike(this, KotlinLikeDumper::printTypeArgument) + +private inline fun dumpKotlinLike( + target: T, + print: KotlinLikeDumper.(T) -> Unit, + options: KotlinLikeDumpOptions = KotlinLikeDumpOptions() +): String { val sb = StringBuilder() - accept(KotlinLikeDumper(Printer(sb, 1, " "), options), null) + KotlinLikeDumper(Printer(sb, 1, " "), options).print(target) return sb.toString() } @@ -98,6 +111,18 @@ enum class FakeOverridesStrategy { */ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOptions) : IrElementVisitor { + fun printElement(element: IrElement) { + element.accept(this, null) + } + + fun printType(type: IrType) { + type.printTypeWithNoIndent() + } + + fun printTypeArgument(typeArg: IrTypeArgument) { + typeArg.printTypeArgumentWithNoIndent() + } + override fun visitElement(element: IrElement, data: IrDeclaration?) { val e = "/* ERROR: unsupported element type: " + element.javaClass.simpleName + " */" if (element is IrExpression) { @@ -397,14 +422,7 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption arguments.forEachIndexed { i, typeArg -> p(i > 0, ",") - when (typeArg) { - is IrStarProjection -> - p.printWithNoIndent("*") - is IrTypeProjection -> { - typeArg.variance.printVarianceWithNoIndent() - typeArg.type.printTypeWithNoIndent() - } - } + typeArg.printTypeArgumentWithNoIndent() } p.printWithNoIndent(">") } @@ -420,6 +438,17 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption } } + private fun IrTypeArgument.printTypeArgumentWithNoIndent() { + when (this) { + is IrStarProjection -> + p.printWithNoIndent("*") + is IrTypeProjection -> { + variance.printVarianceWithNoIndent() + type.printTypeWithNoIndent() + } + } + } + override fun visitTypeAlias(declaration: IrTypeAlias, data: IrDeclaration?) { declaration.printlnAnnotations() p.printIndent()