From 8f201a0257ec52090db8b29e5512422f79ec1a56 Mon Sep 17 00:00:00 2001 From: Vladimir Sukharev Date: Wed, 3 Jan 2024 19:48:46 +0100 Subject: [PATCH] [FIR] Refactor FirCallableDeclaration.getOverriddenSymbols ^KT-61564 --- .../FirNativeObjCOverrideInitChecker.kt | 18 +----------------- .../kotlin/fir/analysis/checkers/FirHelpers.kt | 10 ++++++++++ .../declaration/FirInlineDeclarationChecker.kt | 13 +------------ 3 files changed, 12 insertions(+), 29 deletions(-) diff --git a/compiler/fir/checkers/checkers.native/src/org/jetbrains/kotlin/fir/analysis/native/checkers/FirNativeObjCOverrideInitChecker.kt b/compiler/fir/checkers/checkers.native/src/org/jetbrains/kotlin/fir/analysis/native/checkers/FirNativeObjCOverrideInitChecker.kt index 95ce051ef87..d7dad9a7963 100644 --- a/compiler/fir/checkers/checkers.native/src/org/jetbrains/kotlin/fir/analysis/native/checkers/FirNativeObjCOverrideInitChecker.kt +++ b/compiler/fir/checkers/checkers.native/src/org/jetbrains/kotlin/fir/analysis/native/checkers/FirNativeObjCOverrideInitChecker.kt @@ -9,21 +9,16 @@ import org.jetbrains.kotlin.diagnostics.DiagnosticReporter import org.jetbrains.kotlin.diagnostics.reportOn import org.jetbrains.kotlin.fir.* import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext +import org.jetbrains.kotlin.fir.analysis.checkers.getOverriddenSymbols import org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirClassChecker -import org.jetbrains.kotlin.fir.analysis.checkers.unsubstitutedScope import org.jetbrains.kotlin.fir.analysis.diagnostics.native.FirNativeErrors import org.jetbrains.kotlin.fir.backend.native.interop.getObjCInitMethod import org.jetbrains.kotlin.fir.backend.native.interop.isKotlinObjCClass import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.utils.isExpect -import org.jetbrains.kotlin.fir.declarations.utils.isOverride import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.fir.resolve.getSuperClassSymbolOrAny -import org.jetbrains.kotlin.fir.resolve.toSymbol -import org.jetbrains.kotlin.fir.scopes.getDirectOverriddenMembers import org.jetbrains.kotlin.fir.symbols.SymbolInternals -import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol -import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirConstructorSymbol import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.name.NativeStandardInteropNames.objCOverrideInitClassId @@ -92,14 +87,3 @@ object FirNativeObjCOverrideInitChecker : FirClassChecker() { } } } - -// copy-pasted from org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirInlineDeclarationChecker -private fun FirCallableDeclaration.getOverriddenSymbols(context: CheckerContext): List> { - if (!this.isOverride) return emptyList() - val classSymbol = this.containingClassLookupTag()?.toSymbol(context.session) as? FirClassSymbol<*> ?: return emptyList() - val scope = classSymbol.unsubstitutedScope(context) - //this call is needed because AbstractFirUseSiteMemberScope collect overrides in it only, - //and not in processDirectOverriddenFunctionsWithBaseScope - scope.processFunctionsByName(this.symbol.name) { } - return scope.getDirectOverriddenMembers(this.symbol, true) -} diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirHelpers.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirHelpers.kt index 7765f61f803..14f8dbd514e 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirHelpers.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirHelpers.kt @@ -734,6 +734,16 @@ fun ConeKotlinType.getInlineClassUnderlyingType(session: FirSession): ConeKotlin return toRegularClassSymbol(session)!!.primaryConstructorSymbol(session)!!.valueParameterSymbols[0].resolvedReturnTypeRef.coneType } +fun FirCallableDeclaration.getOverriddenSymbols(context: CheckerContext): List> { + if (!this.isOverride) return emptyList() + val classSymbol = this.containingClassLookupTag()?.toSymbol(context.session) as? FirClassSymbol<*> ?: return emptyList() + val scope = classSymbol.unsubstitutedScope(context) + //this call is needed because AbstractFirUseSiteMemberScope collect overrides in it only, + //and not in processDirectOverriddenFunctionsWithBaseScope + scope.processFunctionsByName(this.symbol.name) { } + return scope.getDirectOverriddenMembers(this.symbol, true) +} + fun FirNamedFunctionSymbol.directOverriddenFunctions(session: FirSession, scopeSession: ScopeSession): List { val classSymbol = getContainingClassSymbol(session) as? FirClassSymbol ?: return emptyList() val scope = classSymbol.unsubstitutedScope( diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirInlineDeclarationChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirInlineDeclarationChecker.kt index c70552cae74..e00e4e2905e 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirInlineDeclarationChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirInlineDeclarationChecker.kt @@ -17,9 +17,9 @@ import org.jetbrains.kotlin.diagnostics.DiagnosticReporter import org.jetbrains.kotlin.diagnostics.reportOn import org.jetbrains.kotlin.fir.* import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext +import org.jetbrains.kotlin.fir.analysis.checkers.getOverriddenSymbols import org.jetbrains.kotlin.fir.analysis.checkers.inlineCheckerExtension import org.jetbrains.kotlin.fir.analysis.checkers.isInlineOnly -import org.jetbrains.kotlin.fir.analysis.checkers.unsubstitutedScope import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.utils.* @@ -27,7 +27,6 @@ import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.references.* import org.jetbrains.kotlin.fir.resolve.toSymbol import org.jetbrains.kotlin.fir.resolve.transformers.publishedApiEffectiveVisibility -import org.jetbrains.kotlin.fir.scopes.getDirectOverriddenMembers import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.fir.types.* @@ -415,16 +414,6 @@ object FirInlineDeclarationChecker : FirFunctionChecker() { } } - private fun FirCallableDeclaration.getOverriddenSymbols(context: CheckerContext): List> { - if (!this.isOverride) return emptyList() - val classSymbol = this.containingClassLookupTag()?.toSymbol(context.session) as? FirClassSymbol<*> ?: return emptyList() - val scope = classSymbol.unsubstitutedScope(context) - //this call is needed because AbstractFirUseSiteMemberScope collect overrides in it only, - //and not in processDirectOverriddenFunctionsWithBaseScope - scope.processFunctionsByName(this.symbol.name) { } - return scope.getDirectOverriddenMembers(this.symbol, true) - } - private fun checkNothingToInline(function: FirSimpleFunction, context: CheckerContext, reporter: DiagnosticReporter) { if (function.isExpect || function.isSuspend) return if (function.typeParameters.any { it.symbol.isReified }) return