[K/N] Fix local class handling for FirLightTreeNativeIrTextTestGenerated.FirProblems.testInnerClassInAnonymous
Reason: ClassId.toSymbol(session) cannot be used for local classes. ^KT-61564
This commit is contained in:
committed by
Space Team
parent
c5aed2b094
commit
4a97db82b3
+5
-17
@@ -11,22 +11,19 @@ import org.jetbrains.kotlin.fir.declarations.*
|
|||||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
|
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirConstExpression
|
import org.jetbrains.kotlin.fir.expressions.FirConstExpression
|
||||||
import org.jetbrains.kotlin.fir.resolve.*
|
import org.jetbrains.kotlin.fir.resolve.*
|
||||||
import org.jetbrains.kotlin.fir.resolve.providers.toSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
|
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
|
||||||
import org.jetbrains.kotlin.fir.scopes.getDirectOverriddenFunctions
|
import org.jetbrains.kotlin.fir.scopes.getDirectOverriddenFunctions
|
||||||
import org.jetbrains.kotlin.fir.scopes.processAllFunctions
|
import org.jetbrains.kotlin.fir.scopes.processAllFunctions
|
||||||
import org.jetbrains.kotlin.fir.scopes.scopeForClass
|
import org.jetbrains.kotlin.fir.scopes.scopeForClass
|
||||||
import org.jetbrains.kotlin.fir.scopes.unsubstitutedScope
|
import org.jetbrains.kotlin.fir.scopes.unsubstitutedScope
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
|
||||||
import org.jetbrains.kotlin.fir.symbols.SymbolInternals
|
import org.jetbrains.kotlin.fir.symbols.SymbolInternals
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
||||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||||
import org.jetbrains.kotlin.fir.types.classId
|
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.name.NativeStandardInteropNames
|
import org.jetbrains.kotlin.name.NativeStandardInteropNames
|
||||||
import org.jetbrains.kotlin.native.interop.ObjCMethodInfo
|
import org.jetbrains.kotlin.native.interop.ObjCMethodInfo
|
||||||
import org.jetbrains.kotlin.utils.DFS
|
|
||||||
|
|
||||||
|
|
||||||
@OptIn(SymbolInternals::class)
|
@OptIn(SymbolInternals::class)
|
||||||
@@ -119,19 +116,10 @@ private fun FirClassSymbol<*>.isObjCClass(session: FirSession) = classId.package
|
|||||||
it.classId == NativeStandardInteropNames.objCObjectClassId
|
it.classId == NativeStandardInteropNames.objCObjectClassId
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
private fun FirClassSymbol<*>.selfOrAnySuperClass(session: FirSession, predicate: (ConeClassLikeLookupTag) -> Boolean): Boolean =
|
||||||
* almost mimics `IrClass.selfOrAnySuperClass()` apart from using of classsymbol instead of class itself, to use `classId.toSymbol()`
|
predicate(toLookupTag()) ||
|
||||||
*/
|
lookupSuperTypes(listOf(this), lookupInterfaces = true, deep = true, session, substituteTypes = false)
|
||||||
private fun FirClassSymbol<*>.selfOrAnySuperClass(session: FirSession, pred: (FirClassSymbol<*>) -> Boolean): Boolean =
|
.any { predicate(it.lookupTag) }
|
||||||
DFS.ifAny(
|
|
||||||
listOf(this),
|
|
||||||
{ current ->
|
|
||||||
current.resolvedSuperTypes.mapNotNull {
|
|
||||||
(it.classId?.toSymbol(session) as? FirClassLikeSymbol)?.fullyExpandedClass(session)
|
|
||||||
}
|
|
||||||
},
|
|
||||||
pred
|
|
||||||
)
|
|
||||||
|
|
||||||
internal fun FirFunction.getInitMethodIfObjCConstructor(session: FirSession, scopeSession: ScopeSession): FirFunction? =
|
internal fun FirFunction.getInitMethodIfObjCConstructor(session: FirSession, scopeSession: ScopeSession): FirFunction? =
|
||||||
if (this is FirConstructor && isObjCConstructor(session))
|
if (this is FirConstructor && isObjCConstructor(session))
|
||||||
|
|||||||
Reference in New Issue
Block a user