tests
diff --git a/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/project/structure/KtSdkModuleImpl.kt b/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/project/structure/KtSdkModuleImpl.kt
new file mode 100644
index 0000000..08d5c54
--- /dev/null
+++ b/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/project/structure/KtSdkModuleImpl.kt
@@ -0,0 +1,29 @@
+/*
+ * 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.analysis.test.framework.project.structure
+
+import com.intellij.openapi.project.Project
+import com.intellij.psi.search.GlobalSearchScope
+import org.jetbrains.kotlin.analysis.project.structure.*
+import org.jetbrains.kotlin.platform.TargetPlatform
+import org.jetbrains.kotlin.resolve.PlatformDependentAnalyzerServices
+import org.jetbrains.kotlin.test.getAnalyzerServices
+import java.nio.file.Path
+
+class KtSdkModuleImpl(
+    override val sdkName: String,
+    override val platform: TargetPlatform,
+    override val contentScope: GlobalSearchScope,
+    override val project: Project,
+    private val binaryRoots: Collection<Path>,
+) : KtModuleWithModifiableDependencies(), KtSdkModule {
+    override val analyzerServices: PlatformDependentAnalyzerServices get() = platform.getAnalyzerServices()
+    override fun getBinaryRoots(): Collection<Path> = binaryRoots
+
+    override val directRegularDependencies: MutableList<KtModule> = mutableListOf()
+    override val directDependsOnDependencies: MutableList<KtModule> = mutableListOf()
+    override val directFriendDependencies: MutableList<KtModule> = mutableListOf()
+}
\ No newline at end of file
diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/configurators/AbstractAnalysisApiFirBinaryTestConfigurator.kt b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/configurators/AbstractAnalysisApiFirBinaryTestConfigurator.kt
new file mode 100644
index 0000000..df1d97a
--- /dev/null
+++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/configurators/AbstractAnalysisApiFirBinaryTestConfigurator.kt
@@ -0,0 +1,57 @@
+/*
+ * 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.analysis.low.level.api.fir.test.configurators
+
+import com.intellij.openapi.Disposable
+import com.intellij.openapi.project.Project
+import org.jetbrains.kotlin.analysis.api.impl.base.test.configurators.AnalysisApiBaseTestServiceRegistrar
+import org.jetbrains.kotlin.analysis.api.impl.base.test.configurators.AnalysisApiDecompiledCodeTestServiceRegistrar
+import org.jetbrains.kotlin.analysis.api.impl.base.test.configurators.AnalysisApiLibraryBaseTestServiceRegistrar
+import org.jetbrains.kotlin.analysis.api.standalone.base.project.structure.KtModuleProjectStructure
+import org.jetbrains.kotlin.analysis.low.level.api.fir.test.base.AnalysisApiFirTestServiceRegistrar
+import org.jetbrains.kotlin.analysis.test.framework.project.structure.KtModuleFactory
+import org.jetbrains.kotlin.analysis.test.framework.project.structure.TestModuleStructureFactory
+import org.jetbrains.kotlin.analysis.test.framework.services.libraries.DispatchingTestModuleCompiler
+import org.jetbrains.kotlin.analysis.test.framework.services.libraries.TestModuleCompiler
+import org.jetbrains.kotlin.analysis.test.framework.services.libraries.TestModuleDecompiler
+import org.jetbrains.kotlin.analysis.test.framework.services.libraries.TestModuleDecompilerJar
+import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiTestConfigurator
+import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiTestServiceRegistrar
+import org.jetbrains.kotlin.analysis.test.framework.test.configurators.FrontendKind
+import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
+import org.jetbrains.kotlin.test.services.TestModuleStructure
+import org.jetbrains.kotlin.test.services.TestServices
+
+abstract class AbstractAnalysisApiFirBinaryTestConfigurator : AnalysisApiTestConfigurator() {
+    override val analyseInDependentSession: Boolean get() = false
+    override val frontendKind: FrontendKind get() = FrontendKind.Fir
+
+    protected abstract fun moduleFactory(): KtModuleFactory
+
+    override fun configureTest(builder: TestConfigurationBuilder, disposable: Disposable) {
+        builder.apply {
+            useAdditionalService<KtModuleFactory> { moduleFactory() }
+            useAdditionalService<TestModuleCompiler> { DispatchingTestModuleCompiler() }
+            useAdditionalService<TestModuleDecompiler> { TestModuleDecompilerJar() }
+        }
+    }
+
+    override fun createModules(
+        moduleStructure: TestModuleStructure,
+        testServices: TestServices,
+        project: Project
+    ): KtModuleProjectStructure {
+        return TestModuleStructureFactory.createProjectStructureByTestStructure(moduleStructure, testServices, project)
+    }
+
+    override val serviceRegistrars: List<AnalysisApiTestServiceRegistrar> =
+        listOf(
+            AnalysisApiBaseTestServiceRegistrar,
+            AnalysisApiDecompiledCodeTestServiceRegistrar,
+            AnalysisApiFirTestServiceRegistrar,
+            AnalysisApiLibraryBaseTestServiceRegistrar,
+        )
+}
\ No newline at end of file
diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/configurators/AnalysisApiFirLibraryBinaryTestConfigurator.kt b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/configurators/AnalysisApiFirLibraryBinaryTestConfigurator.kt
index d449a76..081e012 100644
--- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/configurators/AnalysisApiFirLibraryBinaryTestConfigurator.kt
+++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/configurators/AnalysisApiFirLibraryBinaryTestConfigurator.kt
@@ -5,55 +5,18 @@
 
 package org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators
 
-import com.intellij.openapi.Disposable
 import com.intellij.openapi.project.Project
 import com.intellij.psi.search.GlobalSearchScope
-import org.jetbrains.kotlin.analysis.api.impl.base.test.configurators.AnalysisApiBaseTestServiceRegistrar
-import org.jetbrains.kotlin.analysis.api.impl.base.test.configurators.AnalysisApiDecompiledCodeTestServiceRegistrar
-import org.jetbrains.kotlin.analysis.api.impl.base.test.configurators.AnalysisApiLibraryBaseTestServiceRegistrar
-import org.jetbrains.kotlin.analysis.api.impl.base.util.LibraryUtils
-import org.jetbrains.kotlin.analysis.api.standalone.base.project.structure.KtModuleProjectStructure
 import org.jetbrains.kotlin.analysis.api.standalone.base.project.structure.KtModuleWithFiles
-import org.jetbrains.kotlin.analysis.low.level.api.fir.test.base.AnalysisApiFirTestServiceRegistrar
 import org.jetbrains.kotlin.analysis.test.framework.project.structure.KtLibraryModuleImpl
 import org.jetbrains.kotlin.analysis.test.framework.project.structure.KtModuleFactory
-import org.jetbrains.kotlin.analysis.test.framework.project.structure.TestModuleStructureFactory
-import org.jetbrains.kotlin.analysis.test.framework.services.libraries.*
-import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiTestConfigurator
-import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiTestServiceRegistrar
-import org.jetbrains.kotlin.analysis.test.framework.test.configurators.FrontendKind
-import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
+import org.jetbrains.kotlin.analysis.test.framework.services.libraries.compiledLibraryProvider
+import org.jetbrains.kotlin.analysis.test.framework.services.libraries.testModuleDecompiler
 import org.jetbrains.kotlin.test.model.TestModule
-import org.jetbrains.kotlin.test.services.TestModuleStructure
 import org.jetbrains.kotlin.test.services.TestServices
 
-object AnalysisApiFirLibraryBinaryTestConfigurator : AnalysisApiTestConfigurator() {
-    override val analyseInDependentSession: Boolean get() = false
-    override val frontendKind: FrontendKind get() = FrontendKind.Fir
-
-    override fun configureTest(builder: TestConfigurationBuilder, disposable: Disposable) {
-        builder.apply {
-            useAdditionalService<KtModuleFactory> { KtLibraryBinaryModuleFactory() }
-            useAdditionalService<TestModuleCompiler> { DispatchingTestModuleCompiler() }
-            useAdditionalService<TestModuleDecompiler> { TestModuleDecompilerJar() }
-        }
-    }
-
-    override fun createModules(
-        moduleStructure: TestModuleStructure,
-        testServices: TestServices,
-        project: Project
-    ): KtModuleProjectStructure {
-        return TestModuleStructureFactory.createProjectStructureByTestStructure(moduleStructure, testServices, project)
-    }
-
-    override val serviceRegistrars: List<AnalysisApiTestServiceRegistrar> =
-        listOf(
-            AnalysisApiBaseTestServiceRegistrar,
-            AnalysisApiDecompiledCodeTestServiceRegistrar,
-            AnalysisApiFirTestServiceRegistrar,
-            AnalysisApiLibraryBaseTestServiceRegistrar,
-        )
+object AnalysisApiFirLibraryBinaryTestConfigurator : AbstractAnalysisApiFirBinaryTestConfigurator() {
+    override fun moduleFactory(): KtModuleFactory = KtLibraryBinaryModuleFactory()
 }
 
 private class KtLibraryBinaryModuleFactory : KtModuleFactory {
diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/configurators/AnalysisApiFirSdkBinaryTestConfigurator.kt b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/configurators/AnalysisApiFirSdkBinaryTestConfigurator.kt
new file mode 100644
index 0000000..e8e6f87
--- /dev/null
+++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/configurators/AnalysisApiFirSdkBinaryTestConfigurator.kt
@@ -0,0 +1,38 @@
+/*
+ * 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.analysis.low.level.api.fir.test.configurators
+
+import com.intellij.openapi.project.Project
+import com.intellij.psi.search.GlobalSearchScope
+import org.jetbrains.kotlin.analysis.api.standalone.base.project.structure.KtModuleWithFiles
+import org.jetbrains.kotlin.analysis.test.framework.project.structure.KtModuleFactory
+import org.jetbrains.kotlin.analysis.test.framework.project.structure.KtSdkModuleImpl
+import org.jetbrains.kotlin.analysis.test.framework.services.libraries.compiledLibraryProvider
+import org.jetbrains.kotlin.analysis.test.framework.services.libraries.testModuleDecompiler
+import org.jetbrains.kotlin.test.model.TestModule
+import org.jetbrains.kotlin.test.services.TestServices
+
+object AnalysisApiFirSdkBinaryTestConfigurator : AbstractAnalysisApiFirBinaryTestConfigurator() {
+    override fun moduleFactory(): KtModuleFactory = KtSdkBinaryModuleFactory()
+}
+
+private class KtSdkBinaryModuleFactory : KtModuleFactory {
+    override fun createModule(testModule: TestModule, testServices: TestServices, project: Project): KtModuleWithFiles {
+        val library = testServices.compiledLibraryProvider.compileToLibrary(testModule).artifact
+        val decompiledFiles = testServices.testModuleDecompiler.getAllPsiFilesFromLibrary(library, project)
+
+        return KtModuleWithFiles(
+            KtSdkModuleImpl(
+                testModule.name,
+                testModule.targetPlatform,
+                GlobalSearchScope.filesScope(project, decompiledFiles.mapTo(mutableSetOf()) { it.virtualFile }),
+                project,
+                binaryRoots = listOf(library)
+            ),
+            decompiledFiles
+        )
+    }
+}
diff --git a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/AbstractSymbolLightClassesByFqNameForLibraryTest.kt b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/AbstractSymbolLightClassesByFqNameForLibraryTest.kt
index a5fac81..20f131f 100644
--- a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/AbstractSymbolLightClassesByFqNameForLibraryTest.kt
+++ b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/AbstractSymbolLightClassesByFqNameForLibraryTest.kt
@@ -6,10 +6,10 @@
 package org.jetbrains.kotlin.light.classes.symbol.decompiled
 
 import org.jetbrains.kotlin.light.classes.symbol.base.AbstractSymbolLightClassesByFqNameTest
-import org.jetbrains.kotlin.light.classes.symbol.decompiled.test.configurators.AnalysisApiSymbolLightClassesDecompiledTestConfigurator
+import org.jetbrains.kotlin.light.classes.symbol.decompiled.test.configurators.AnalysisApiSymbolLibraryLightClassesDecompiledTestConfigurator
 
 abstract class AbstractSymbolLightClassesByFqNameForLibraryTest : AbstractSymbolLightClassesByFqNameTest(
-    AnalysisApiSymbolLightClassesDecompiledTestConfigurator,
+    AnalysisApiSymbolLibraryLightClassesDecompiledTestConfigurator,
     EXTENSIONS.LIB_JAVA,
     isTestAgainstCompiledCode = true,
 )
\ No newline at end of file
diff --git a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/AbstractSymbolLightClassesByPsiForLibraryTest.kt b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/AbstractSymbolLightClassesByPsiForLibraryTest.kt
index b179a68..83a581c 100644
--- a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/AbstractSymbolLightClassesByPsiForLibraryTest.kt
+++ b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/AbstractSymbolLightClassesByPsiForLibraryTest.kt
@@ -6,10 +6,10 @@
 package org.jetbrains.kotlin.light.classes.symbol.decompiled
 
 import org.jetbrains.kotlin.light.classes.symbol.base.AbstractSymbolLightClassesByPsiTest
-import org.jetbrains.kotlin.light.classes.symbol.decompiled.test.configurators.AnalysisApiSymbolLightClassesDecompiledTestConfigurator
+import org.jetbrains.kotlin.light.classes.symbol.decompiled.test.configurators.AnalysisApiSymbolLibraryLightClassesDecompiledTestConfigurator
 
 abstract class AbstractSymbolLightClassesByPsiForLibraryTest : AbstractSymbolLightClassesByPsiTest(
-    AnalysisApiSymbolLightClassesDecompiledTestConfigurator,
+    AnalysisApiSymbolLibraryLightClassesDecompiledTestConfigurator,
     EXTENSIONS.LIB_JAVA,
     isTestAgainstCompiledCode = true,
 )
diff --git a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/AbstractSymbolLightClassesEqualityByFqNameForLibraryTest.kt b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/AbstractSymbolLightClassesEqualityByFqNameForLibraryTest.kt
index 4d4925c..62680a0 100644
--- a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/AbstractSymbolLightClassesEqualityByFqNameForLibraryTest.kt
+++ b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/AbstractSymbolLightClassesEqualityByFqNameForLibraryTest.kt
@@ -6,11 +6,11 @@
 package org.jetbrains.kotlin.light.classes.symbol.decompiled
 
 import org.jetbrains.kotlin.light.classes.symbol.base.AbstractSymbolLightClassesEqualityByFqNameTest
-import org.jetbrains.kotlin.light.classes.symbol.decompiled.test.configurators.AnalysisApiSymbolLightClassesDecompiledTestConfigurator
+import org.jetbrains.kotlin.light.classes.symbol.decompiled.test.configurators.AnalysisApiSymbolLibraryLightClassesDecompiledTestConfigurator
 
 abstract class AbstractSymbolLightClassesEqualityByFqNameForLibraryTest :
     AbstractSymbolLightClassesEqualityByFqNameTest(
-        AnalysisApiSymbolLightClassesDecompiledTestConfigurator,
+        AnalysisApiSymbolLibraryLightClassesDecompiledTestConfigurator,
         EXTENSIONS.LIB_JAVA,
         stopIfCompilationErrorDirectivePresent = true
     )
diff --git a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/AbstractSymbolLightClassesEqualityByPsiForLibraryTest.kt b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/AbstractSymbolLightClassesEqualityByPsiForLibraryTest.kt
index 0f0d00f..c06084b 100644
--- a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/AbstractSymbolLightClassesEqualityByPsiForLibraryTest.kt
+++ b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/AbstractSymbolLightClassesEqualityByPsiForLibraryTest.kt
@@ -6,11 +6,11 @@
 package org.jetbrains.kotlin.light.classes.symbol.decompiled
 
 import org.jetbrains.kotlin.light.classes.symbol.base.AbstractSymbolLightClassesEqualityByPsiTest
-import org.jetbrains.kotlin.light.classes.symbol.decompiled.test.configurators.AnalysisApiSymbolLightClassesDecompiledTestConfigurator
+import org.jetbrains.kotlin.light.classes.symbol.decompiled.test.configurators.AnalysisApiSymbolLibraryLightClassesDecompiledTestConfigurator
 
 abstract class AbstractSymbolLightClassesEqualityByPsiForLibraryTest :
     AbstractSymbolLightClassesEqualityByPsiTest(
-        AnalysisApiSymbolLightClassesDecompiledTestConfigurator,
+        AnalysisApiSymbolLibraryLightClassesDecompiledTestConfigurator,
         EXTENSIONS.LIB_JAVA,
         stopIfCompilationErrorDirectivePresent = true
     )
diff --git a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/AbstractSymbolLightClassesParentingByFqNameForLibraryTest.kt b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/AbstractSymbolLightClassesParentingByFqNameForLibraryTest.kt
index cd64543..d4bd60c 100644
--- a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/AbstractSymbolLightClassesParentingByFqNameForLibraryTest.kt
+++ b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/AbstractSymbolLightClassesParentingByFqNameForLibraryTest.kt
@@ -6,11 +6,11 @@
 package org.jetbrains.kotlin.light.classes.symbol.decompiled
 
 import org.jetbrains.kotlin.light.classes.symbol.base.AbstractSymbolLightClassesParentingTestByFqName
-import org.jetbrains.kotlin.light.classes.symbol.decompiled.test.configurators.AnalysisApiSymbolLightClassesDecompiledTestConfigurator
+import org.jetbrains.kotlin.light.classes.symbol.decompiled.test.configurators.AnalysisApiSymbolLibraryLightClassesDecompiledTestConfigurator
 
 abstract class AbstractSymbolLightClassesParentingByFqNameForLibraryTest :
     AbstractSymbolLightClassesParentingTestByFqName(
-        AnalysisApiSymbolLightClassesDecompiledTestConfigurator,
+        AnalysisApiSymbolLibraryLightClassesDecompiledTestConfigurator,
         EXTENSIONS.LIB_JAVA,
         stopIfCompilationErrorDirectivePresent = true
     )
\ No newline at end of file
diff --git a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/AbstractSymbolLightClassesParentingByPsiForLibraryTest.kt b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/AbstractSymbolLightClassesParentingByPsiForLibraryTest.kt
index febb7cd..48dcc0d 100644
--- a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/AbstractSymbolLightClassesParentingByPsiForLibraryTest.kt
+++ b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/AbstractSymbolLightClassesParentingByPsiForLibraryTest.kt
@@ -6,11 +6,11 @@
 package org.jetbrains.kotlin.light.classes.symbol.decompiled
 
 import org.jetbrains.kotlin.light.classes.symbol.base.AbstractSymbolLightClassesParentingTestByPsi
-import org.jetbrains.kotlin.light.classes.symbol.decompiled.test.configurators.AnalysisApiSymbolLightClassesDecompiledTestConfigurator
+import org.jetbrains.kotlin.light.classes.symbol.decompiled.test.configurators.AnalysisApiSymbolLibraryLightClassesDecompiledTestConfigurator
 
 abstract class AbstractSymbolLightClassesParentingByPsiForLibraryTest :
     AbstractSymbolLightClassesParentingTestByPsi(
-        AnalysisApiSymbolLightClassesDecompiledTestConfigurator,
+        AnalysisApiSymbolLibraryLightClassesDecompiledTestConfigurator,
         EXTENSIONS.LIB_JAVA,
         stopIfCompilationErrorDirectivePresent = true
     )
diff --git a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/AbstractSymbolLightClassesStructureByFqNameForLibraryTest.kt b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/AbstractSymbolLightClassesStructureByFqNameForLibraryTest.kt
index b48e644..e6b8e66 100644
--- a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/AbstractSymbolLightClassesStructureByFqNameForLibraryTest.kt
+++ b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/AbstractSymbolLightClassesStructureByFqNameForLibraryTest.kt
@@ -6,10 +6,10 @@
 package org.jetbrains.kotlin.light.classes.symbol.decompiled
 
 import org.jetbrains.kotlin.light.classes.symbol.base.AbstractSymbolLightClassesStructureByFqNameTest
-import org.jetbrains.kotlin.light.classes.symbol.decompiled.test.configurators.AnalysisApiSymbolLightClassesDecompiledTestConfigurator
+import org.jetbrains.kotlin.light.classes.symbol.decompiled.test.configurators.AnalysisApiSymbolLibraryLightClassesDecompiledTestConfigurator
 
 abstract class AbstractSymbolLightClassesStructureByFqNameForLibraryTest : AbstractSymbolLightClassesStructureByFqNameTest(
-    configurator = AnalysisApiSymbolLightClassesDecompiledTestConfigurator,
+    configurator = AnalysisApiSymbolLibraryLightClassesDecompiledTestConfigurator,
     testPrefix = "lib",
     stopIfCompilationErrorDirectivePresent = true,
 )
diff --git a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/AbstractSymbolLightClassesStructureForLibraryTest.kt b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/AbstractSymbolLightClassesStructureForLibraryTest.kt
index ab10dc9..00b3412 100644
--- a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/AbstractSymbolLightClassesStructureForLibraryTest.kt
+++ b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/AbstractSymbolLightClassesStructureForLibraryTest.kt
@@ -6,10 +6,10 @@
 package org.jetbrains.kotlin.light.classes.symbol.decompiled
 
 import org.jetbrains.kotlin.light.classes.symbol.base.AbstractSymbolLightClassesStructureTest
-import org.jetbrains.kotlin.light.classes.symbol.decompiled.test.configurators.AnalysisApiSymbolLightClassesDecompiledTestConfigurator
+import org.jetbrains.kotlin.light.classes.symbol.decompiled.test.configurators.AnalysisApiSymbolLibraryLightClassesDecompiledTestConfigurator
 
 abstract class AbstractSymbolLightClassesStructureForLibraryTest : AbstractSymbolLightClassesStructureTest(
-    configurator = AnalysisApiSymbolLightClassesDecompiledTestConfigurator,
+    configurator = AnalysisApiSymbolLibraryLightClassesDecompiledTestConfigurator,
     testPrefix = "lib",
     stopIfCompilationErrorDirectivePresent = true,
 )
diff --git a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/AbstractSymbolSdkLightClassesByFqNameForLibraryTest.kt b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/AbstractSymbolSdkLightClassesByFqNameForLibraryTest.kt
new file mode 100644
index 0000000..62fd057
--- /dev/null
+++ b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/AbstractSymbolSdkLightClassesByFqNameForLibraryTest.kt
@@ -0,0 +1,15 @@
+/*
+ * 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.light.classes.symbol.decompiled
+
+import org.jetbrains.kotlin.light.classes.symbol.base.AbstractSymbolLightClassesByFqNameTest
+import org.jetbrains.kotlin.light.classes.symbol.decompiled.test.configurators.AnalysisApiSymbolSdkLightClassesDecompiledTestConfigurator
+
+abstract class AbstractSymbolSdkLightClassesByFqNameForLibraryTest : AbstractSymbolLightClassesByFqNameTest(
+    AnalysisApiSymbolSdkLightClassesDecompiledTestConfigurator,
+    EXTENSIONS.LIB_JAVA,
+    isTestAgainstCompiledCode = true,
+)
\ No newline at end of file
diff --git a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/SymbolSdkLightClassesByFqNameForLibraryTestGenerated.java b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/SymbolSdkLightClassesByFqNameForLibraryTestGenerated.java
new file mode 100644
index 0000000..cd77a19
--- /dev/null
+++ b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/SymbolSdkLightClassesByFqNameForLibraryTestGenerated.java
@@ -0,0 +1,608 @@
+/*
+ * 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.light.classes.symbol.decompiled;
+
+import com.intellij.testFramework.TestDataPath;
+import org.jetbrains.kotlin.test.util.KtTestUtil;
+import org.jetbrains.kotlin.test.TestMetadata;
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+
+import java.io.File;
+import java.util.regex.Pattern;
+
+/** This class is generated by {@link org.jetbrains.kotlin.generators.tests.analysis.api.GenerateAnalysisApiTestsKt}. DO NOT MODIFY MANUALLY */
+@SuppressWarnings("all")
+@TestMetadata("compiler/testData/asJava/lightClasses/lightClassByFqName")
+@TestDataPath("$PROJECT_ROOT")
+public class SymbolSdkLightClassesByFqNameForLibraryTestGenerated extends AbstractSymbolSdkLightClassesByFqNameForLibraryTest {
+    @Test
+    public void testAllFilesPresentInLightClassByFqName() throws Exception {
+        KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/asJava/lightClasses/lightClassByFqName"), Pattern.compile("^([^.]+)\\.kt$"), null, true, "compilationErrors");
+    }
+
+    @Test
+    @TestMetadata("AnnotatedParameterInEnumConstructor.kt")
+    public void testAnnotatedParameterInEnumConstructor() throws Exception {
+        runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/AnnotatedParameterInEnumConstructor.kt");
+    }
+
+    @Test
+    @TestMetadata("AnnotatedParameterInInnerClassConstructor.kt")
+    public void testAnnotatedParameterInInnerClassConstructor() throws Exception {
+        runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/AnnotatedParameterInInnerClassConstructor.kt");
+    }
+
+    @Test
+    @TestMetadata("AnnotatedPropertyWithSites.kt")
+    public void testAnnotatedPropertyWithSites() throws Exception {
+        runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/AnnotatedPropertyWithSites.kt");
+    }
+
+    @Test
+    @TestMetadata("annotationBinaryRetention.kt")
+    public void testAnnotationBinaryRetention() throws Exception {
+        runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/annotationBinaryRetention.kt");
+    }
+
+    @Test
+    @TestMetadata("AnnotationClass.kt")
+    public void testAnnotationClass() throws Exception {
+        runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/AnnotationClass.kt");
+    }
+
+    @Test
+    @TestMetadata("AnnotationJavaRepeatable.kt")
+    public void testAnnotationJavaRepeatable() throws Exception {
+        runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/AnnotationJavaRepeatable.kt");
+    }
+
+    @Test
+    @TestMetadata("AnnotationJvmRepeatable.kt")
+    public void testAnnotationJvmRepeatable() throws Exception {
+        runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/AnnotationJvmRepeatable.kt");
+    }
+
+    @Test
+    @TestMetadata("AnnotationKotlinAndJavaRepeatable.kt")
+    public void testAnnotationKotlinAndJavaRepeatable() throws Exception {
+        runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/AnnotationKotlinAndJavaRepeatable.kt");
+    }
+
+    @Test
+    @TestMetadata("AnnotationKotlinAndJvmRepeatable.kt")
+    public void testAnnotationKotlinAndJvmRepeatable() throws Exception {
+        runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/AnnotationKotlinAndJvmRepeatable.kt");
+    }
+
+    @Test
+    @TestMetadata("AnnotationRepeatable.kt")
+    public void testAnnotationRepeatable() throws Exception {
+        runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/AnnotationRepeatable.kt");
+    }
+
+    @Test
+    @TestMetadata("BackingFields.kt")
+    public void testBackingFields() throws Exception {
+        runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/BackingFields.kt");
+    }
+
+    @Test
+    @TestMetadata("CompanionObject.kt")
+    public void testCompanionObject() throws Exception {
+        runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/CompanionObject.kt");
+    }
+
+    @Test
+    @TestMetadata("Constructors.kt")
+    public void testConstructors() throws Exception {
+        runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/Constructors.kt");
+    }
+
+    @Test
+    @TestMetadata("DataClassWithCustomImplementedMembers.kt")
+    public void testDataClassWithCustomImplementedMembers() throws Exception {
+        runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/DataClassWithCustomImplementedMembers.kt");
+    }
+
+    @Test
+    @TestMetadata("DefaultImplsWithTypeParameters.kt")
+    public void testDefaultImplsWithTypeParameters() throws Exception {
+        runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/DefaultImplsWithTypeParameters.kt");
+    }
+
+    @Test
+    @TestMetadata("DelegatedNested.kt")
+    public void testDelegatedNested() throws Exception {
+        runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/DelegatedNested.kt");
+    }
+
+    @Test
+    @TestMetadata("Delegation.kt")
+    public void testDelegation() throws Exception {
+        runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/Delegation.kt");
+    }
+
+    @Test
+    @TestMetadata("DeprecatedEnumEntry.kt")
+    public void testDeprecatedEnumEntry() throws Exception {
+        runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/DeprecatedEnumEntry.kt");
+    }
+
+    @Test
+    @TestMetadata("DeprecatedNotHiddenInClass.kt")
+    public void testDeprecatedNotHiddenInClass() throws Exception {
+        runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/DeprecatedNotHiddenInClass.kt");
+    }
+
+    @Test
+    @TestMetadata("DollarsInName.kt")
+    public void testDollarsInName() throws Exception {
+        runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/DollarsInName.kt");
+    }
+
+    @Test
+    @TestMetadata("DollarsInNameNoPackage.kt")
+    public void testDollarsInNameNoPackage() throws Exception {
+        runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/DollarsInNameNoPackage.kt");
+    }
+
+    @Test
+    @TestMetadata("EnumClass.kt")
+    public void testEnumClass() throws Exception {
+        runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/EnumClass.kt");
+    }
+
+    @Test
+    @TestMetadata("EnumClassWithEnumEntries.kt")
+    public void testEnumClassWithEnumEntries() throws Exception {
+        runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/EnumClassWithEnumEntries.kt");
+    }
+
+    @Test
+    @TestMetadata("EnumEntry.kt")
+    public void testEnumEntry() throws Exception {
+        runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/EnumEntry.kt");
+    }
+
+    @Test
+    @TestMetadata("ExtendingInterfaceWithDefaultImpls.kt")
+    public void testExtendingInterfaceWithDefaultImpls() throws Exception {
+        runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/ExtendingInterfaceWithDefaultImpls.kt");
+    }
+
+    @Test
+    @TestMetadata("HiddenDeprecated.kt")
+    public void testHiddenDeprecated() throws Exception {
+        runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/HiddenDeprecated.kt");
+    }
+
+    @Test
+    @TestMetadata("HiddenDeprecatedInClass.kt")
+    public void testHiddenDeprecatedInClass() throws Exception {
+        runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/HiddenDeprecatedInClass.kt");
+    }
+
+    @Test
+    @TestMetadata("InheritingInterfaceDefaultImpls.kt")
+    public void testInheritingInterfaceDefaultImpls() throws Exception {
+        runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/InheritingInterfaceDefaultImpls.kt");
+    }
+
+    @Test
+    @TestMetadata("InlineReified.kt")
+    public void testInlineReified() throws Exception {
+        runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/InlineReified.kt");
+    }
+
+    @Test
+    @TestMetadata("InvalidJavaIdentifierAsAnnotationArgument.kt")
+    public void testInvalidJavaIdentifierAsAnnotationArgument() throws Exception {
+        runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/InvalidJavaIdentifierAsAnnotationArgument.kt");
+    }
+
+    @Test
+    @TestMetadata("InvalidJavaIdentifierAsPropertyInitializer.kt")
+    public void testInvalidJavaIdentifierAsPropertyInitializer() throws Exception {
+        runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/InvalidJavaIdentifierAsPropertyInitializer.kt");
+    }
+
+    @Test
+    @TestMetadata("JavaBetween.kt")
+    public void testJavaBetween() throws Exception {
+        runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/JavaBetween.kt");
+    }
+
+    @Test
+    @TestMetadata("JavaClassWithAnnotation.kt")
+    public void testJavaClassWithAnnotation() throws Exception {
+        runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/JavaClassWithAnnotation.kt");
+    }
+
+    @Test
+    @TestMetadata("JvmNameOnMember.kt")
+    public void testJvmNameOnMember() throws Exception {
+        runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/JvmNameOnMember.kt");
+    }
+
+    @Test
+    @TestMetadata("JvmStatic.kt")
+    public void testJvmStatic() throws Exception {
+        runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/JvmStatic.kt");
+    }
+
+    @Test
+    @TestMetadata("LocalFunctions.kt")
+    public void testLocalFunctions() throws Exception {
+        runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/LocalFunctions.kt");
+    }
+
+    @Test
+    @TestMetadata("NestedObjects.kt")
+    public void testNestedObjects() throws Exception {
+        runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/NestedObjects.kt");
+    }
+
+    @Test
+    @TestMetadata("NonDataClassWithComponentFunctions.kt")
+    public void testNonDataClassWithComponentFunctions() throws Exception {
+        runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/NonDataClassWithComponentFunctions.kt");
+    }
+
+    @Test
+    @TestMetadata("OnlySecondaryConstructors.kt")
+    public void testOnlySecondaryConstructors() throws Exception {
+        runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/OnlySecondaryConstructors.kt");
+    }
+
+    @Test
+    @TestMetadata("PrivateObject.kt")
+    public void testPrivateObject() throws Exception {
+        runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/PrivateObject.kt");
+    }
+
+    @Test
+    @TestMetadata("PublishedApi.kt")
+    public void testPublishedApi() throws Exception {
+        runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/PublishedApi.kt");
+    }
+
+    @Test
+    @TestMetadata("SimpleObject.kt")
+    public void testSimpleObject() throws Exception {
+        runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/SimpleObject.kt");
+    }
+
+    @Test
+    @TestMetadata("SimplePublicField.kt")
+    public void testSimplePublicField() throws Exception {
+        runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/SimplePublicField.kt");
+    }
+
+    @Test
+    @TestMetadata("SpecialAnnotationsOnAnnotationClass.kt")
+    public void testSpecialAnnotationsOnAnnotationClass() throws Exception {
+        runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/SpecialAnnotationsOnAnnotationClass.kt");
+    }
+
+    @Test
+    @TestMetadata("StubOrderForOverloads.kt")
+    public void testStubOrderForOverloads() throws Exception {
+        runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/StubOrderForOverloads.kt");
+    }
+
+    @Test
+    @TestMetadata("SubstitutionOverride.kt")
+    public void testSubstitutionOverride() throws Exception {
+        runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/SubstitutionOverride.kt");
+    }
+
+    @Test
+    @TestMetadata("Throws.kt")
+    public void testThrows() throws Exception {
+        runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/Throws.kt");
+    }
+
+    @Test
+    @TestMetadata("TypePararametersInClass.kt")
+    public void testTypePararametersInClass() throws Exception {
+        runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/TypePararametersInClass.kt");
+    }
+
+    @Test
+    @TestMetadata("VarArgs.kt")
+    public void testVarArgs() throws Exception {
+        runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/VarArgs.kt");
+    }
+
+    @Nested
+    @TestMetadata("compiler/testData/asJava/lightClasses/lightClassByFqName/delegation")
+    @TestDataPath("$PROJECT_ROOT")
+    public class Delegation {
+        @Test
+        public void testAllFilesPresentInDelegation() throws Exception {
+            KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/asJava/lightClasses/lightClassByFqName/delegation"), Pattern.compile("^([^.]+)\\.kt$"), null, true);
+        }
+
+        @Test
+        @TestMetadata("Function.kt")
+        public void testFunction() throws Exception {
+            runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/delegation/Function.kt");
+        }
+
+        @Test
+        @TestMetadata("Property.kt")
+        public void testProperty() throws Exception {
+            runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/delegation/Property.kt");
+        }
+
+        @Test
+        @TestMetadata("WithImplicitType.kt")
+        public void testWithImplicitType() throws Exception {
+            runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/delegation/WithImplicitType.kt");
+        }
+    }
+
+    @Nested
+    @TestMetadata("compiler/testData/asJava/lightClasses/lightClassByFqName/facades")
+    @TestDataPath("$PROJECT_ROOT")
+    public class Facades {
+        @Test
+        public void testAllFilesPresentInFacades() throws Exception {
+            KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/asJava/lightClasses/lightClassByFqName/facades"), Pattern.compile("^([^.]+)\\.kt$"), null, true);
+        }
+
+        @Test
+        @TestMetadata("AllPrivate.kt")
+        public void testAllPrivate() throws Exception {
+            runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/facades/AllPrivate.kt");
+        }
+
+        @Test
+        @TestMetadata("InternalFacadeClass.kt")
+        public void testInternalFacadeClass() throws Exception {
+            runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/facades/InternalFacadeClass.kt");
+        }
+
+        @Test
+        @TestMetadata("MultiFile.kt")
+        public void testMultiFile() throws Exception {
+            runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/facades/MultiFile.kt");
+        }
+
+        @Test
+        @TestMetadata("SingleFile.kt")
+        public void testSingleFile() throws Exception {
+            runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/facades/SingleFile.kt");
+        }
+
+        @Test
+        @TestMetadata("SingleJvmClassName.kt")
+        public void testSingleJvmClassName() throws Exception {
+            runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/facades/SingleJvmClassName.kt");
+        }
+    }
+
+    @Nested
+    @TestMetadata("compiler/testData/asJava/lightClasses/lightClassByFqName/ideRegression")
+    @TestDataPath("$PROJECT_ROOT")
+    public class IdeRegression {
+        @Test
+        public void testAllFilesPresentInIdeRegression() throws Exception {
+            KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/asJava/lightClasses/lightClassByFqName/ideRegression"), Pattern.compile("^([^.]+)\\.kt$"), null, true);
+        }
+
+        @Test
+        @TestMetadata("AllOpenAnnotatedClasses.kt")
+        public void testAllOpenAnnotatedClasses() throws Exception {
+            runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/ideRegression/AllOpenAnnotatedClasses.kt");
+        }
+
+        @Test
+        @TestMetadata("ImplementingCharSequenceAndNumber.kt")
+        public void testImplementingCharSequenceAndNumber() throws Exception {
+            runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/ideRegression/ImplementingCharSequenceAndNumber.kt");
+        }
+
+        @Test
+        @TestMetadata("ImplementingMap.kt")
+        public void testImplementingMap() throws Exception {
+            runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/ideRegression/ImplementingMap.kt");
+        }
+
+        @Test
+        @TestMetadata("ImplementingMutableSet.kt")
+        public void testImplementingMutableSet() throws Exception {
+            runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/ideRegression/ImplementingMutableSet.kt");
+        }
+
+        @Test
+        @TestMetadata("InheritingInterfaceDefaultImpls.kt")
+        public void testInheritingInterfaceDefaultImpls() throws Exception {
+            runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/ideRegression/InheritingInterfaceDefaultImpls.kt");
+        }
+
+        @Test
+        @TestMetadata("OverridingFinalInternal.kt")
+        public void testOverridingFinalInternal() throws Exception {
+            runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/ideRegression/OverridingFinalInternal.kt");
+        }
+
+        @Test
+        @TestMetadata("OverridingInternal.kt")
+        public void testOverridingInternal() throws Exception {
+            runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/ideRegression/OverridingInternal.kt");
+        }
+
+        @Test
+        @TestMetadata("OverridingProtected.kt")
+        public void testOverridingProtected() throws Exception {
+            runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/ideRegression/OverridingProtected.kt");
+        }
+    }
+
+    @Nested
+    @TestMetadata("compiler/testData/asJava/lightClasses/lightClassByFqName/nullabilityAnnotations")
+    @TestDataPath("$PROJECT_ROOT")
+    public class NullabilityAnnotations {
+        @Test
+        public void testAllFilesPresentInNullabilityAnnotations() throws Exception {
+            KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/asJava/lightClasses/lightClassByFqName/nullabilityAnnotations"), Pattern.compile("^([^.]+)\\.kt$"), null, true);
+        }
+
+        @Test
+        @TestMetadata("Class.kt")
+        public void testClass() throws Exception {
+            runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/nullabilityAnnotations/Class.kt");
+        }
+
+        @Test
+        @TestMetadata("ClassObjectField.kt")
+        public void testClassObjectField() throws Exception {
+            runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/nullabilityAnnotations/ClassObjectField.kt");
+        }
+
+        @Test
+        @TestMetadata("ClassWithConstructor.kt")
+        public void testClassWithConstructor() throws Exception {
+            runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/nullabilityAnnotations/ClassWithConstructor.kt");
+        }
+
+        @Test
+        @TestMetadata("ClassWithConstructorAndProperties.kt")
+        public void testClassWithConstructorAndProperties() throws Exception {
+            runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/nullabilityAnnotations/ClassWithConstructorAndProperties.kt");
+        }
+
+        @Test
+        @TestMetadata("FileFacade.kt")
+        public void testFileFacade() throws Exception {
+            runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/nullabilityAnnotations/FileFacade.kt");
+        }
+
+        @Test
+        @TestMetadata("Generic.kt")
+        public void testGeneric() throws Exception {
+            runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/nullabilityAnnotations/Generic.kt");
+        }
+
+        @Test
+        @TestMetadata("ImplicitArrayWithFlexibleParameterTypes.kt")
+        public void testImplicitArrayWithFlexibleParameterTypes() throws Exception {
+            runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/nullabilityAnnotations/ImplicitArrayWithFlexibleParameterTypes.kt");
+        }
+
+        @Test
+        @TestMetadata("IntOverridesAny.kt")
+        public void testIntOverridesAny() throws Exception {
+            runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/nullabilityAnnotations/IntOverridesAny.kt");
+        }
+
+        @Test
+        @TestMetadata("JvmOverloads.kt")
+        public void testJvmOverloads() throws Exception {
+            runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/nullabilityAnnotations/JvmOverloads.kt");
+        }
+
+        @Test
+        @TestMetadata("NullableUnitReturn.kt")
+        public void testNullableUnitReturn() throws Exception {
+            runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/nullabilityAnnotations/NullableUnitReturn.kt");
+        }
+
+        @Test
+        @TestMetadata("OverrideAnyWithUnit.kt")
+        public void testOverrideAnyWithUnit() throws Exception {
+            runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/nullabilityAnnotations/OverrideAnyWithUnit.kt");
+        }
+
+        @Test
+        @TestMetadata("PlatformTypes.kt")
+        public void testPlatformTypes() throws Exception {
+            runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/nullabilityAnnotations/PlatformTypes.kt");
+        }
+
+        @Test
+        @TestMetadata("PrimitiveBackedInlineClasses.kt")
+        public void testPrimitiveBackedInlineClasses() throws Exception {
+            runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/nullabilityAnnotations/PrimitiveBackedInlineClasses.kt");
+        }
+
+        @Test
+        @TestMetadata("Primitives.kt")
+        public void testPrimitives() throws Exception {
+            runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/nullabilityAnnotations/Primitives.kt");
+        }
+
+        @Test
+        @TestMetadata("PrivateInClass.kt")
+        public void testPrivateInClass() throws Exception {
+            runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/nullabilityAnnotations/PrivateInClass.kt");
+        }
+
+        @Test
+        @TestMetadata("Synthetic.kt")
+        public void testSynthetic() throws Exception {
+            runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/nullabilityAnnotations/Synthetic.kt");
+        }
+
+        @Test
+        @TestMetadata("Trait.kt")
+        public void testTrait() throws Exception {
+            runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/nullabilityAnnotations/Trait.kt");
+        }
+
+        @Test
+        @TestMetadata("typeAlias.kt")
+        public void testTypeAlias() throws Exception {
+            runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/nullabilityAnnotations/typeAlias.kt");
+        }
+
+        @Test
+        @TestMetadata("UnitAsGenericArgument.kt")
+        public void testUnitAsGenericArgument() throws Exception {
+            runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/nullabilityAnnotations/UnitAsGenericArgument.kt");
+        }
+
+        @Test
+        @TestMetadata("UnitParameter.kt")
+        public void testUnitParameter() throws Exception {
+            runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/nullabilityAnnotations/UnitParameter.kt");
+        }
+
+        @Test
+        @TestMetadata("VoidReturn.kt")
+        public void testVoidReturn() throws Exception {
+            runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/nullabilityAnnotations/VoidReturn.kt");
+        }
+    }
+
+    @Nested
+    @TestMetadata("compiler/testData/asJava/lightClasses/lightClassByFqName/script")
+    @TestDataPath("$PROJECT_ROOT")
+    public class Script {
+        @Test
+        public void testAllFilesPresentInScript() throws Exception {
+            KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/asJava/lightClasses/lightClassByFqName/script"), Pattern.compile("^([^.]+)\\.kt$"), null, true);
+        }
+    }
+
+    @Nested
+    @TestMetadata("compiler/testData/asJava/lightClasses/lightClassByFqName/withTestCompilerPluginEnabled")
+    @TestDataPath("$PROJECT_ROOT")
+    public class WithTestCompilerPluginEnabled {
+        @Test
+        public void testAllFilesPresentInWithTestCompilerPluginEnabled() throws Exception {
+            KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/asJava/lightClasses/lightClassByFqName/withTestCompilerPluginEnabled"), Pattern.compile("^([^.]+)\\.kt$"), null, true);
+        }
+
+        @Test
+        @TestMetadata("allOpen.kt")
+        public void testAllOpen() throws Exception {
+            runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/withTestCompilerPluginEnabled/allOpen.kt");
+        }
+    }
+}
diff --git a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/test/configurators/AnalysisApiSymbolLightClassesDecompiledTestConfigurator.kt b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/test/configurators/AbstractAnalysisApiSymbolLightClassesDecompiledTestConfigurator.kt
similarity index 78%
rename from analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/test/configurators/AnalysisApiSymbolLightClassesDecompiledTestConfigurator.kt
rename to analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/test/configurators/AbstractAnalysisApiSymbolLightClassesDecompiledTestConfigurator.kt
index a5d3eda..5bd93c8 100644
--- a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/test/configurators/AnalysisApiSymbolLightClassesDecompiledTestConfigurator.kt
+++ b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/test/configurators/AbstractAnalysisApiSymbolLightClassesDecompiledTestConfigurator.kt
@@ -16,16 +16,18 @@
 import org.jetbrains.kotlin.test.services.TestModuleStructure
 import org.jetbrains.kotlin.test.services.TestServices
 
-object AnalysisApiSymbolLightClassesDecompiledTestConfigurator : AnalysisApiTestConfigurator() {
+abstract class AbstractAnalysisApiSymbolLightClassesDecompiledTestConfigurator : AnalysisApiTestConfigurator() {
     override val analyseInDependentSession: Boolean get() = false
     override val frontendKind: FrontendKind get() = FrontendKind.Fir
 
+    protected abstract fun analysisApiTestConfigurator(): AnalysisApiTestConfigurator
+
     override fun configureTest(builder: TestConfigurationBuilder, disposable: Disposable) {
-        AnalysisApiFirLibraryBinaryTestConfigurator.configureTest(builder, disposable)
+        analysisApiTestConfigurator().configureTest(builder, disposable)
     }
 
     override val serviceRegistrars: List<AnalysisApiTestServiceRegistrar>
-        get() = AnalysisApiFirLibraryBinaryTestConfigurator.serviceRegistrars +
+        get() = analysisApiTestConfigurator().serviceRegistrars +
                 AnalysisApiSymbolLightClassesDecompiledTestServiceRegistrar
 
     override fun createModules(
@@ -33,6 +35,6 @@
         testServices: TestServices,
         project: Project
     ): KtModuleProjectStructure {
-        return AnalysisApiFirLibraryBinaryTestConfigurator.createModules(moduleStructure, testServices, project)
+        return analysisApiTestConfigurator().createModules(moduleStructure, testServices, project)
     }
 }
\ No newline at end of file
diff --git a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/test/configurators/AnalysisApiSymbolLibraryLightClassesDecompiledTestConfigurator.kt b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/test/configurators/AnalysisApiSymbolLibraryLightClassesDecompiledTestConfigurator.kt
new file mode 100644
index 0000000..dfe5f00
--- /dev/null
+++ b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/test/configurators/AnalysisApiSymbolLibraryLightClassesDecompiledTestConfigurator.kt
@@ -0,0 +1,13 @@
+/*
+ * 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.light.classes.symbol.decompiled.test.configurators
+
+import org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators.AnalysisApiFirLibraryBinaryTestConfigurator
+import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiTestConfigurator
+
+object AnalysisApiSymbolLibraryLightClassesDecompiledTestConfigurator : AbstractAnalysisApiSymbolLightClassesDecompiledTestConfigurator() {
+    override fun analysisApiTestConfigurator(): AnalysisApiTestConfigurator = AnalysisApiFirLibraryBinaryTestConfigurator
+}
\ No newline at end of file
diff --git a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/test/configurators/AnalysisApiSymbolSdkLightClassesDecompiledTestConfigurator.kt b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/test/configurators/AnalysisApiSymbolSdkLightClassesDecompiledTestConfigurator.kt
new file mode 100644
index 0000000..1b758d8
--- /dev/null
+++ b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/test/configurators/AnalysisApiSymbolSdkLightClassesDecompiledTestConfigurator.kt
@@ -0,0 +1,13 @@
+/*
+ * 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.light.classes.symbol.decompiled.test.configurators
+
+import org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators.AnalysisApiFirSdkBinaryTestConfigurator
+import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiTestConfigurator
+
+object AnalysisApiSymbolSdkLightClassesDecompiledTestConfigurator : AbstractAnalysisApiSymbolLightClassesDecompiledTestConfigurator() {
+    override fun analysisApiTestConfigurator(): AnalysisApiTestConfigurator = AnalysisApiFirSdkBinaryTestConfigurator
+}
\ No newline at end of file
diff --git a/generators/analysis-api-generator/tests/org/jetbrains/kotlin/generators/tests/analysis/api/lightClasses.kt b/generators/analysis-api-generator/tests/org/jetbrains/kotlin/generators/tests/analysis/api/lightClasses.kt
index 1362d91..c36890a 100644
--- a/generators/analysis-api-generator/tests/org/jetbrains/kotlin/generators/tests/analysis/api/lightClasses.kt
+++ b/generators/analysis-api-generator/tests/org/jetbrains/kotlin/generators/tests/analysis/api/lightClasses.kt
@@ -108,6 +108,7 @@
 
     testClass<AbstractSymbolLightClassesByFqNameForSourceTest>(init = sourceModelInit)
     testClass<AbstractSymbolLightClassesByFqNameForLibraryTest>(init = libraryModelInit)
+    testClass<AbstractSymbolSdkLightClassesByFqNameForLibraryTest>(init = libraryModelInit)
 
     testClass<AbstractSymbolLightClassesParentingByFqNameForSourceTest>(init = sourceModelInit)
     testClass<AbstractSymbolLightClassesParentingByFqNameForLibraryTest>(init = libraryModelInit)