diff --git a/compiler/visualizer/render-fir/src/org/jetbrains/kotlin/compiler/visualizer/FirVisualizer.kt b/compiler/visualizer/render-fir/src/org/jetbrains/kotlin/compiler/visualizer/FirVisualizer.kt index 0b8ec12f43c..adfaa56a8cf 100644 --- a/compiler/visualizer/render-fir/src/org/jetbrains/kotlin/compiler/visualizer/FirVisualizer.kt +++ b/compiler/visualizer/render-fir/src/org/jetbrains/kotlin/compiler/visualizer/FirVisualizer.kt @@ -254,6 +254,7 @@ class FirVisualizer(private val firFile: FirFile) : BaseRenderer() { override fun visitCallExpression(expression: KtCallExpression) { expression.firstOfTypeWithLocalReplace { this.calleeReference.name.asString() } + ?: expression.firstOfTypeWithRender() expression.children.filter { it.node.elementType != KtNodeTypes.REFERENCE_EXPRESSION }.forEach { psi -> when (psi) { is KtLambdaArgument -> { @@ -779,6 +780,17 @@ class FirVisualizer(private val firFile: FirFile) : BaseRenderer() { getClassCall.argument.accept(this, data) } + override fun visitArrayOfCall(arrayOfCall: FirArrayOfCall, data: StringBuilder) { + val name = arrayOfCall.typeRef.coneType.classId?.shortClassName + val typeArguments = arrayOfCall.typeRef.coneType.typeArguments + val typeParameters = if (typeArguments.isEmpty()) "" else " " + data.append("fun$typeParameters ${name?.asString()?.decapitalize()}Of") + typeArguments.firstOrNull()?.let { + data.append("<").append(it.tryToRenderConeAsFunctionType()).append(">") + } + data.append("(vararg T): $name${typeParameters.trim()}") // TODO change "T" to concrete type is array is primitive + } + private fun AbstractFirBasedSymbol<*>.isLocalDeclaration(): Boolean { return when (val fir = this.fir) { is FirConstructor -> {