fixup! WIP - Unified symbol providers
diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/symbolProviders/LLModuleWithDependenciesSymbolProvider.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/symbolProviders/LLModuleWithDependenciesSymbolProvider.kt
index 3d60d77..3205fae 100644
--- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/symbolProviders/LLModuleWithDependenciesSymbolProvider.kt
+++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/symbolProviders/LLModuleWithDependenciesSymbolProvider.kt
@@ -156,22 +156,27 @@
     //               cache and filter the result then fall back to indices (probably the smartest move). Currently, this is a naive
     //               implementation which essentially duplicates the unified symbol provider!
     //               `dependenciesSymbolProvider` is used heavily in dangling file sessions as the dependency symbol provider.
-    val dependenciesSymbolProvider: FirSymbolProvider by lazy(LazyThreadSafetyMode.PUBLICATION) {
-        LLUnifiedSymbolProvider(session, module.project, dependencyProviders, emptyList(), dependencyProviders)
-    }
-
-    /* val dependenciesSymbolProvider: FirSymbolProvider = object : FirSymbolProvider(session) {
-        // Can't use composite symbol provider because dependency providers need to be accessed lazily.
-
-        override val symbolNamesProvider: FirSymbolNamesProvider by lazy(LazyThreadSafetyMode.PUBLICATION) {
-            FirCompositeCachedSymbolNamesProvider(
+    val dependenciesSymbolProvider: FirSymbolProvider = object : FirSymbolProvider(session) {
+        /**
+         * [dependenciesSymbolProvider] is accessed during session creation, so the calculation of the [dependencyProviders] must be lazy.
+         * Hence, we cannot expose the unified symbol provider directly as the [dependenciesSymbolProvider].
+         */
+        private val underlyingSymbolProvider by lazy(LazyThreadSafetyMode.PUBLICATION) {
+            LLUnifiedSymbolProvider(
                 session,
-                dependencyProviders.map { it.symbolNamesProvider },
+                module.project,
+                dependencyProviders,
+                emptyList(),
+                dependencyProviders,
             )
         }
 
+        override val symbolNamesProvider: FirSymbolNamesProvider by lazy(LazyThreadSafetyMode.PUBLICATION) {
+            underlyingSymbolProvider.symbolNamesProvider
+        }
+
         override fun getClassLikeSymbolByClassId(classId: ClassId): FirClassLikeSymbol<*>? {
-            return dependencyProviders.firstNotNullOfOrNull { it.getClassLikeSymbolByClassId(classId) }
+            return underlyingSymbolProvider.getClassLikeSymbolByClassId(classId)
         }
 
         @FirSymbolProviderInternals
@@ -180,7 +185,7 @@
             packageFqName: FqName,
             name: Name,
         ) {
-            dependencyProviders.forEach { it.getTopLevelCallableSymbolsTo(destination, packageFqName, name) }
+            underlyingSymbolProvider.getTopLevelCallableSymbolsTo(destination, packageFqName, name)
         }
 
         @FirSymbolProviderInternals
@@ -189,7 +194,7 @@
             packageFqName: FqName,
             name: Name,
         ) {
-            dependencyProviders.forEach { it.getTopLevelFunctionSymbolsTo(destination, packageFqName, name) }
+            underlyingSymbolProvider.getTopLevelFunctionSymbolsTo(destination, packageFqName, name)
         }
 
         @FirSymbolProviderInternals
@@ -198,11 +203,11 @@
             packageFqName: FqName,
             name: Name,
         ) {
-            dependencyProviders.forEach { it.getTopLevelPropertySymbolsTo(destination, packageFqName, name) }
+            underlyingSymbolProvider.getTopLevelPropertySymbolsTo(destination, packageFqName, name)
         }
 
-        override fun hasPackage(fqName: FqName): Boolean = dependencyProviders.any { it.hasPackage(fqName) }
-    } */
+        override fun hasPackage(fqName: FqName): Boolean = underlyingSymbolProvider.hasPackage(fqName)
+    }
 }
 
 // TODO (marco): Document. Basic idea: combine own providers and dependency providers into a single unified symbol provider.