[K/N][K2] K2 behavioral difference with inconsistent inheritance of ObjCName

When a declaration with an ObjC annotation is stored in a different
module, the annotation arguments are not resolved by default. This leads
to a bug in the checker. Before attempting to find the objCName, it is
necessary to resolve the annotation first.

#KT-64276
This commit is contained in:
Anastasia.Nekrasova
2024-02-12 19:19:29 +03:00
committed by Space Team
parent 700432e111
commit bb8c7dd04c
5 changed files with 67 additions and 8 deletions
@@ -21,6 +21,7 @@ import org.jetbrains.kotlin.fir.scopes.retrieveDirectOverriddenOf
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
@@ -30,15 +31,17 @@ object FirNativeObjCNameUtilities {
private val swiftNameName = Name.identifier("swiftName")
private val exactName = Name.identifier("exact")
fun FirBasedSymbol<*>.getObjCNames(session: FirSession): List<ObjCName?> = when (this) {
is FirFunctionSymbol<*> -> buildList {
add((this@getObjCNames as FirBasedSymbol<*>).getObjCName(session))
add(resolvedReceiverTypeRef?.getObjCName(session))
add(receiverParameter?.getObjCName(session))
valueParameterSymbols.forEach { add(it.getObjCName(session)) }
fun FirBasedSymbol<*>.getObjCNames(session: FirSession): List<ObjCName?> {
lazyResolveToPhase(FirResolvePhase.ANNOTATION_ARGUMENTS)
return when (this) {
is FirFunctionSymbol<*> -> buildList {
add((this@getObjCNames as FirBasedSymbol<*>).getObjCName(session))
add(resolvedReceiverTypeRef?.getObjCName(session))
add(receiverParameter?.getObjCName(session))
valueParameterSymbols.forEach { add(it.getObjCName(session)) }
}
else -> listOf(getObjCName(session))
}
else -> listOf(getObjCName(session))
}
private fun FirAnnotationContainer.getObjCName(session: FirSession): ObjCName? =