From 8281c166b13326ea4119ee51a28630f608a2a114 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Mon, 19 Sep 2022 16:45:35 +0200 Subject: [PATCH] K2 checkers: extract retrieveDirectOverriddenOf to FirTypeScope.kt --- .../FirNativeObjCNameOverridesChecker.kt | 22 ++----------------- ...FirNativeObjCRefinementOverridesChecker.kt | 22 ++----------------- .../kotlin/fir/scopes/FirTypeScope.kt | 16 ++++++++++++++ 3 files changed, 20 insertions(+), 40 deletions(-) diff --git a/compiler/fir/checkers/checkers.native/src/org/jetbrains/kotlin/fir/analysis/native/checkers/FirNativeObjCNameOverridesChecker.kt b/compiler/fir/checkers/checkers.native/src/org/jetbrains/kotlin/fir/analysis/native/checkers/FirNativeObjCNameOverridesChecker.kt index 55030ce16a5..2cead412620 100644 --- a/compiler/fir/checkers/checkers.native/src/org/jetbrains/kotlin/fir/analysis/native/checkers/FirNativeObjCNameOverridesChecker.kt +++ b/compiler/fir/checkers/checkers.native/src/org/jetbrains/kotlin/fir/analysis/native/checkers/FirNativeObjCNameOverridesChecker.kt @@ -19,8 +19,6 @@ import org.jetbrains.kotlin.fir.isIntersectionOverride import org.jetbrains.kotlin.fir.resolve.toFirRegularClassSymbol import org.jetbrains.kotlin.fir.scopes.* import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol -import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol -import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol object FirNativeObjCNameOverridesChecker : FirClassChecker() { @@ -44,7 +42,7 @@ object FirNativeObjCNameOverridesChecker : FirClassChecker() { context: CheckerContext, reporter: DiagnosticReporter ) { - val overriddenSymbols = firTypeScope.getDirectOverriddenSymbols(memberSymbol) + val overriddenSymbols = firTypeScope.retrieveDirectOverriddenOf(memberSymbol) if (overriddenSymbols.isEmpty()) return val objCNames = overriddenSymbols.map { it.getFirstBaseSymbol(firTypeScope).getObjCNames() } if (!objCNames.allNamesEquals()) { @@ -59,24 +57,8 @@ object FirNativeObjCNameOverridesChecker : FirClassChecker() { } } - private fun FirTypeScope.getDirectOverriddenSymbols(memberSymbol: FirCallableSymbol<*>): List> { - return when (memberSymbol) { - is FirNamedFunctionSymbol -> { - processFunctionsByName(memberSymbol.name) {} - getDirectOverriddenFunctions(memberSymbol) - } - - is FirPropertySymbol -> { - processPropertiesByName(memberSymbol.name) {} - getDirectOverriddenProperties(memberSymbol) - } - - else -> error("unexpected member kind $memberSymbol") - } - } - private fun FirCallableSymbol<*>.getFirstBaseSymbol(firTypeScope: FirTypeScope): FirCallableSymbol<*> { - val overriddenMemberSymbols = firTypeScope.getDirectOverriddenSymbols(this) + val overriddenMemberSymbols = firTypeScope.retrieveDirectOverriddenOf(this) return if (overriddenMemberSymbols.isEmpty()) this else overriddenMemberSymbols.first().getFirstBaseSymbol(firTypeScope) } diff --git a/compiler/fir/checkers/checkers.native/src/org/jetbrains/kotlin/fir/analysis/native/checkers/FirNativeObjCRefinementOverridesChecker.kt b/compiler/fir/checkers/checkers.native/src/org/jetbrains/kotlin/fir/analysis/native/checkers/FirNativeObjCRefinementOverridesChecker.kt index 53a003e2783..ae5a40fa5f1 100644 --- a/compiler/fir/checkers/checkers.native/src/org/jetbrains/kotlin/fir/analysis/native/checkers/FirNativeObjCRefinementOverridesChecker.kt +++ b/compiler/fir/checkers/checkers.native/src/org/jetbrains/kotlin/fir/analysis/native/checkers/FirNativeObjCRefinementOverridesChecker.kt @@ -25,8 +25,6 @@ import org.jetbrains.kotlin.fir.resolve.toFirRegularClassSymbol import org.jetbrains.kotlin.fir.resolve.toSymbol import org.jetbrains.kotlin.fir.scopes.* import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol -import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol -import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol object FirNativeObjCRefinementOverridesChecker : FirClassChecker() { @@ -52,7 +50,7 @@ object FirNativeObjCRefinementOverridesChecker : FirClassChecker() { objCAnnotations: List, swiftAnnotations: List ) { - val overriddenMemberSymbols = firTypeScope.getDirectOverriddenSymbols(memberSymbol) + val overriddenMemberSymbols = firTypeScope.retrieveDirectOverriddenOf(memberSymbol) if (overriddenMemberSymbols.isEmpty()) return var isHiddenFromObjC = objCAnnotations.isNotEmpty() var isRefinedInSwift = swiftAnnotations.isNotEmpty() @@ -71,27 +69,11 @@ object FirNativeObjCRefinementOverridesChecker : FirClassChecker() { } } - private fun FirTypeScope.getDirectOverriddenSymbols(memberSymbol: FirCallableSymbol<*>): List> { - return when (memberSymbol) { - is FirNamedFunctionSymbol -> { - processFunctionsByName(memberSymbol.name) {} - getDirectOverriddenFunctions(memberSymbol) - } - - is FirPropertySymbol -> { - processPropertiesByName(memberSymbol.name) {} - getDirectOverriddenProperties(memberSymbol) - } - - else -> error("unexpected member kind $memberSymbol") - } - } - private fun FirCallableSymbol<*>.inheritsRefinedAnnotations(session: FirSession, firTypeScope: FirTypeScope): Pair { val (hasObjC, hasSwift) = hasRefinedAnnotations(session) if (hasObjC && hasSwift) return true to true // Note: `checkMember` requires all overridden symbols to be either refined or not refined. - val overriddenMemberSymbol = firTypeScope.getDirectOverriddenSymbols(this).firstOrNull() + val overriddenMemberSymbol = firTypeScope.retrieveDirectOverriddenOf(this).firstOrNull() ?: return hasObjC to hasSwift val (inheritsObjC, inheritsSwift) = overriddenMemberSymbol.inheritsRefinedAnnotations(session, firTypeScope) return (hasObjC || inheritsObjC) to (hasSwift || inheritsSwift) diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/scopes/FirTypeScope.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/scopes/FirTypeScope.kt index c40bf9bbd69..26c71580e49 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/scopes/FirTypeScope.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/scopes/FirTypeScope.kt @@ -254,6 +254,22 @@ fun FirTypeScope.getDirectOverriddenProperties( return overriddenProperties.toList() } +fun FirTypeScope.retrieveDirectOverriddenOf(memberSymbol: FirCallableSymbol<*>): List> { + return when (memberSymbol) { + is FirNamedFunctionSymbol -> { + processFunctionsByName(memberSymbol.name) {} + getDirectOverriddenFunctions(memberSymbol) + } + + is FirPropertySymbol -> { + processPropertiesByName(memberSymbol.name) {} + getDirectOverriddenProperties(memberSymbol) + } + + else -> throw IllegalArgumentException("unexpected member kind $memberSymbol") + } +} + private inline fun > MutableCollection.addOverridden( symbol: D, unwrapIntersectionAndSubstitutionOverride: Boolean