[K/N] Implement FirNativeObjCOutletChecker and FirNativeObjCActionChecker

^KT-61564
This commit is contained in:
Vladimir Sukharev
2023-11-12 19:45:04 +01:00
committed by Space Team
parent 08bc0a6bd0
commit c5aed2b094
17 changed files with 213 additions and 19 deletions
@@ -10,12 +10,9 @@ import org.jetbrains.kotlin.fir.containingClassLookupTag
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
import org.jetbrains.kotlin.fir.expressions.FirConstExpression
import org.jetbrains.kotlin.fir.resolve.ScopeSession
import org.jetbrains.kotlin.fir.resolve.getContainingClass
import org.jetbrains.kotlin.fir.resolve.getContainingDeclaration
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.toSymbol
import org.jetbrains.kotlin.fir.scopes.getDirectOverriddenFunctions
import org.jetbrains.kotlin.fir.scopes.processAllFunctions
import org.jetbrains.kotlin.fir.scopes.scopeForClass
@@ -24,6 +21,7 @@ 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.FirNamedFunctionSymbol
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.NativeStandardInteropNames
@@ -154,3 +152,10 @@ internal fun FirClassSymbol<*>.isExternalObjCClass(session: FirSession): Boolean
fun FirClassSymbol<*>.parentsWithSelf(session: FirSession): Sequence<FirClassLikeDeclaration> {
return generateSequence<FirClassLikeDeclaration>(fir) { it.getContainingDeclaration(session) }
}
fun FirClassSymbol<*>.isKotlinObjCClass(session: FirSession): Boolean = isObjCClass(session) && !isExternalObjCClass(session)
fun FirTypeRef.isObjCObjectType(session: FirSession): Boolean {
val symbol = firClassLike(session)?.symbol
return symbol is FirClassSymbol && symbol.isObjCClass(session)
}