Scripting: remove processing IrExpression when explain

#KTIJ-35719
diff --git a/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/extensions/ScriptingProcessSourcesBeforeCompilingExtension.kt b/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/extensions/ScriptingProcessSourcesBeforeCompilingExtension.kt
index 81e552b..4a14b8c 100644
--- a/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/extensions/ScriptingProcessSourcesBeforeCompilingExtension.kt
+++ b/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/extensions/ScriptingProcessSourcesBeforeCompilingExtension.kt
@@ -123,14 +123,6 @@
         }
         return super.visitScriptNew(declaration)
     }
-
-    override fun visitExpression(expression: IrExpression): IrExpression {
-        val symbol = currentScope!!.scope.scopeOwnerSymbol
-        val builder = DeclarationIrBuilder(context, symbol, expression.startOffset, expression.endOffset)
-        return builder.irExplain(expression, sourceFile) { variables ->
-            variables.last()
-        }
-    }
 }
 
 class ScriptingIrExplainGenerationExtension(val project: MockProject) : IrGenerationExtension {
diff --git a/plugins/scripting/scripting-compiler/testData/compiler/explain/explainWithNonLastExpr.kts b/plugins/scripting/scripting-compiler/testData/compiler/explain/explainWithNonLastExpr.kts
new file mode 100644
index 0000000..3caa9c8
--- /dev/null
+++ b/plugins/scripting/scripting-compiler/testData/compiler/explain/explainWithNonLastExpr.kts
@@ -0,0 +1,5 @@
+val a = 7
+
+6 * 7
+
+42 / 7
diff --git a/plugins/scripting/scripting-compiler/testData/compiler/explain/ifStatement.kts b/plugins/scripting/scripting-compiler/testData/compiler/explain/ifStatement.kts
new file mode 100644
index 0000000..a137def
--- /dev/null
+++ b/plugins/scripting/scripting-compiler/testData/compiler/explain/ifStatement.kts
@@ -0,0 +1,7 @@
+fun foo(): Boolean {
+    if (false) return true
+
+    return false
+}
+
+foo()
\ No newline at end of file
diff --git a/plugins/scripting/scripting-compiler/tests/org/jetbrains/kotlin/scripting/compiler/plugin/ScriptingWithExplanationCompilerTest.kt b/plugins/scripting/scripting-compiler/tests/org/jetbrains/kotlin/scripting/compiler/plugin/ScriptingWithExplanationCompilerTest.kt
index 249b942..a73c8c9 100644
--- a/plugins/scripting/scripting-compiler/tests/org/jetbrains/kotlin/scripting/compiler/plugin/ScriptingWithExplanationCompilerTest.kt
+++ b/plugins/scripting/scripting-compiler/tests/org/jetbrains/kotlin/scripting/compiler/plugin/ScriptingWithExplanationCompilerTest.kt
@@ -6,6 +6,7 @@
 package org.jetbrains.kotlin.scripting.compiler.plugin
 
 import org.jetbrains.kotlin.cli.common.CLICompiler
+import org.jetbrains.kotlin.cli.common.ExitCode
 import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments
 import org.jetbrains.kotlin.cli.common.arguments.cliArgument
 import org.jetbrains.kotlin.cli.common.environment.setIdeaIoUseFallback
@@ -55,10 +56,10 @@
     }
 )
 
-private class KotlinExplainCompilationConfiguration() : ScriptCompilationConfiguration(
+private class KotlinExplainCompilationConfiguration : ScriptCompilationConfiguration(
     {
         displayName("Kotlin Scratch")
-        explainField("\$\$explain")
+        explainField($$$"$$explain")
     })
 
 private class KotlinExplainHostConfiguration : ScriptingHostConfiguration(
@@ -66,11 +67,15 @@
         getScriptingClass(JvmGetScriptingClass())
     })
 
+private val additionalClasspath = System.getProperty("kotlin.test.script.classpath")
+private val powerAssertJar = File("dist/kotlinc/lib/power-assert-compiler-plugin.jar").absolutePath
 
 class ScriptingWithExplanationCompilerTest {
     companion object {
         const val TEST_DATA_DIR = "plugins/scripting/scripting-compiler/testData"
-        const val TEST_SCRIPT_TO_EXPLAIN = "$TEST_DATA_DIR/compiler/explain/simpleExplain.kts"
+        const val TEST_SCRIPT_TO_EXPLAIN_1 = "$TEST_DATA_DIR/compiler/explain/simpleExplain.kts"
+        const val TEST_SCRIPT_TO_EXPLAIN_2 = "$TEST_DATA_DIR/compiler/explain/explainWithNonLastExpr.kts"
+        const val TEST_SCRIPT_TO_EXPLAIN_3 = "$TEST_DATA_DIR/compiler/explain/ifStatement.kts"
     }
 
     init {
@@ -79,27 +84,9 @@
 
     @Test
     fun scriptShouldFlushExplainInformationAfterEvaluation() {
-        val additionalClasspath = System.getProperty("kotlin.test.script.classpath")
-        val powerAssertJar = File("dist/kotlinc/lib/power-assert-compiler-plugin.jar").absolutePath
         withTempDir { _ ->
             val (out, err, ret) = captureOutErrRet {
-                CLICompiler.doMainNoExit(
-                    K2JVMCompiler(),
-                    arrayOf(
-                        "-P",
-                        "plugin:kotlin.scripting:disable-script-definitions-autoloading=true",
-                        "-P",
-                        "plugin:kotlin.scripting:disable-standard-script=true",
-                        "-P",
-                        "plugin:kotlin.scripting:enable-script-explanation=true",
-                        "-Xplugin=$powerAssertJar",
-                        "-P",
-                        "plugin:kotlin.scripting:script-templates=${KotlinExplainScript::class.java.name}",
-                        K2JVMCompilerArguments::classpath.cliArgument, additionalClasspath,
-                        "-script",
-                        TEST_SCRIPT_TO_EXPLAIN,
-                    )
-                )
+                runScriptWithExplain(TEST_SCRIPT_TO_EXPLAIN_1)
             }
             val lines = pathToExplainingFile.readLines()
             assertEquals(
@@ -114,9 +101,59 @@
                     "(82, 83) = 1",
                     "(78, 83) = 4",
                     "(74, 83) = kotlin.Unit",
-                    "\$\$result(85, 87) = 42",
+                    $$$"$$result(85, 87) = 42",
                 ), lines
             )
         }
     }
-}
\ No newline at end of file
+
+    @Test
+    fun testScriptExplainShouldCoverNonLastExpressions() {
+        withTempDir { _ ->
+            val (out, err, ret) = captureOutErrRet {
+                runScriptWithExplain(TEST_SCRIPT_TO_EXPLAIN_2)
+            }
+            val lines = pathToExplainingFile.readLines()
+            assertEquals(
+                listOf(
+                    "a(8, 9) = 7",
+                    "(11, 16) = 42",
+                    $$$"$$result(18, 24) = 6"
+                ), lines
+            )
+        }
+    }
+
+    @Test
+    fun testScriptExplainShouldCoverIfExpression() {
+        withTempDir { _ ->
+            val (out, err, ret) = captureOutErrRet {
+                runScriptWithExplain(TEST_SCRIPT_TO_EXPLAIN_3)
+            }
+            val lines = pathToExplainingFile.readLines()
+            assertEquals(
+                listOf(
+                    $$$"$$result(69, 74) = false"
+                ), lines
+            )
+        }
+    }
+}
+
+private fun runScriptWithExplain(scriptPath: String): ExitCode = CLICompiler.doMainNoExit(
+    K2JVMCompiler(),
+    arrayOf(
+        "-P",
+        "plugin:kotlin.scripting:disable-script-definitions-autoloading=true",
+        "-P",
+        "plugin:kotlin.scripting:disable-standard-script=true",
+        "-P",
+        "plugin:kotlin.scripting:enable-script-explanation=true",
+        "-Xplugin=$powerAssertJar",
+        "-P",
+        "plugin:kotlin.scripting:script-templates=${KotlinExplainScript::class.java.name}",
+        K2JVMCompilerArguments::classpath.cliArgument, additionalClasspath,
+        "-script",
+        scriptPath,
+    )
+)
\ No newline at end of file