[FIR] Refactor FirCallableDeclaration.getOverriddenSymbols
^KT-61564
This commit is contained in:
committed by
Space Team
parent
e166e70916
commit
8f201a0257
+1
-17
@@ -9,21 +9,16 @@ import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
|||||||
import org.jetbrains.kotlin.diagnostics.reportOn
|
import org.jetbrains.kotlin.diagnostics.reportOn
|
||||||
import org.jetbrains.kotlin.fir.*
|
import org.jetbrains.kotlin.fir.*
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
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.declaration.FirClassChecker
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.unsubstitutedScope
|
|
||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.native.FirNativeErrors
|
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.getObjCInitMethod
|
||||||
import org.jetbrains.kotlin.fir.backend.native.interop.isKotlinObjCClass
|
import org.jetbrains.kotlin.fir.backend.native.interop.isKotlinObjCClass
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.utils.isExpect
|
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.ScopeSession
|
||||||
import org.jetbrains.kotlin.fir.resolve.getSuperClassSymbolOrAny
|
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.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.symbols.impl.FirConstructorSymbol
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
import org.jetbrains.kotlin.name.NativeStandardInteropNames.objCOverrideInitClassId
|
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<FirCallableSymbol<out FirCallableDeclaration>> {
|
|
||||||
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)
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -734,6 +734,16 @@ fun ConeKotlinType.getInlineClassUnderlyingType(session: FirSession): ConeKotlin
|
|||||||
return toRegularClassSymbol(session)!!.primaryConstructorSymbol(session)!!.valueParameterSymbols[0].resolvedReturnTypeRef.coneType
|
return toRegularClassSymbol(session)!!.primaryConstructorSymbol(session)!!.valueParameterSymbols[0].resolvedReturnTypeRef.coneType
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun FirCallableDeclaration.getOverriddenSymbols(context: CheckerContext): List<FirCallableSymbol<out FirCallableDeclaration>> {
|
||||||
|
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<FirNamedFunctionSymbol> {
|
fun FirNamedFunctionSymbol.directOverriddenFunctions(session: FirSession, scopeSession: ScopeSession): List<FirNamedFunctionSymbol> {
|
||||||
val classSymbol = getContainingClassSymbol(session) as? FirClassSymbol ?: return emptyList()
|
val classSymbol = getContainingClassSymbol(session) as? FirClassSymbol ?: return emptyList()
|
||||||
val scope = classSymbol.unsubstitutedScope(
|
val scope = classSymbol.unsubstitutedScope(
|
||||||
|
|||||||
+1
-12
@@ -17,9 +17,9 @@ import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
|||||||
import org.jetbrains.kotlin.diagnostics.reportOn
|
import org.jetbrains.kotlin.diagnostics.reportOn
|
||||||
import org.jetbrains.kotlin.fir.*
|
import org.jetbrains.kotlin.fir.*
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
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.inlineCheckerExtension
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.isInlineOnly
|
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.analysis.diagnostics.FirErrors
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.utils.*
|
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.references.*
|
||||||
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.publishedApiEffectiveVisibility
|
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.FirBasedSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.*
|
import org.jetbrains.kotlin.fir.symbols.impl.*
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
@@ -415,16 +414,6 @@ object FirInlineDeclarationChecker : FirFunctionChecker() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun FirCallableDeclaration.getOverriddenSymbols(context: CheckerContext): List<FirCallableSymbol<out FirCallableDeclaration>> {
|
|
||||||
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) {
|
private fun checkNothingToInline(function: FirSimpleFunction, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||||
if (function.isExpect || function.isSuspend) return
|
if (function.isExpect || function.isSuspend) return
|
||||||
if (function.typeParameters.any { it.symbol.isReified }) return
|
if (function.typeParameters.any { it.symbol.isReified }) return
|
||||||
|
|||||||
Reference in New Issue
Block a user