[fir2ir] Unwrap type aliases in containing 'IrClass' lookup

Type aliases may appear in containing 'ClassId's for callables,
for instance, if a common class is implemented as a type alias.
diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrClassifierStorage.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrClassifierStorage.kt
index 0e9c51c..35eacaf 100644
--- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrClassifierStorage.kt
+++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrClassifierStorage.kt
@@ -6,6 +6,7 @@
 package org.jetbrains.kotlin.fir.backend
 
 import org.jetbrains.kotlin.descriptors.*
+import org.jetbrains.kotlin.fir.analysis.checkers.toRegularClassSymbol
 import org.jetbrains.kotlin.fir.containingClassForLocalAttr
 import org.jetbrains.kotlin.fir.declarations.*
 import org.jetbrains.kotlin.fir.declarations.utils.*
@@ -18,8 +19,7 @@
 import org.jetbrains.kotlin.fir.resolve.toSymbol
 import org.jetbrains.kotlin.fir.scopes.unsubstitutedScope
 import org.jetbrains.kotlin.fir.symbols.*
-import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
-import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
+import org.jetbrains.kotlin.fir.symbols.impl.*
 import org.jetbrains.kotlin.fir.types.FirTypeRef
 import org.jetbrains.kotlin.fir.types.toLookupTag
 import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
@@ -585,16 +585,23 @@
         )
     }
 
-    fun findIrClass(lookupTag: ConeClassLikeLookupTag): IrClass? {
+    fun findContainingIrClass(lookupTag: ConeClassLikeLookupTag): IrClass? {
         return if (lookupTag.classId.isLocal) {
             getCachedLocalClass(lookupTag)
         } else {
             val firSymbol = lookupTag.toSymbol(session)
             if (firSymbol is FirClassSymbol) {
-                getIrClassSymbol(firSymbol).owner
-            } else {
-                null
+                return getIrClassSymbol(firSymbol).owner
             }
+
+            if (firSymbol is FirTypeAliasSymbol) {
+                val expandedClassSymbol = firSymbol.resolvedExpandedTypeRef.toRegularClassSymbol(session)
+                if (expandedClassSymbol != null) {
+                    return getIrClassSymbol(expandedClassSymbol).owner
+                }
+            }
+
+            return null
         }
     }
 
diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt
index 2ae262e..6725f6a 100644
--- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt
+++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt
@@ -278,7 +278,7 @@
         firOrigin: FirDeclarationOrigin
     ): IrDeclarationParent? {
         if (parentLookupTag != null) {
-            return classifierStorage.findIrClass(parentLookupTag)
+            return classifierStorage.findContainingIrClass(parentLookupTag)
         }
 
         val parentPackage = when (firBasedSymbol) {
@@ -1815,7 +1815,7 @@
         return when (val firDeclaration = firVariableSymbol.fir) {
             is FirEnumEntry -> {
                 classifierStorage.getCachedIrEnumEntry(firDeclaration)?.let { return it.symbol }
-                val irParentClass = firDeclaration.containingClassLookupTag()?.let { classifierStorage.findIrClass(it) }
+                val irParentClass = firDeclaration.containingClassLookupTag()?.let { classifierStorage.findContainingIrClass(it) }
 
                 val firProviderForSymbol = firVariableSymbol.moduleData.session.firProvider
                 val containingFile = firProviderForSymbol.getFirCallableContainerFile(firVariableSymbol)