diff --git a/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest.kt b/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/AbstractIncrementalK2FirICJvmCompilerRunnerTest.kt
similarity index 88%
rename from compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest.kt
rename to compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/AbstractIncrementalK2FirICJvmCompilerRunnerTest.kt
index 5f5fbba..95f7cf0 100644
--- a/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest.kt
+++ b/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/AbstractIncrementalK2FirICJvmCompilerRunnerTest.kt
@@ -9,7 +9,7 @@
 import org.jetbrains.kotlin.incremental.testingUtils.BuildLogFinder
 import java.io.File
 
-abstract class AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest : AbstractIncrementalJvmCompilerRunnerTest() {
+abstract class AbstractIncrementalK2FirICJvmCompilerRunnerTest : AbstractIncrementalJvmCompilerRunnerTest() {
     override fun createCompilerArguments(destinationDir: File, testDir: File): K2JVMCompilerArguments =
         super.createCompilerArguments(destinationDir, testDir).apply {
             languageVersion = "2.0"
diff --git a/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalFirICLightTreeJvmCompilerRunnerTestGenerated.java b/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalK2FirICJvmCompilerRunnerTestGenerated.java
similarity index 95%
rename from compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalFirICLightTreeJvmCompilerRunnerTestGenerated.java
rename to compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalK2FirICJvmCompilerRunnerTestGenerated.java
index 2878c54..690543f 100644
--- a/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalFirICLightTreeJvmCompilerRunnerTestGenerated.java
+++ b/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalK2FirICJvmCompilerRunnerTestGenerated.java
@@ -19,11 +19,11 @@
 /** This class is generated by {@link org.jetbrains.kotlin.generators.tests.GenerateTestsKt}. DO NOT MODIFY MANUALLY */
 @SuppressWarnings("all")
 @RunWith(JUnit3RunnerWithInners.class)
-public class IncrementalFirICLightTreeJvmCompilerRunnerTestGenerated extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+public class IncrementalK2FirICJvmCompilerRunnerTestGenerated extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
     @TestMetadata("jps/jps-plugin/testData/incremental/pureKotlin")
     @TestDataPath("$PROJECT_ROOT")
     @RunWith(JUnit3RunnerWithInners.class)
-    public static class PureKotlin extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+    public static class PureKotlin extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
         private void runTest(String testDataFilePath) throws Exception {
             KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
         }
@@ -691,7 +691,7 @@
     @TestMetadata("jps/jps-plugin/testData/incremental/classHierarchyAffected")
     @TestDataPath("$PROJECT_ROOT")
     @RunWith(JUnit3RunnerWithInners.class)
-    public static class ClassHierarchyAffected extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+    public static class ClassHierarchyAffected extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
         private void runTest(String testDataFilePath) throws Exception {
             KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
         }
@@ -909,7 +909,7 @@
     @TestMetadata("jps/jps-plugin/testData/incremental/inlineFunCallSite")
     @TestDataPath("$PROJECT_ROOT")
     @RunWith(JUnit3RunnerWithInners.class)
-    public static class InlineFunCallSite extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+    public static class InlineFunCallSite extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
         private void runTest(String testDataFilePath) throws Exception {
             KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
         }
@@ -996,7 +996,7 @@
         @TestMetadata("jps/jps-plugin/testData/incremental/inlineFunCallSite/classProperty")
         @TestDataPath("$PROJECT_ROOT")
         @RunWith(JUnit3RunnerWithInners.class)
-        public static class ClassProperty extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+        public static class ClassProperty extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
             private void runTest(String testDataFilePath) throws Exception {
                 KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
             }
@@ -1009,7 +1009,7 @@
         @TestMetadata("jps/jps-plugin/testData/incremental/inlineFunCallSite/companionObjectProperty")
         @TestDataPath("$PROJECT_ROOT")
         @RunWith(JUnit3RunnerWithInners.class)
-        public static class CompanionObjectProperty extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+        public static class CompanionObjectProperty extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
             private void runTest(String testDataFilePath) throws Exception {
                 KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
             }
@@ -1022,7 +1022,7 @@
         @TestMetadata("jps/jps-plugin/testData/incremental/inlineFunCallSite/coroutine")
         @TestDataPath("$PROJECT_ROOT")
         @RunWith(JUnit3RunnerWithInners.class)
-        public static class Coroutine extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+        public static class Coroutine extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
             private void runTest(String testDataFilePath) throws Exception {
                 KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
             }
@@ -1035,7 +1035,7 @@
         @TestMetadata("jps/jps-plugin/testData/incremental/inlineFunCallSite/function")
         @TestDataPath("$PROJECT_ROOT")
         @RunWith(JUnit3RunnerWithInners.class)
-        public static class Function extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+        public static class Function extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
             private void runTest(String testDataFilePath) throws Exception {
                 KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
             }
@@ -1048,7 +1048,7 @@
         @TestMetadata("jps/jps-plugin/testData/incremental/inlineFunCallSite/functionIndirect")
         @TestDataPath("$PROJECT_ROOT")
         @RunWith(JUnit3RunnerWithInners.class)
-        public static class FunctionIndirect extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+        public static class FunctionIndirect extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
             private void runTest(String testDataFilePath) throws Exception {
                 KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
             }
@@ -1061,7 +1061,7 @@
         @TestMetadata("jps/jps-plugin/testData/incremental/inlineFunCallSite/getter")
         @TestDataPath("$PROJECT_ROOT")
         @RunWith(JUnit3RunnerWithInners.class)
-        public static class Getter extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+        public static class Getter extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
             private void runTest(String testDataFilePath) throws Exception {
                 KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
             }
@@ -1074,7 +1074,7 @@
         @TestMetadata("jps/jps-plugin/testData/incremental/inlineFunCallSite/lambda")
         @TestDataPath("$PROJECT_ROOT")
         @RunWith(JUnit3RunnerWithInners.class)
-        public static class Lambda extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+        public static class Lambda extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
             private void runTest(String testDataFilePath) throws Exception {
                 KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
             }
@@ -1087,7 +1087,7 @@
         @TestMetadata("jps/jps-plugin/testData/incremental/inlineFunCallSite/localFun")
         @TestDataPath("$PROJECT_ROOT")
         @RunWith(JUnit3RunnerWithInners.class)
-        public static class LocalFun extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+        public static class LocalFun extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
             private void runTest(String testDataFilePath) throws Exception {
                 KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
             }
@@ -1100,7 +1100,7 @@
         @TestMetadata("jps/jps-plugin/testData/incremental/inlineFunCallSite/method")
         @TestDataPath("$PROJECT_ROOT")
         @RunWith(JUnit3RunnerWithInners.class)
-        public static class Method extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+        public static class Method extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
             private void runTest(String testDataFilePath) throws Exception {
                 KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
             }
@@ -1113,7 +1113,7 @@
         @TestMetadata("jps/jps-plugin/testData/incremental/inlineFunCallSite/parameterDefaultValue")
         @TestDataPath("$PROJECT_ROOT")
         @RunWith(JUnit3RunnerWithInners.class)
-        public static class ParameterDefaultValue extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+        public static class ParameterDefaultValue extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
             private void runTest(String testDataFilePath) throws Exception {
                 KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
             }
@@ -1126,7 +1126,7 @@
         @TestMetadata("jps/jps-plugin/testData/incremental/inlineFunCallSite/primaryConstructorParameterDefaultValue")
         @TestDataPath("$PROJECT_ROOT")
         @RunWith(JUnit3RunnerWithInners.class)
-        public static class PrimaryConstructorParameterDefaultValue extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+        public static class PrimaryConstructorParameterDefaultValue extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
             private void runTest(String testDataFilePath) throws Exception {
                 KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
             }
@@ -1139,7 +1139,7 @@
         @TestMetadata("jps/jps-plugin/testData/incremental/inlineFunCallSite/superCall")
         @TestDataPath("$PROJECT_ROOT")
         @RunWith(JUnit3RunnerWithInners.class)
-        public static class SuperCall extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+        public static class SuperCall extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
             private void runTest(String testDataFilePath) throws Exception {
                 KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
             }
@@ -1152,7 +1152,7 @@
         @TestMetadata("jps/jps-plugin/testData/incremental/inlineFunCallSite/thisCall")
         @TestDataPath("$PROJECT_ROOT")
         @RunWith(JUnit3RunnerWithInners.class)
-        public static class ThisCall extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+        public static class ThisCall extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
             private void runTest(String testDataFilePath) throws Exception {
                 KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
             }
@@ -1165,7 +1165,7 @@
         @TestMetadata("jps/jps-plugin/testData/incremental/inlineFunCallSite/topLevelObjectProperty")
         @TestDataPath("$PROJECT_ROOT")
         @RunWith(JUnit3RunnerWithInners.class)
-        public static class TopLevelObjectProperty extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+        public static class TopLevelObjectProperty extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
             private void runTest(String testDataFilePath) throws Exception {
                 KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
             }
@@ -1178,7 +1178,7 @@
         @TestMetadata("jps/jps-plugin/testData/incremental/inlineFunCallSite/topLevelProperty")
         @TestDataPath("$PROJECT_ROOT")
         @RunWith(JUnit3RunnerWithInners.class)
-        public static class TopLevelProperty extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+        public static class TopLevelProperty extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
             private void runTest(String testDataFilePath) throws Exception {
                 KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
             }
@@ -1192,7 +1192,7 @@
     @TestMetadata("jps/jps-plugin/testData/incremental/withJava")
     @TestDataPath("$PROJECT_ROOT")
     @RunWith(JUnit3RunnerWithInners.class)
-    public static class WithJava extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+    public static class WithJava extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
         private void runTest(String testDataFilePath) throws Exception {
             KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
         }
@@ -1204,7 +1204,7 @@
         @TestMetadata("jps/jps-plugin/testData/incremental/withJava/convertBetweenJavaAndKotlin")
         @TestDataPath("$PROJECT_ROOT")
         @RunWith(JUnit3RunnerWithInners.class)
-        public static class ConvertBetweenJavaAndKotlin extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+        public static class ConvertBetweenJavaAndKotlin extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
             private void runTest(String testDataFilePath) throws Exception {
                 KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
             }
@@ -1236,7 +1236,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/convertBetweenJavaAndKotlin/javaToKotlin")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class JavaToKotlin extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class JavaToKotlin extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -1249,7 +1249,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/convertBetweenJavaAndKotlin/javaToKotlinAndBack")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class JavaToKotlinAndBack extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class JavaToKotlinAndBack extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -1262,7 +1262,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/convertBetweenJavaAndKotlin/javaToKotlinAndRemove")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class JavaToKotlinAndRemove extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class JavaToKotlinAndRemove extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -1275,7 +1275,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/convertBetweenJavaAndKotlin/kotlinToJava")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class KotlinToJava extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class KotlinToJava extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -1289,7 +1289,7 @@
         @TestMetadata("jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin")
         @TestDataPath("$PROJECT_ROOT")
         @RunWith(JUnit3RunnerWithInners.class)
-        public static class JavaUsedInKotlin extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+        public static class JavaUsedInKotlin extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
             private void runTest(String testDataFilePath) throws Exception {
                 KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
             }
@@ -1411,7 +1411,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/changeFieldType")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class ChangeFieldType extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class ChangeFieldType extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -1424,7 +1424,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/changeNotUsedSignature")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class ChangeNotUsedSignature extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class ChangeNotUsedSignature extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -1437,7 +1437,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/changePropertyOverrideType")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class ChangePropertyOverrideType extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class ChangePropertyOverrideType extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -1450,7 +1450,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/changeSignature")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class ChangeSignature extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class ChangeSignature extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -1463,7 +1463,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/changeSignaturePackagePrivate")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class ChangeSignaturePackagePrivate extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class ChangeSignaturePackagePrivate extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -1476,7 +1476,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/changeSignaturePackagePrivateNonRoot")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class ChangeSignaturePackagePrivateNonRoot extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class ChangeSignaturePackagePrivateNonRoot extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -1489,7 +1489,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/changeSignatureStatic")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class ChangeSignatureStatic extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class ChangeSignatureStatic extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -1502,7 +1502,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/constantChanged")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class ConstantChanged extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class ConstantChanged extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -1515,7 +1515,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/constantPropertyChanged")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class ConstantPropertyChanged extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class ConstantPropertyChanged extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -1528,7 +1528,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/constantUnchanged")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class ConstantUnchanged extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class ConstantUnchanged extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -1541,7 +1541,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/enumEntryAdded")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class EnumEntryAdded extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class EnumEntryAdded extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -1554,7 +1554,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/enumEntryRemoved")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class EnumEntryRemoved extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class EnumEntryRemoved extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -1567,7 +1567,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaAndKotlinChangedSimultaneously")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class JavaAndKotlinChangedSimultaneously extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class JavaAndKotlinChangedSimultaneously extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -1580,7 +1580,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaFieldNullabilityChanged")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class JavaFieldNullabilityChanged extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class JavaFieldNullabilityChanged extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -1593,7 +1593,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaMethodParamNullabilityChanged")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class JavaMethodParamNullabilityChanged extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class JavaMethodParamNullabilityChanged extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -1606,7 +1606,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaMethodReturnTypeNullabilityChanged")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class JavaMethodReturnTypeNullabilityChanged extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class JavaMethodReturnTypeNullabilityChanged extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -1619,7 +1619,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/methodAddedInSuper")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class MethodAddedInSuper extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class MethodAddedInSuper extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -1632,7 +1632,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/methodRenamed")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class MethodRenamed extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class MethodRenamed extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -1645,7 +1645,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/mixedInheritance")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class MixedInheritance extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class MixedInheritance extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -1658,7 +1658,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/notChangeSignature")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class NotChangeSignature extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class NotChangeSignature extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -1671,7 +1671,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/rawErrorTypeDuringSerialization")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class RawErrorTypeDuringSerialization extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class RawErrorTypeDuringSerialization extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -1684,7 +1684,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/removeAnnotation")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class RemoveAnnotation extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class RemoveAnnotation extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -1697,7 +1697,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/samConversions")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class SamConversions extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class SamConversions extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -1734,7 +1734,7 @@
                 @TestMetadata("jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/samConversions/methodAddDefault")
                 @TestDataPath("$PROJECT_ROOT")
                 @RunWith(JUnit3RunnerWithInners.class)
-                public static class MethodAddDefault extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+                public static class MethodAddDefault extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                     private void runTest(String testDataFilePath) throws Exception {
                         KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                     }
@@ -1747,7 +1747,7 @@
                 @TestMetadata("jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/samConversions/methodAdded")
                 @TestDataPath("$PROJECT_ROOT")
                 @RunWith(JUnit3RunnerWithInners.class)
-                public static class MethodAdded extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+                public static class MethodAdded extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                     private void runTest(String testDataFilePath) throws Exception {
                         KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                     }
@@ -1760,7 +1760,7 @@
                 @TestMetadata("jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/samConversions/methodAddedSamAdapter")
                 @TestDataPath("$PROJECT_ROOT")
                 @RunWith(JUnit3RunnerWithInners.class)
-                public static class MethodAddedSamAdapter extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+                public static class MethodAddedSamAdapter extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                     private void runTest(String testDataFilePath) throws Exception {
                         KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                     }
@@ -1773,7 +1773,7 @@
                 @TestMetadata("jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/samConversions/methodSignatureChanged")
                 @TestDataPath("$PROJECT_ROOT")
                 @RunWith(JUnit3RunnerWithInners.class)
-                public static class MethodSignatureChanged extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+                public static class MethodSignatureChanged extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                     private void runTest(String testDataFilePath) throws Exception {
                         KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                     }
@@ -1786,7 +1786,7 @@
                 @TestMetadata("jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/samConversions/methodSignatureChangedSamAdapter")
                 @TestDataPath("$PROJECT_ROOT")
                 @RunWith(JUnit3RunnerWithInners.class)
-                public static class MethodSignatureChangedSamAdapter extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+                public static class MethodSignatureChangedSamAdapter extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                     private void runTest(String testDataFilePath) throws Exception {
                         KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                     }
@@ -1801,7 +1801,7 @@
         @TestMetadata("jps/jps-plugin/testData/incremental/withJava/kotlinUsedInJava")
         @TestDataPath("$PROJECT_ROOT")
         @RunWith(JUnit3RunnerWithInners.class)
-        public static class KotlinUsedInJava extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+        public static class KotlinUsedInJava extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
             private void runTest(String testDataFilePath) throws Exception {
                 KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
             }
@@ -1883,7 +1883,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/kotlinUsedInJava/addOptionalParameter")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class AddOptionalParameter extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class AddOptionalParameter extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -1896,7 +1896,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/kotlinUsedInJava/changeNotUsedSignature")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class ChangeNotUsedSignature extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class ChangeNotUsedSignature extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -1909,7 +1909,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/kotlinUsedInJava/changeSignature")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class ChangeSignature extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class ChangeSignature extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -1922,7 +1922,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/kotlinUsedInJava/constantChanged")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class ConstantChanged extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class ConstantChanged extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -1935,7 +1935,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/kotlinUsedInJava/constantUnchanged")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class ConstantUnchanged extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class ConstantUnchanged extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -1948,7 +1948,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/kotlinUsedInJava/funRenamed")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class FunRenamed extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class FunRenamed extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -1961,7 +1961,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/kotlinUsedInJava/jvmFieldChanged")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class JvmFieldChanged extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class JvmFieldChanged extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -1974,7 +1974,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/kotlinUsedInJava/jvmFieldUnchanged")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class JvmFieldUnchanged extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class JvmFieldUnchanged extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -1987,7 +1987,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/kotlinUsedInJava/methodAddedInSuper")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class MethodAddedInSuper extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class MethodAddedInSuper extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -2000,7 +2000,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/kotlinUsedInJava/notChangeSignature")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class NotChangeSignature extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class NotChangeSignature extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -2013,7 +2013,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/kotlinUsedInJava/onlyTopLevelFunctionInFileRemoved")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class OnlyTopLevelFunctionInFileRemoved extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class OnlyTopLevelFunctionInFileRemoved extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -2026,7 +2026,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/kotlinUsedInJava/packageFileAdded")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class PackageFileAdded extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class PackageFileAdded extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -2039,7 +2039,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/kotlinUsedInJava/privateChanges")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class PrivateChanges extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class PrivateChanges extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -2052,7 +2052,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/kotlinUsedInJava/propertyRenamed")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class PropertyRenamed extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class PropertyRenamed extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -2066,7 +2066,7 @@
         @TestMetadata("jps/jps-plugin/testData/incremental/withJava/other")
         @TestDataPath("$PROJECT_ROOT")
         @RunWith(JUnit3RunnerWithInners.class)
-        public static class Other extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+        public static class Other extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
             private void runTest(String testDataFilePath) throws Exception {
                 KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
             }
@@ -2228,7 +2228,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/other/accessingFunctionsViaRenamedFileClass")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class AccessingFunctionsViaRenamedFileClass extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class AccessingFunctionsViaRenamedFileClass extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -2241,7 +2241,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/other/allKotlinFilesRemovedThenNewAdded")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class AllKotlinFilesRemovedThenNewAdded extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class AllKotlinFilesRemovedThenNewAdded extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -2254,7 +2254,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/other/classRedeclaration")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class ClassRedeclaration extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class ClassRedeclaration extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -2267,7 +2267,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/other/classToPackageFacade")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class ClassToPackageFacade extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class ClassToPackageFacade extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -2280,7 +2280,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/other/conflictingPlatformDeclarations")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class ConflictingPlatformDeclarations extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class ConflictingPlatformDeclarations extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -2293,7 +2293,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/other/defaultValueInConstructorAdded")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class DefaultValueInConstructorAdded extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class DefaultValueInConstructorAdded extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -2306,7 +2306,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/other/inlineFunctionWithJvmNameInClass")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class InlineFunctionWithJvmNameInClass extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class InlineFunctionWithJvmNameInClass extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -2319,7 +2319,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/other/inlineTopLevelFunctionWithJvmName")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class InlineTopLevelFunctionWithJvmName extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class InlineTopLevelFunctionWithJvmName extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -2332,7 +2332,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/other/inlineTopLevelValPropertyWithJvmName")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class InlineTopLevelValPropertyWithJvmName extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class InlineTopLevelValPropertyWithJvmName extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -2345,7 +2345,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/other/innerClassNotGeneratedWhenRebuilding")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class InnerClassNotGeneratedWhenRebuilding extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class InnerClassNotGeneratedWhenRebuilding extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -2358,7 +2358,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/other/jvmNameChanged")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class JvmNameChanged extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class JvmNameChanged extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -2371,7 +2371,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/other/mainRedeclaration")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class MainRedeclaration extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class MainRedeclaration extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -2384,7 +2384,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/other/multifileClassAddTopLevelFunWithDefault")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class MultifileClassAddTopLevelFunWithDefault extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class MultifileClassAddTopLevelFunWithDefault extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -2397,7 +2397,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/other/multifileClassFileAdded")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class MultifileClassFileAdded extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class MultifileClassFileAdded extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -2410,7 +2410,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/other/multifileClassFileChanged")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class MultifileClassFileChanged extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class MultifileClassFileChanged extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -2423,7 +2423,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/other/multifileClassFileMovedToAnotherMultifileClass")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class MultifileClassFileMovedToAnotherMultifileClass extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class MultifileClassFileMovedToAnotherMultifileClass extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -2436,7 +2436,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/other/multifileClassInlineFunction")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class MultifileClassInlineFunction extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class MultifileClassInlineFunction extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -2449,7 +2449,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/other/multifileClassInlineFunctionAccessingField")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class MultifileClassInlineFunctionAccessingField extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class MultifileClassInlineFunctionAccessingField extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -2462,7 +2462,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/other/multifileClassRecreated")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class MultifileClassRecreated extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class MultifileClassRecreated extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -2475,7 +2475,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/other/multifileClassRecreatedAfterRenaming")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class MultifileClassRecreatedAfterRenaming extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class MultifileClassRecreatedAfterRenaming extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -2488,7 +2488,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/other/multifileClassRemoved")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class MultifileClassRemoved extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class MultifileClassRemoved extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -2501,7 +2501,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/other/multifileDependantUsage")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class MultifileDependantUsage extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class MultifileDependantUsage extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -2514,7 +2514,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/other/multifilePackagePartMethodAdded")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class MultifilePackagePartMethodAdded extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class MultifilePackagePartMethodAdded extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -2527,7 +2527,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/other/multifilePartsWithProperties")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class MultifilePartsWithProperties extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class MultifilePartsWithProperties extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -2540,7 +2540,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/other/optionalParameter")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class OptionalParameter extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class OptionalParameter extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -2553,7 +2553,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/other/packageFacadeToClass")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class PackageFacadeToClass extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class PackageFacadeToClass extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -2566,7 +2566,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/other/packageMultifileClassOneFileWithPublicChanges")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class PackageMultifileClassOneFileWithPublicChanges extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class PackageMultifileClassOneFileWithPublicChanges extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -2579,7 +2579,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/other/packageMultifileClassPrivateOnlyChanged")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class PackageMultifileClassPrivateOnlyChanged extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class PackageMultifileClassPrivateOnlyChanged extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -2592,7 +2592,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/other/publicPropertyWithPrivateSetterMultiFileFacade")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class PublicPropertyWithPrivateSetterMultiFileFacade extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class PublicPropertyWithPrivateSetterMultiFileFacade extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -2605,7 +2605,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/other/topLevelFunctionWithJvmName")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class TopLevelFunctionWithJvmName extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class TopLevelFunctionWithJvmName extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -2618,7 +2618,7 @@
             @TestMetadata("jps/jps-plugin/testData/incremental/withJava/other/topLevelPropertyWithJvmName")
             @TestDataPath("$PROJECT_ROOT")
             @RunWith(JUnit3RunnerWithInners.class)
-            public static class TopLevelPropertyWithJvmName extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+            public static class TopLevelPropertyWithJvmName extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
                 private void runTest(String testDataFilePath) throws Exception {
                     KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
                 }
@@ -2633,7 +2633,7 @@
     @TestMetadata("jps/jps-plugin/testData/incremental/incrementalJvmCompilerOnly")
     @TestDataPath("$PROJECT_ROOT")
     @RunWith(JUnit3RunnerWithInners.class)
-    public static class IncrementalJvmCompilerOnly extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+    public static class IncrementalJvmCompilerOnly extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
         private void runTest(String testDataFilePath) throws Exception {
             KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
         }
@@ -2670,7 +2670,7 @@
         @TestMetadata("jps/jps-plugin/testData/incremental/incrementalJvmCompilerOnly/addAnnotationToJavaClass")
         @TestDataPath("$PROJECT_ROOT")
         @RunWith(JUnit3RunnerWithInners.class)
-        public static class AddAnnotationToJavaClass extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+        public static class AddAnnotationToJavaClass extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
             private void runTest(String testDataFilePath) throws Exception {
                 KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
             }
@@ -2683,7 +2683,7 @@
         @TestMetadata("jps/jps-plugin/testData/incremental/incrementalJvmCompilerOnly/addNestedClass")
         @TestDataPath("$PROJECT_ROOT")
         @RunWith(JUnit3RunnerWithInners.class)
-        public static class AddNestedClass extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+        public static class AddNestedClass extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
             private void runTest(String testDataFilePath) throws Exception {
                 KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
             }
@@ -2696,7 +2696,7 @@
         @TestMetadata("jps/jps-plugin/testData/incremental/incrementalJvmCompilerOnly/changeAnnotationInJavaClass")
         @TestDataPath("$PROJECT_ROOT")
         @RunWith(JUnit3RunnerWithInners.class)
-        public static class ChangeAnnotationInJavaClass extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+        public static class ChangeAnnotationInJavaClass extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
             private void runTest(String testDataFilePath) throws Exception {
                 KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
             }
@@ -2709,7 +2709,7 @@
         @TestMetadata("jps/jps-plugin/testData/incremental/incrementalJvmCompilerOnly/inlineFunctionRegeneratedObjectStability")
         @TestDataPath("$PROJECT_ROOT")
         @RunWith(JUnit3RunnerWithInners.class)
-        public static class InlineFunctionRegeneratedObjectStability extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+        public static class InlineFunctionRegeneratedObjectStability extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
             private void runTest(String testDataFilePath) throws Exception {
                 KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
             }
@@ -2722,7 +2722,7 @@
         @TestMetadata("jps/jps-plugin/testData/incremental/incrementalJvmCompilerOnly/inlineFunctionSmapStability")
         @TestDataPath("$PROJECT_ROOT")
         @RunWith(JUnit3RunnerWithInners.class)
-        public static class InlineFunctionSmapStability extends AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest {
+        public static class InlineFunctionSmapStability extends AbstractIncrementalK2FirICJvmCompilerRunnerTest {
             private void runTest(String testDataFilePath) throws Exception {
                 KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
             }
diff --git a/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt b/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt
index 3b492b6..5a01dfc 100644
--- a/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt
+++ b/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt
@@ -90,7 +90,7 @@
                 )
             )
 
-            testClass<AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest>(
+            testClass<AbstractIncrementalK2FirICJvmCompilerRunnerTest>(
                 init = incrementalJvmTestData(
                     TargetBackend.JVM_IR,
                     folderToExcludePatternMap = mapOf(
