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

Support for complex cases with multiple substitution overrides.

#KT-64276 Fixed
This commit is contained in:
Anastasia.Nekrasova
2024-02-16 14:06:23 +02:00
committed by Space Team
parent d69240a2d5
commit fd4f6c90c7
5 changed files with 42 additions and 2 deletions
@@ -75,7 +75,8 @@ object FirNativeObjCNameUtilities {
context: CheckerContext,
reporter: DiagnosticReporter
) {
val overriddenSymbols = firTypeScope.retrieveDirectOverriddenOf(memberSymbol).map { it.originalForSubstitutionOverride ?: it }
val overriddenSymbols =
firTypeScope.retrieveDirectOverriddenOf(memberSymbol).map { it.unwrapSubstitutionOverrides() }
if (overriddenSymbols.isEmpty()) return
val objCNames = overriddenSymbols.map { it.getFirstBaseSymbol(context).getObjCNames(context.session) }
if (!objCNames.allNamesEquals()) {
@@ -96,7 +97,7 @@ object FirNativeObjCNameUtilities {
val session = context.session
val ownScope = containingClassLookupTag()?.toSymbol(session)?.fullyExpandedClass(session)?.unsubstitutedScope(context)
?: return this
val overriddenMemberSymbols = ownScope.retrieveDirectOverriddenOf(this).map { it.originalForSubstitutionOverride ?: it }
val overriddenMemberSymbols = ownScope.retrieveDirectOverriddenOf(this).map { it.unwrapSubstitutionOverrides() }
return if (overriddenMemberSymbols.isEmpty()) this else overriddenMemberSymbols.first().getFirstBaseSymbol(context)
}