Use FlowParameter for buildFinish event

#KT-55740: Fixed
diff --git a/buildSrc/src/main/kotlin/GradleCommon.kt b/buildSrc/src/main/kotlin/GradleCommon.kt
index 6a79f8f..3fac081 100644
--- a/buildSrc/src/main/kotlin/GradleCommon.kt
+++ b/buildSrc/src/main/kotlin/GradleCommon.kt
@@ -122,7 +122,7 @@
 
         dependencies {
             compileOnlyConfigurationName(kotlinStdlib())
-            "commonGradleApiCompileOnly"("dev.gradleplugins:gradle-api:8.0")
+            "commonGradleApiCompileOnly"("dev.gradleplugins:gradle-api:8.1")
             if (this@createGradleCommonSourceSet.name !in testPlugins) {
                 compileOnlyConfigurationName(project(":kotlin-gradle-plugin-api")) {
                     capabilities {
diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml
index 3e8e40e..54c41b5 100644
--- a/gradle/verification-metadata.xml
+++ b/gradle/verification-metadata.xml
@@ -2540,6 +2540,12 @@
             <sha256 value="62d5d15421cc4a5fd71a0d9ab711e9bb17c5160fb8c6e5a389278ef756e6b9b2" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="dev.gradleplugins" name="gradle-api" version="8.1">
+         <artifact name="gradle-api-8.1.jar">
+            <md5 value="594229d4066e3eded1ca2859d3c769cf" origin="Generated by Gradle"/>
+            <sha256 value="a90fb12246e49dc1f5f165d36fefbdacb5417f878fc6a0c6e5a65916aa2dc605" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="google" name="android_m2repository" version="r44">
          <artifact name="android_m2repository-r44.zip">
             <md5 value="7ba987b0caec8b0facfddd60851abb50" origin="Generated by Gradle"/>
@@ -5633,6 +5639,12 @@
             <sha256 value="044569c20b1438263470585627da1b2c9722f1fb8d89f94e78c0ff219abd0146" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.codehaus.groovy" name="groovy" version="3.0.15">
+         <artifact name="groovy-3.0.15.jar">
+            <md5 value="dbfef235c444c294f1aeaaed7e8e293d" origin="Generated by Gradle"/>
+            <sha256 value="a77af628d667cc8a6309d5e2a1b04b253c516bd36d9c666903b4cd9167c92f11" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.codehaus.groovy" name="groovy" version="3.0.7">
          <artifact name="groovy-3.0.7.jar">
             <md5 value="0035721b2c7c7a9a0e4fdf7ee3d615cc" origin="Generated by Gradle"/>
@@ -5669,6 +5681,12 @@
             <sha256 value="6b98dcf1309448d48b5a9762e94073fbee17cc45ff2b91b3d74a34b4945517c7" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.codehaus.groovy" name="groovy-ant" version="3.0.15">
+         <artifact name="groovy-ant-3.0.15.jar">
+            <md5 value="e6df49ede9a3f469f7debfd55db68770" origin="Generated by Gradle"/>
+            <sha256 value="c29af7dc552b1cd802a911bfc40988dd53ea6f1b78cd727d57f637a1cb406e49" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.codehaus.groovy" name="groovy-ant" version="3.0.8">
          <artifact name="groovy-ant-3.0.8.jar">
             <md5 value="06d07e7277dfa15590e3590d79423a00" origin="Generated by Gradle"/>
@@ -5687,6 +5705,12 @@
             <sha256 value="4b9291f2db479f9ea146f8ed6c977e7db9629fe0b78bc430c12b11a0e390ed50" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.codehaus.groovy" name="groovy-astbuilder" version="3.0.15">
+         <artifact name="groovy-astbuilder-3.0.15.jar">
+            <md5 value="d82be5cfef3fb7762acce638500de241" origin="Generated by Gradle"/>
+            <sha256 value="ace82cc0149df0c2fe6015da18388da42e383a54a30293b7645061bcb6db9233" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.codehaus.groovy" name="groovy-astbuilder" version="3.0.8">
          <artifact name="groovy-astbuilder-3.0.8.jar">
             <md5 value="9c8dbfcbfed98548185cc75d35d09260" origin="Generated by Gradle"/>
@@ -5705,6 +5729,12 @@
             <sha256 value="d4fa7a8ac7a64f6d11ec6bdd02b242447d5c48c8d68228bb05c0f05e5c1a1ca1" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.codehaus.groovy" name="groovy-cli-picocli" version="3.0.15">
+         <artifact name="groovy-cli-picocli-3.0.15.jar">
+            <md5 value="9aeaaa55b829609fa96ae35a1fd17878" origin="Generated by Gradle"/>
+            <sha256 value="ff133cb810c3ba464a54038d2f9740e721b5d76c7ec2dbe12500f5013987b1d0" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.codehaus.groovy" name="groovy-cli-picocli" version="3.0.8">
          <artifact name="groovy-cli-picocli-3.0.8.jar">
             <md5 value="48e080fd873e3ea27413154f5530bc55" origin="Generated by Gradle"/>
@@ -5723,6 +5753,12 @@
             <sha256 value="0a8f0977d17d18e220cfc91f23a5557d320a5abb7f8665db83db1f52a56075eb" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.codehaus.groovy" name="groovy-console" version="3.0.15">
+         <artifact name="groovy-console-3.0.15.jar">
+            <md5 value="915a3d4805266b809e241b69d8455006" origin="Generated by Gradle"/>
+            <sha256 value="91ae09b41cff74e01fc3a1f7c94940dbdc46f3952a4faba30ccb5fc3e12c728f" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.codehaus.groovy" name="groovy-console" version="3.0.8">
          <artifact name="groovy-console-3.0.8.jar">
             <md5 value="c47387f9f97d6541712cbbebb3ea4cd6" origin="Generated by Gradle"/>
@@ -5741,6 +5777,12 @@
             <sha256 value="e0af819c7fe96cbecbdb888fee8387b8131fa9adcc09afd0a94378134c106053" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.codehaus.groovy" name="groovy-datetime" version="3.0.15">
+         <artifact name="groovy-datetime-3.0.15.jar">
+            <md5 value="813e1617651170c01d6a88e172f6a84e" origin="Generated by Gradle"/>
+            <sha256 value="369c1dbed7e8707912858b8440673f1feaa3b6a042f3bf39df864372afa7ae06" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.codehaus.groovy" name="groovy-datetime" version="3.0.8">
          <artifact name="groovy-datetime-3.0.8.jar">
             <md5 value="3c4d6e546425d95e9a0d82163371998b" origin="Generated by Gradle"/>
@@ -5759,6 +5801,12 @@
             <sha256 value="6779bfe520d68d92e30e5c74aec2e25491f145a5d2e2afe3991713b7aa79571d" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.codehaus.groovy" name="groovy-docgenerator" version="3.0.15">
+         <artifact name="groovy-docgenerator-3.0.15.jar">
+            <md5 value="253719812fff37f0c0ba5962a08d8519" origin="Generated by Gradle"/>
+            <sha256 value="8ffc7a2f0833a1adf73b05baad03848a77ad84691b655616a3afae109d8de778" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.codehaus.groovy" name="groovy-docgenerator" version="3.0.8">
          <artifact name="groovy-docgenerator-3.0.8.jar">
             <md5 value="34340ce2619785ef830014af584d59ac" origin="Generated by Gradle"/>
@@ -5777,6 +5825,12 @@
             <sha256 value="8a2e933ec156762d14b7354581981ae00d025d4f2fb72bd7599e030d5cb5e08c" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.codehaus.groovy" name="groovy-groovydoc" version="3.0.15">
+         <artifact name="groovy-groovydoc-3.0.15.jar">
+            <md5 value="399c5a5a8b3880f81eccd65e6d7dfaad" origin="Generated by Gradle"/>
+            <sha256 value="23690d9b4ec453676f5c229629edcf8a63db31b50e007cbc96b4ee253ca49eb9" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.codehaus.groovy" name="groovy-groovydoc" version="3.0.8">
          <artifact name="groovy-groovydoc-3.0.8.jar">
             <md5 value="8c2af9e4ba0f511d1026a2c9d1b1aa33" origin="Generated by Gradle"/>
@@ -5795,6 +5849,12 @@
             <sha256 value="6a6ae9b33d39a88ea3d2ccf482e661a044dd1dbb0f4705e8a764846068085d9c" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.codehaus.groovy" name="groovy-groovysh" version="3.0.15">
+         <artifact name="groovy-groovysh-3.0.15.jar">
+            <md5 value="46d2605279aa8360e81af928bc24635e" origin="Generated by Gradle"/>
+            <sha256 value="6dde004035ac2005e8cdf0bb3a2c55a81294aa01ef63aca167626cea91f736a0" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.codehaus.groovy" name="groovy-groovysh" version="3.0.8">
          <artifact name="groovy-groovysh-3.0.8.jar">
             <md5 value="ab72377e1a5c302760107cf2f2bab052" origin="Generated by Gradle"/>
@@ -5813,6 +5873,12 @@
             <sha256 value="10ab5469f5cec7066379d9925fcae8ad9405e1fe04727532078ce3a597154fd2" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.codehaus.groovy" name="groovy-jmx" version="3.0.15">
+         <artifact name="groovy-jmx-3.0.15.jar">
+            <md5 value="9431e4b1efbe778094a2706f7a48a9b3" origin="Generated by Gradle"/>
+            <sha256 value="dccc96e562a8f7bbf7a2070530c176fdc54f503265d57717b2c85ff47e33e921" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.codehaus.groovy" name="groovy-jmx" version="3.0.8">
          <artifact name="groovy-jmx-3.0.8.jar">
             <md5 value="d88d85f420ba9869bb89609c581cdc03" origin="Generated by Gradle"/>
@@ -5831,6 +5897,12 @@
             <sha256 value="921972defd8a89a5ab442f5ae57b1760755d7fe339dce46fe140e79a6e63e066" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.codehaus.groovy" name="groovy-json" version="3.0.15">
+         <artifact name="groovy-json-3.0.15.jar">
+            <md5 value="d3b8ba671d4b66dc62e31ed84c0134ad" origin="Generated by Gradle"/>
+            <sha256 value="5af931497211cc0f86f27c31fde685fb39d57d802f1432b35e8285bc5baa3fd0" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.codehaus.groovy" name="groovy-json" version="3.0.8">
          <artifact name="groovy-json-3.0.8.jar">
             <md5 value="ec723fd3359c5a4e6fb2af5528c8710b" origin="Generated by Gradle"/>
@@ -5849,6 +5921,12 @@
             <sha256 value="d834f8d0e07fa73f5a59f700903180c1d834acde8ca03dd79641ef1460c82a4e" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.codehaus.groovy" name="groovy-jsr223" version="3.0.15">
+         <artifact name="groovy-jsr223-3.0.15.jar">
+            <md5 value="9a52ef8b0bf24de38ec0dccb7bac72ea" origin="Generated by Gradle"/>
+            <sha256 value="2320f16a05e505246179a1d61cec8c3833efdd7a2142a69a93660eaa503e0317" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.codehaus.groovy" name="groovy-jsr223" version="3.0.8">
          <artifact name="groovy-jsr223-3.0.8.jar">
             <md5 value="89d828f65941ebfa726947d8869a7935" origin="Generated by Gradle"/>
@@ -5867,6 +5945,12 @@
             <sha256 value="cc4f1040ffad34f6019341193943d8ad3201a2c2fde510666de325148e6efc7e" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.codehaus.groovy" name="groovy-macro" version="3.0.15">
+         <artifact name="groovy-macro-3.0.15.jar">
+            <md5 value="479911a530bf11cc06ce00fd0aac35da" origin="Generated by Gradle"/>
+            <sha256 value="37bcf3b2da4134a530b8b0de53f2357d8bd14b0bdc17a4bf82d1b0f11ffc584c" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.codehaus.groovy" name="groovy-macro" version="3.0.8">
          <artifact name="groovy-macro-3.0.8.jar">
             <md5 value="c28b6b36e78d3f2cccd4176217c8d219" origin="Generated by Gradle"/>
@@ -5885,6 +5969,12 @@
             <sha256 value="87a8f0ad8022b5295e3292f2ffc65e6eb2f108da9f3648bc5eae873a0d54c9ad" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.codehaus.groovy" name="groovy-nio" version="3.0.15">
+         <artifact name="groovy-nio-3.0.15.jar">
+            <md5 value="ae6080ba73300122313937a6328829e1" origin="Generated by Gradle"/>
+            <sha256 value="d41ea667f3cc24483e5d1c1c8846691869c914015079d7fadad9b29746244009" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.codehaus.groovy" name="groovy-nio" version="3.0.8">
          <artifact name="groovy-nio-3.0.8.jar">
             <md5 value="748a2321e921889013382920b704c91c" origin="Generated by Gradle"/>
@@ -5903,6 +5993,12 @@
             <sha256 value="b987ab4a4026cc2ecedf955dab9c03cd45bfb6ffeb1edb009164c9ef0f38a156" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.codehaus.groovy" name="groovy-servlet" version="3.0.15">
+         <artifact name="groovy-servlet-3.0.15.jar">
+            <md5 value="67717cfdcacd97c9817c554c5fcec541" origin="Generated by Gradle"/>
+            <sha256 value="983996c7573e4181c3cfcdd54a0f92f8aea2a55fbc4ad86f2c2df95a68ea2eec" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.codehaus.groovy" name="groovy-servlet" version="3.0.8">
          <artifact name="groovy-servlet-3.0.8.jar">
             <md5 value="0a97588424aea9afd95a01ec28cdbaeb" origin="Generated by Gradle"/>
@@ -5921,6 +6017,12 @@
             <sha256 value="8fa0019578f22732bb49d4f923a46ad489d3dc1d03a28f5db57a8c92139ec8f2" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.codehaus.groovy" name="groovy-sql" version="3.0.15">
+         <artifact name="groovy-sql-3.0.15.jar">
+            <md5 value="7343821875a8d5216784e7c996c8464e" origin="Generated by Gradle"/>
+            <sha256 value="cff3a90fe09e47f965e832a9355566ddcec08cafd02c37867939eaf91292f62a" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.codehaus.groovy" name="groovy-sql" version="3.0.8">
          <artifact name="groovy-sql-3.0.8.jar">
             <md5 value="9167c2310e30ece293a0aa6fe0879c95" origin="Generated by Gradle"/>
@@ -5939,6 +6041,12 @@
             <sha256 value="ee10f03e6c8e5f6b3c674f206d3d8933712964b7fb1e14c5a6aec85ff25d57e4" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.codehaus.groovy" name="groovy-swing" version="3.0.15">
+         <artifact name="groovy-swing-3.0.15.jar">
+            <md5 value="acaf345ec47c072dbb789aa915d0c5de" origin="Generated by Gradle"/>
+            <sha256 value="64f2e2140780292786bdc54438995e6aa337741403c9f49805336fe00aa6630e" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.codehaus.groovy" name="groovy-swing" version="3.0.8">
          <artifact name="groovy-swing-3.0.8.jar">
             <md5 value="8d2843892e796095ff4d12b400eb4f9c" origin="Generated by Gradle"/>
@@ -5957,6 +6065,12 @@
             <sha256 value="abfb7190631a35fc96e023bfcd4658f3f7d4ae76c488ef1b972a54b29809ddc2" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.codehaus.groovy" name="groovy-templates" version="3.0.15">
+         <artifact name="groovy-templates-3.0.15.jar">
+            <md5 value="0e8e4ecb6b709e43d1de2151000486a1" origin="Generated by Gradle"/>
+            <sha256 value="bd6c9beff5333b070e3db93cf2acba42e08fe1a17c45b7acae02ca007c403a6a" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.codehaus.groovy" name="groovy-templates" version="3.0.8">
          <artifact name="groovy-templates-3.0.8.jar">
             <md5 value="7d1226bf74f783c980e0ed5652154193" origin="Generated by Gradle"/>
@@ -5975,6 +6089,12 @@
             <sha256 value="bd6a2fd5d870e8a37949ae7109f1c838873ce4f3f72762b9200e448426b985d1" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.codehaus.groovy" name="groovy-test" version="3.0.15">
+         <artifact name="groovy-test-3.0.15.jar">
+            <md5 value="54ea580ed6a447c42018b05d715f0027" origin="Generated by Gradle"/>
+            <sha256 value="68328b4ccbef24c73dca358334a6ec6520bc3e0501ee1879b49a269755db7f51" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.codehaus.groovy" name="groovy-test" version="3.0.8">
          <artifact name="groovy-test-3.0.8.jar">
             <md5 value="42693079c79da133d480e3552a0b2a01" origin="Generated by Gradle"/>
@@ -5993,6 +6113,12 @@
             <sha256 value="be29cc480cec23d5082fabc2d29d2152d3f5be582b31c8ea848d3999dd5b1496" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.codehaus.groovy" name="groovy-test-junit5" version="3.0.15">
+         <artifact name="groovy-test-junit5-3.0.15.jar">
+            <md5 value="4a2a863d0cfc6448d14af28cd9ae6306" origin="Generated by Gradle"/>
+            <sha256 value="c6266969f72493fd61e63dcc8f5e02e9e9d8871c0dd6adbe75739446d8d68f2c" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.codehaus.groovy" name="groovy-test-junit5" version="3.0.8">
          <artifact name="groovy-test-junit5-3.0.8.jar">
             <md5 value="c5c0dd43649b4fec61085f5154cabdf2" origin="Generated by Gradle"/>
@@ -6011,6 +6137,12 @@
             <sha256 value="361edff0cb61a968346849bc51a20f238998b17c24dad21389143fbcf3bc3c7e" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.codehaus.groovy" name="groovy-testng" version="3.0.15">
+         <artifact name="groovy-testng-3.0.15.jar">
+            <md5 value="22de47df382ca9db8f02e3844efd7781" origin="Generated by Gradle"/>
+            <sha256 value="9542bd12058d7d19366531e5efc524bb40b95d8a2f23654bcc850eae1d9b8957" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.codehaus.groovy" name="groovy-testng" version="3.0.8">
          <artifact name="groovy-testng-3.0.8.jar">
             <md5 value="b9501ad0665012c655aa1cfb15327bc0" origin="Generated by Gradle"/>
@@ -6035,6 +6167,12 @@
             <sha256 value="8faea983f0d871bd2d2f28150747edf9047dd4d716700a0276eaa905a5cd0816" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.codehaus.groovy" name="groovy-xml" version="3.0.15">
+         <artifact name="groovy-xml-3.0.15.jar">
+            <md5 value="9b034305f3a4d0ace84e915bf7660695" origin="Generated by Gradle"/>
+            <sha256 value="28670cefed54bf3704c0894a4dbf3f0e26178001ef889d28c9873deb87235a92" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.codehaus.groovy" name="groovy-xml" version="3.0.8">
          <artifact name="groovy-xml-3.0.8.jar">
             <md5 value="072f5b640272f58d7e038ccc4e01aeb8" origin="Generated by Gradle"/>
@@ -6443,6 +6581,12 @@
             <sha256 value="24d7f385cdffff81648f11098688fd0a2f1986c5286364183c08958927e5307d" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.gradle.kotlin" name="gradle-kotlin-dsl-plugins" version="4.0.7">
+         <artifact name="gradle-kotlin-dsl-plugins-4.0.7.jar">
+            <md5 value="7f73b1970da5906bb57c2d4e95afb8ad" origin="Generated by Gradle"/>
+            <sha256 value="7700af78c35bdd8c164e3f3a3026a568c66cf9dbd182a1756e087b2dfa3b02fb" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.gradle.toolchains" name="foojay-resolver" version="0.4.0">
          <artifact name="foojay-resolver-0.4.0.jar">
             <md5 value="eeb8fc7711dca44bb38d7e89846efa19" origin="Generated by Gradle"/>
@@ -6705,6 +6849,12 @@
             <sha256 value="e270b8f0652d979a63aca4d4a21270986aaf06378e2eb838f00ce09390f5ab4c" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.jetbrains.kotlin" name="kotlin-assignment" version="1.9.20-dev-154">
+         <artifact name="kotlin-assignment-1.9.20-dev-154-gradle80.jar">
+            <md5 value="3b8ac0f2e9ec4078b3f12cb27b0c6840" origin="Generated by Gradle"/>
+            <sha256 value="c014299af6d281c9ebcae16556042b768f4ebca6c8dd229f260ae5117ff09b36" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.jetbrains.kotlin" name="kotlin-build-common" version="1.5.31">
          <artifact name="kotlin-build-common-1.5.31.jar">
             <md5 value="5e95bbaa4df2da6899175abac0a8306a" origin="Generated by Gradle"/>
diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/FlowParameterHolder.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/FlowParameterHolder.kt
new file mode 100644
index 0000000..532d586
--- /dev/null
+++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/FlowParameterHolder.kt
@@ -0,0 +1,50 @@
+/*
+ * 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.gradle.plugin
+
+import org.gradle.api.Project
+import org.gradle.api.flow.*
+import org.gradle.api.provider.Property
+import org.gradle.api.services.ServiceReference
+import org.gradle.api.tasks.Input
+import org.jetbrains.kotlin.gradle.plugin.statistics.BuildFlowService
+import javax.inject.Inject
+
+open class FlowParameterHolder @Inject constructor(private val flowScope: FlowScope, private val flowProviders: FlowProviders) {
+    companion object {
+        fun getInstance(project: Project) =
+            project.objects.newInstance(FlowParameterHolder::class.java)
+    }
+
+    fun subscribeForBuildResult() {
+        flowScope.always(
+            BuildFinishFlowAction::class.java
+        ) { spec ->
+            flowProviders.buildWorkResult.map { it.failure.isPresent }.let {
+                spec.parameters.buildFailed.set(it)
+            }
+        }
+    }
+}
+
+
+class BuildFinishFlowAction : FlowAction<BuildFinishFlowAction.Parameters> {
+    interface Parameters : FlowParameters {
+        @get:ServiceReference
+        val buildFlowServiceProperty: Property<BuildFlowService>
+
+        @get:Input
+        val action: Property<String?>
+        @get:Input
+        val buildFailed: Property<Boolean>
+    }
+
+    override fun execute(parameters: Parameters) {
+        parameters.buildFlowServiceProperty.get().buildFinished(
+            parameters.action.orNull, parameters.buildFailed.get()
+        )
+    }
+}
diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt
index 4099bdd..461c814 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt
@@ -42,6 +42,7 @@
 import org.jetbrains.kotlin.gradle.plugin.sources.DefaultKotlinSourceSetFactory
 import org.jetbrains.kotlin.gradle.plugin.statistics.KotlinBuildStatsService
 import org.jetbrains.kotlin.gradle.report.BuildMetricsService
+import org.jetbrains.kotlin.gradle.plugin.statistics.BuildFlowService
 import org.jetbrains.kotlin.gradle.targets.js.KotlinJsCompilerAttribute
 import org.jetbrains.kotlin.gradle.targets.js.KotlinJsPlugin
 import org.jetbrains.kotlin.gradle.targets.js.npm.addNpmDependencyExtension
@@ -65,17 +66,19 @@
     override val pluginVersion: String = getKotlinPluginVersion(logger)
 
     override fun apply(project: Project) {
-        val kotlinPluginVersion = project.getKotlinPluginVersion()
-
-        val statisticsReporter = KotlinBuildStatsService.getOrCreateInstance(project)
-        statisticsReporter?.report(StringMetrics.KOTLIN_COMPILER_VERSION, kotlinPluginVersion)
-
         checkGradleCompatibility()
 
         project.gradle.projectsEvaluated {
             whenBuildEvaluated(project)
         }
 
+        val kotlinPluginVersion = project.getKotlinPluginVersion()
+
+        KotlinBuildStatsService.getOrCreateInstance(project)?.apply {
+            report(StringMetrics.KOTLIN_COMPILER_VERSION, kotlinPluginVersion)
+        }
+        BuildFlowService.registerIfAbsentImpl(project)
+
         addKotlinCompilerConfiguration(project)
 
         project.registerDefaultVariantImplementations()
@@ -192,6 +195,9 @@
     }
 
     open fun whenBuildEvaluated(project: Project) {
+        KotlinBuildStatsService.applyIfInitialised {
+            it.projectsEvaluated(project.gradle)
+        }
     }
 }
 
diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/BuildFlowService.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/BuildFlowService.kt
new file mode 100644
index 0000000..b7f3488
--- /dev/null
+++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/BuildFlowService.kt
@@ -0,0 +1,71 @@
+/*
+ * 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.gradle.plugin.statistics
+
+import org.gradle.api.Project
+import org.gradle.api.provider.Property
+import org.gradle.api.provider.Provider
+import org.gradle.api.services.BuildService
+import org.gradle.api.services.BuildServiceParameters
+import org.gradle.tooling.events.OperationCompletionListener
+import org.gradle.tooling.events.task.TaskFailureResult
+import org.gradle.tooling.events.task.TaskFinishEvent
+import org.gradle.util.GradleVersion
+import org.jetbrains.kotlin.gradle.plugin.BuildEventsListenerRegistryHolder
+import org.jetbrains.kotlin.gradle.plugin.FlowParameterHolder
+
+abstract class BuildFlowService : BuildService<BuildFlowService.Parameters>, AutoCloseable {
+    interface Parameters: BuildServiceParameters {
+        val useFlowParameters: Property<Boolean>
+    }
+    companion object {
+        private val serviceClass = BuildFlowService::class.java
+        private val serviceName = "${serviceClass.name}_${serviceClass.classLoader.hashCode()}"
+        private var buildFailed: Boolean = false
+        fun registerIfAbsentImpl(
+            project: Project,
+        ): Provider<BuildFlowService>? {
+            // Return early if the service was already registered to avoid the overhead of reading the reporting settings below
+            project.gradle.sharedServices.registrations.findByName(serviceName)?.let {
+                @Suppress("UNCHECKED_CAST")
+                return it.service as Provider<BuildFlowService>
+            }
+            return project.gradle.sharedServices.registerIfAbsent(serviceName, serviceClass) {
+                it.parameters.useFlowParameters.set(GradleVersion.current().baseVersion >= GradleVersion.version("8.1"))
+                KotlinBuildStatsService.applyIfInitialised {
+                    it.buildStarted(project.gradle)
+                }
+            }.also {
+                if (GradleVersion.current().baseVersion < GradleVersion.version("8.1")) {
+                    BuildEventsListenerRegistryHolder.getInstance(project).listenerRegistry.onTaskCompletion(
+                        project.provider {
+                            OperationCompletionListener { event ->
+                                if ((event is TaskFinishEvent) && (event.result is TaskFailureResult)) {
+                                    buildFailed = true
+                                }
+                            }
+                        }
+                    )
+                } else {
+                    FlowParameterHolder.getInstance(project).subscribeForBuildResult()
+                }
+            }
+
+        }
+    }
+
+    override fun close() {
+        if (!parameters.useFlowParameters.get()) {
+            buildFinished(null, buildFailed)
+        }
+    }
+
+    internal fun buildFinished(action: String?, buildFailed: Boolean) {
+        KotlinBuildStatsService.applyIfInitialised {
+            it.buildFinished(action, buildFailed)
+        }
+    }
+}
\ No newline at end of file
diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/KotlinBuildStatHandler.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/KotlinBuildStatHandler.kt
index 927e5da..83a7e18 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/KotlinBuildStatHandler.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/KotlinBuildStatHandler.kt
@@ -61,27 +61,26 @@
         }
     }
 
-    fun reportGlobalMetricsAndBuildFinished(
+    fun reportGlobalMetrics(
         gradle: Gradle?,
-        beanName: ObjectName,
         sessionLogger: BuildSessionLogger,
-        action: String?,
-        failure: Throwable?
     ) {
         runSafe("${KotlinBuildStatHandler::class.java}.reportGlobalMetrics") {
-            try {
-                try {
-                    if (gradle != null) reportGlobalMetrics(gradle, sessionLogger)
-                } finally {
-                    sessionLogger.finishBuildSession(action, failure)
-                }
-            } finally {
-                buildFinished(beanName)
-            }
+            if (gradle != null) reportGlobalMetricsImpl(gradle, sessionLogger)
         }
     }
 
-    internal fun reportGlobalMetrics(gradle: Gradle, sessionLogger: BuildSessionLogger) {
+    fun reportBuildFinished(
+        sessionLogger: BuildSessionLogger,
+        action: String?,
+        buildFailed: Boolean,
+    ) {
+        runSafe("${KotlinBuildStatHandler::class.java}.reportBuildFinish") {
+            sessionLogger.finishBuildSession(action, buildFailed)
+        }
+    }
+
+    private fun reportGlobalMetricsImpl(gradle: Gradle, sessionLogger: BuildSessionLogger) {
         sessionLogger.report(StringMetrics.PROJECT_PATH, gradle.rootProject.projectDir.absolutePath)
         System.getProperty("os.name")?.also { sessionLogger.report(StringMetrics.OS_TYPE, System.getProperty("os.name")) }
         sessionLogger.report(NumericalMetrics.CPU_NUMBER_OF_CORES, Runtime.getRuntime().availableProcessors().toLong())
diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/KotlinBuildStatsService.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/KotlinBuildStatsService.kt
index 466e87a..820efc3 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/KotlinBuildStatsService.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/KotlinBuildStatsService.kt
@@ -5,8 +5,6 @@
 
 package org.jetbrains.kotlin.gradle.plugin.statistics
 
-import org.gradle.BuildAdapter
-import org.gradle.BuildResult
 import org.gradle.api.Project
 import org.gradle.api.invocation.Gradle
 import org.gradle.api.logging.Logger
@@ -19,13 +17,13 @@
 import org.jetbrains.kotlin.gradle.plugin.statistics.KotlinBuildStatHandler.Companion.runSafe
 import org.jetbrains.kotlin.gradle.plugin.statistics.old.Pre232IdeaKotlinBuildStatsMXBean
 import org.jetbrains.kotlin.gradle.plugin.statistics.old.Pre232IdeaKotlinBuildStatsService
-import org.jetbrains.kotlin.gradle.utils.isConfigurationCacheAvailable
 import org.jetbrains.kotlin.statistics.BuildSessionLogger
 import org.jetbrains.kotlin.statistics.BuildSessionLogger.Companion.STATISTICS_FOLDER_NAME
 import org.jetbrains.kotlin.statistics.metrics.BooleanMetrics
 import org.jetbrains.kotlin.statistics.metrics.IStatisticsValuesConsumer
 import org.jetbrains.kotlin.statistics.metrics.NumericalMetrics
 import org.jetbrains.kotlin.statistics.metrics.StringMetrics
+import java.io.Closeable
 import java.io.File
 import java.lang.management.ManagementFactory
 import javax.management.MBeanServer
@@ -48,7 +46,7 @@
 }
 
 
-internal abstract class KotlinBuildStatsService internal constructor() : BuildAdapter(), IStatisticsValuesConsumer {
+abstract class KotlinBuildStatsService internal constructor() : IStatisticsValuesConsumer, Closeable {
     companion object {
         // Do not rename this bean otherwise compatibility with the older Kotlin Gradle Plugins would be lost
         private const val JMX_BEAN_NAME_BEFORE_232_IDEA = "org.jetbrains.kotlin.gradle.plugin.statistics:type=StatsService"
@@ -77,7 +75,7 @@
          */
         @JvmStatic
         @Synchronized
-        fun getInstance(): IStatisticsValuesConsumer? {
+        fun getInstance(): KotlinBuildStatsService? {
             if (statisticsIsEnabled != true) {
                 return null
             }
@@ -101,7 +99,7 @@
          */
         @JvmStatic
         @Synchronized
-        internal fun getOrCreateInstance(project: Project): IStatisticsValuesConsumer? {
+        internal fun getOrCreateInstance(project: Project): KotlinBuildStatsService? {
 
             return runSafe("${KotlinBuildStatsService::class.java}.getOrCreateInstance") {
                 val gradle = project.gradle
@@ -131,11 +129,7 @@
                             registerPre232IdeaStatsBean(mbs, gradle, log)
                         }
 
-                        if (!isConfigurationCacheAvailable(gradle)) {
-                            gradle.addBuildListener(instance!!)
-                        }
-
-                        BuildEventsListenerRegistryHolder.getInstance(project).listenerRegistry.onTaskCompletion(project.provider {
+                       BuildEventsListenerRegistryHolder.getInstance(project).listenerRegistry.onTaskCompletion(project.provider {
                             OperationCompletionListener { event ->
                                 if (event is TaskFinishEvent) {
                                     reportTaskIfNeed(event.descriptor.name)
@@ -181,7 +175,7 @@
          * Invokes provided collector if the reporting service is initialised.
          * The duration of collector's wall time is reported into overall overhead metric.
          */
-        fun applyIfInitialised(collector: (IStatisticsValuesConsumer) -> Unit) {
+        fun applyIfInitialised(collector: (KotlinBuildStatsService) -> Unit) {
             getInstance()?.apply {
                 try {
                     val duration = measureTimeMillis {
@@ -213,6 +207,16 @@
             }
         }
     }
+
+    override fun close() {
+        instance = null
+    }
+
+    open fun buildFinished(action: String?, buildFailed: Boolean) {}
+
+    open fun buildStarted(gradle: Gradle) {}
+
+    open fun projectsEvaluated(gradle: Gradle) {}
 }
 
 internal class JMXKotlinBuildStatsService(private val mbs: MBeanServer, private val beanName: ObjectName) :
@@ -242,14 +246,11 @@
             callJmx("reportString", "java.lang.String", metric.name, value, subprojectName, weight)
         } as? Boolean ?: false
 
-    override fun buildFinished(result: BuildResult) {
-        instance = null
-    }
 }
 
 internal abstract class AbstractKotlinBuildStatsService(
     gradle: Gradle,
-    protected val beanName: ObjectName,
+    private val beanName: ObjectName,
 ) : KotlinBuildStatsService() {
     companion object {
         //test only
@@ -293,15 +294,15 @@
     }
 
     @Synchronized
-    override fun buildFinished(result: BuildResult) {
+    override fun close() {
         KotlinBuildStatHandler().buildFinished(beanName)
-        instance = null
+        super.close()
     }
 }
 
 internal class DefaultKotlinBuildStatsService internal constructor(
     gradle: Gradle,
-    beanName: ObjectName
+    beanName: ObjectName,
 ) : AbstractKotlinBuildStatsService(gradle, beanName), KotlinBuildStatsMXBean {
 
     override fun report(metric: BooleanMetrics, value: Boolean, subprojectName: String?, weight: Long?): Boolean =
@@ -323,9 +324,12 @@
         report(StringMetrics.valueOf(name), value, subprojectName, weight)
 
     //only one jmx bean service should report global metrics
-    @Synchronized
-    override fun buildFinished(result: BuildResult) {
-        KotlinBuildStatHandler().reportGlobalMetricsAndBuildFinished(result.gradle, beanName, sessionLogger, result.action, result.failure)
-        instance = null
+    override fun buildFinished(action: String?, buildFailed: Boolean) {
+        KotlinBuildStatHandler().reportBuildFinished(sessionLogger, action, buildFailed)
     }
+
+    override fun buildStarted(gradle: Gradle) {
+        KotlinBuildStatHandler().reportGlobalMetrics(gradle, sessionLogger)
+    }
+
 }
diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/report/BuildMetricsService.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/report/BuildMetricsService.kt
index 7707f56..e7d5000 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/report/BuildMetricsService.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/report/BuildMetricsService.kt
@@ -224,24 +224,25 @@
             // BuildScanExtension cant be parameter nor BuildService's field
             val buildScanExtension = project.rootProject.extensions.findByName("buildScan")
             val buildScan = buildScanExtension?.let { BuildScanExtensionHolder(it) }
-            val buildReportService = buildMetricService.map { it.buildReportService }
-            BuildEventsListenerRegistryHolder.getInstance(project).listenerRegistry.onTaskCompletion(project.provider {
-                OperationCompletionListener { event ->
-                    if (event is TaskFinishEvent) {
-                        val buildOperation = buildMetricService.get().updateBuildOperationRecord(event)
-                        val buildParameters = buildMetricService.get().parameters.toBuildReportParameters()
-                        buildReportService.get().onFinish(event, buildOperation, buildParameters, buildScan)
-                    }
-                }
-            })
 
             val buildScanReportSettings = buildMetricService.get().parameters.reportingSettings.orNull?.buildScanReportSettings
             if (buildScanReportSettings != null) {
                 buildScan?.also {
-                    buildReportService.get().initBuildScanTags(
+                    BuildEventsListenerRegistryHolder.getInstance(project).listenerRegistry.onTaskCompletion(project.provider {
+                        OperationCompletionListener { event ->
+                            if (event is TaskFinishEvent) {
+                                val buildOperation = buildMetricService.get().updateBuildOperationRecord(event)
+                                val buildParameters = buildMetricService.get().parameters.toBuildReportParameters()
+                                val buildReportService = buildMetricService.map { it.buildReportService }
+                                buildReportService.get().onFinish(event, buildOperation, buildParameters, buildScan)
+                            }
+                        }
+                    })
+                    buildMetricService.map { it.buildReportService }.get().initBuildScanTags(
                         it, buildMetricService.get().parameters.label.orNull
                     )
                     it.buildScan.buildFinished {
+                        val buildReportService = buildMetricService.map { it.buildReportService }
                         buildReportService.get().addCollectedTags(buildScan)
                     }
                 }
diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/statistics/BuildSessionLoggerTest.kt b/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/statistics/BuildSessionLoggerTest.kt
index a32a781..5371a53 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/statistics/BuildSessionLoggerTest.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/statistics/BuildSessionLoggerTest.kt
@@ -53,8 +53,8 @@
 
         assertEquals(true, logger1.isBuildSessionStarted())
 
-        logger1.finishBuildSession("", null)
-        logger2.finishBuildSession("", null)
+        logger1.finishBuildSession("", false)
+        logger2.finishBuildSession("", false)
 
         rootFolder.listFiles()?.first()?.listFiles()?.forEach { file ->
             assertTrue(
@@ -69,21 +69,21 @@
         val maxFileSize = 10_000
         val logger = BuildSessionLogger(rootFolder, 100, maxFileSize.toLong())
         logger.startBuildSession(0, null)
-        logger.finishBuildSession("", null)
+        logger.finishBuildSession("", false)
 
         assertEquals(1, statFilesCount())
 
         val file2edit = rootFolder.listFiles()?.first()?.listFiles()?.first() ?: fail("Could not find single stat file")
 
         logger.startBuildSession(0, 0)
-        logger.finishBuildSession("", null)
+        logger.finishBuildSession("", false)
         //new file should not be created
         assertEquals(1, statFilesCount())
 
         file2edit.appendBytes(ByteArray(maxFileSize))
 
         logger.startBuildSession(0, 0)
-        logger.finishBuildSession("", null)
+        logger.finishBuildSession("", false)
 
         // a new file should be created as maximal file size
         assertEquals(2, statFilesCount())
@@ -94,7 +94,7 @@
         val maxFiles = 100
         val logger = BuildSessionLogger(rootFolder, maxFiles)
         logger.startBuildSession(0, null)
-        logger.finishBuildSession("", null)
+        logger.finishBuildSession("", false)
         assertEquals(1, statFilesCount())
 
         val statsFolder = rootFolder.listFiles()?.single() ?: fail("${rootFolder.absolutePath} was not created")
@@ -107,7 +107,7 @@
         }
 
         logger.startBuildSession(0, 0)
-        logger.finishBuildSession("", null)
+        logger.finishBuildSession("", false)
 
         assertTrue(
             statsFolder.listFiles()?.count { it.name == singleStatFile.name } == 1,
@@ -139,7 +139,7 @@
 
         val startTime = System.currentTimeMillis() - 1001
         logger.startBuildSession(1, startTime)
-        logger.finishBuildSession("Build", null)
+        logger.finishBuildSession("Build", false)
         assertEquals(1, statFilesCount())
 
         val statFile = rootFolder.listFiles()?.single()?.listFiles()?.single() ?: fail("Could not find stat file")
@@ -158,7 +158,7 @@
         }
 
 
-        logger.finishBuildSession("", null)
+        logger.finishBuildSession("", false)
 
         val metrics = ArrayList<MetricsContainer>()
         MetricsContainer.readFromFile(statFile) {
@@ -194,7 +194,7 @@
         for (metric in NumericalMetrics.values()) {
             logger.report(metric, System.currentTimeMillis())
         }
-        logger.finishBuildSession("Build", null)
+        logger.finishBuildSession("Build", false)
 
         MetricsContainer.readFromFile(rootFolder.listFiles()?.single()?.listFiles()?.single() ?: fail("Could not find stat file")) {
             for (metric in StringMetrics.values()) {
@@ -217,7 +217,7 @@
         logger.report(NumericalMetrics.ANALYSIS_LINES_PER_SECOND, 10, null, 9)
         logger.report(NumericalMetrics.ANALYSIS_LINES_PER_SECOND, 100, null, 1)
 
-        logger.finishBuildSession("Build", null)
+        logger.finishBuildSession("Build", false)
         MetricsContainer.readFromFile(rootFolder.listFiles()?.single()?.listFiles()?.single() ?: fail("Could not find stat file")) {
             assertEquals(19L, it.getMetric(NumericalMetrics.ANALYSIS_LINES_PER_SECOND)?.getValue())
         }
diff --git a/libraries/tools/kotlin-gradle-statistics/src/main/kotlin/org/jetbrains/kotlin/statistics/BuildSessionLogger.kt b/libraries/tools/kotlin-gradle-statistics/src/main/kotlin/org/jetbrains/kotlin/statistics/BuildSessionLogger.kt
index f4a66f3..4e86289 100644
--- a/libraries/tools/kotlin-gradle-statistics/src/main/kotlin/org/jetbrains/kotlin/statistics/BuildSessionLogger.kt
+++ b/libraries/tools/kotlin-gradle-statistics/src/main/kotlin/org/jetbrains/kotlin/statistics/BuildSessionLogger.kt
@@ -131,7 +131,7 @@
     }
 
     @Synchronized
-    fun finishBuildSession(@Suppress("UNUSED_PARAMETER") action: String?, failure: Throwable?) {
+    fun finishBuildSession(@Suppress("UNUSED_PARAMETER") action: String?, buildFailed: Boolean) {
         try {
             // nanotime could not be used as build start time in nanotime is unknown. As result, the measured duration
             // could be affected by system clock correction
@@ -142,7 +142,7 @@
                 }
                 report(NumericalMetrics.GRADLE_EXECUTION_DURATION, finishTime - it.projectEvaluatedTime)
                 report(NumericalMetrics.BUILD_FINISH_TIME, finishTime)
-                report(BooleanMetrics.BUILD_FAILED, failure != null)
+                report(BooleanMetrics.BUILD_FAILED, buildFailed)
             }
             buildSession = null
         } finally {