diff --git a/kotlin-power-assert-plugin/src/main/kotlin/com/bnorm/power/diagram/ExpressionTree.kt b/kotlin-power-assert-plugin/src/main/kotlin/com/bnorm/power/diagram/ExpressionTree.kt index 3be061e328e..79a7512f330 100644 --- a/kotlin-power-assert-plugin/src/main/kotlin/com/bnorm/power/diagram/ExpressionTree.kt +++ b/kotlin-power-assert-plugin/src/main/kotlin/com/bnorm/power/diagram/ExpressionTree.kt @@ -25,6 +25,7 @@ import org.jetbrains.kotlin.ir.expressions.IrFunctionExpression import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin import org.jetbrains.kotlin.ir.expressions.IrTypeOperator import org.jetbrains.kotlin.ir.expressions.IrTypeOperatorCall +import org.jetbrains.kotlin.ir.expressions.IrVararg import org.jetbrains.kotlin.ir.expressions.IrWhen import org.jetbrains.kotlin.ir.util.dumpKotlinLike import org.jetbrains.kotlin.ir.visitors.IrElementVisitor @@ -123,6 +124,11 @@ fun buildTree(expression: IrExpression): Node? { } } + override fun visitVararg(expression: IrVararg, data: Node) { + // Skip processing of vararg array + expression.acceptChildren(this, data) + } + override fun visitConst(expression: IrConst<*>, data: Node) { // Do not include constants } diff --git a/kotlin-power-assert-plugin/src/test/kotlin/com/bnorm/power/VarargTest.kt b/kotlin-power-assert-plugin/src/test/kotlin/com/bnorm/power/VarargTest.kt new file mode 100644 index 00000000000..77062d55942 --- /dev/null +++ b/kotlin-power-assert-plugin/src/test/kotlin/com/bnorm/power/VarargTest.kt @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2023 Brian Norman + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.bnorm.power + +import kotlin.test.Test + +class VarargTest { + @Test + fun `implicit array of vararg parameters is excluded from diagram`() { + assertMessage( + """ + fun main() { + var i = 0 + assert(listOf("a", "b", "c") == listOf(i++, i++, i++)) + }""", + """ + Assertion failed + assert(listOf("a", "b", "c") == listOf(i++, i++, i++)) + | | | | | | + | | | | | 2 + | | | | 1 + | | | 0 + | | [0, 1, 2] + | false + [a, b, c] + """.trimIndent(), + ) + } +} diff --git a/kotlin-power-assert-plugin/src/test/kotlin/com/bnorm/power/compiler.kt b/kotlin-power-assert-plugin/src/test/kotlin/com/bnorm/power/compiler.kt index c73106a3537..e2fa94c0f0c 100644 --- a/kotlin-power-assert-plugin/src/test/kotlin/com/bnorm/power/compiler.kt +++ b/kotlin-power-assert-plugin/src/test/kotlin/com/bnorm/power/compiler.kt @@ -59,7 +59,7 @@ fun executeAssertion( listOf(SourceFile.kotlin("main.kt", source, trimIndent = false)), *plugins, ) - assertEquals(KotlinCompilation.ExitCode.OK, result.exitCode) + assertEquals(KotlinCompilation.ExitCode.OK, result.exitCode, result.messages) val kClazz = result.classLoader.loadClass("MainKt") val main = kClazz.declaredMethods.single { it.name == "main" && it.parameterCount == 0 }