Use FirNamedFunctionSymbol around processOverriddenFunctions
This commit is contained in:
committed by
TeamCityServer
parent
8fedfd2d2a
commit
15021f30ff
@@ -12,6 +12,7 @@ import org.jetbrains.kotlin.fir.resolve.inference.inferenceComponents
|
||||
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
||||
import org.jetbrains.kotlin.fir.scopes.processOverriddenFunctions
|
||||
import org.jetbrains.kotlin.fir.scopes.unsubstitutedScope
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
||||
import org.jetbrains.kotlin.fir.types.ConeInferenceContext
|
||||
import org.jetbrains.kotlin.fir.types.ConeTypeCheckerContext
|
||||
|
||||
@@ -29,6 +30,7 @@ fun FirSimpleFunction.lowestVisibilityAmongOverrides(
|
||||
session: FirSession,
|
||||
scopeSession: ScopeSession
|
||||
): Visibility {
|
||||
val symbol = symbol as? FirNamedFunctionSymbol ?: return visibility
|
||||
val firTypeScope = containingClass.unsubstitutedScope(session, scopeSession, withForcedTypeCalculator = false)
|
||||
var visibility = visibility
|
||||
|
||||
@@ -37,16 +39,7 @@ fun FirSimpleFunction.lowestVisibilityAmongOverrides(
|
||||
firTypeScope.processFunctionsByName(symbol.fir.name) { }
|
||||
|
||||
firTypeScope.processOverriddenFunctions(symbol) {
|
||||
val overriddenVisibility = when (val fir = it.fir) {
|
||||
is FirMemberDeclaration -> fir.visibility
|
||||
is FirPropertyAccessor -> fir.visibility
|
||||
else -> null
|
||||
}
|
||||
|
||||
overriddenVisibility?.let { that ->
|
||||
visibility = that
|
||||
}
|
||||
|
||||
visibility = it.fir.visibility
|
||||
ProcessorAction.NEXT
|
||||
}
|
||||
|
||||
|
||||
+3
-1
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||
import org.jetbrains.kotlin.fir.scopes.FirTypeScope
|
||||
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
||||
import org.jetbrains.kotlin.fir.scopes.processOverriddenFunctions
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
||||
|
||||
class FirDefaultParametersResolver : FirSessionComponent {
|
||||
fun declaresDefaultValue(
|
||||
@@ -23,9 +24,10 @@ class FirDefaultParametersResolver : FirSessionComponent {
|
||||
): Boolean {
|
||||
if (valueParameter.defaultValue != null) return true
|
||||
if (originScope !is FirTypeScope) return false
|
||||
val symbol = function.symbol as? FirNamedFunctionSymbol ?: return false
|
||||
var result = false
|
||||
|
||||
originScope.processOverriddenFunctions(function.symbol) { overridden ->
|
||||
originScope.processOverriddenFunctions(symbol) { overridden ->
|
||||
if (overridden.fir.valueParameters[index].defaultValue != null) {
|
||||
result = true
|
||||
return@processOverriddenFunctions ProcessorAction.STOP
|
||||
|
||||
@@ -56,7 +56,8 @@ class FirSyntheticPropertiesScope(
|
||||
getterSymbol: FirFunctionSymbol<*>,
|
||||
processor: (FirVariableSymbol<*>) -> Unit
|
||||
) {
|
||||
val getter = getterSymbol.fir as? FirSimpleFunction ?: return
|
||||
if (getterSymbol !is FirNamedFunctionSymbol) return
|
||||
val getter = getterSymbol.fir
|
||||
|
||||
if (getter.typeParameters.isNotEmpty()) return
|
||||
if (getter.valueParameters.isNotEmpty()) return
|
||||
@@ -121,7 +122,7 @@ class FirSyntheticPropertiesScope(
|
||||
processor(property.symbol)
|
||||
}
|
||||
|
||||
private fun FirFunctionSymbol<*>.hasJavaOverridden(): Boolean {
|
||||
private fun FirNamedFunctionSymbol.hasJavaOverridden(): Boolean {
|
||||
var result = false
|
||||
baseScope.processOverriddenFunctionsAndSelf(this) {
|
||||
if (it.unwrapFakeOverrides().fir.origin == FirDeclarationOrigin.Enhancement) {
|
||||
|
||||
+5
-2
@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.fir.scopes.unsubstitutedScope
|
||||
import org.jetbrains.kotlin.fir.symbols.StandardClassIds
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
||||
import org.jetbrains.kotlin.fir.typeContext
|
||||
import org.jetbrains.kotlin.fir.types.*
|
||||
import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
|
||||
@@ -125,9 +126,11 @@ fun ConeKotlinType.findContributedInvokeSymbol(
|
||||
FakeOverrideTypeCalculator.DoNothing
|
||||
}
|
||||
val scope = scope(session, scopeSession, fakeOverrideTypeCalculator) ?: return null
|
||||
var declaredInvoke: FirFunctionSymbol<*>? = null
|
||||
var declaredInvoke: FirNamedFunctionSymbol? = null
|
||||
scope.processFunctionsByName(OperatorNameConventions.INVOKE) { functionSymbol ->
|
||||
if (functionSymbol.fir.valueParameters.size == baseInvokeSymbol.fir.valueParameters.size) {
|
||||
if (functionSymbol is FirNamedFunctionSymbol &&
|
||||
functionSymbol.fir.valueParameters.size == baseInvokeSymbol.fir.valueParameters.size
|
||||
) {
|
||||
declaredInvoke = functionSymbol
|
||||
return@processFunctionsByName
|
||||
}
|
||||
|
||||
+7
-6
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.fir.render
|
||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
||||
import org.jetbrains.kotlin.fir.scopes.unsubstitutedScope
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
||||
|
||||
class FirStatusResolver(
|
||||
val session: FirSession,
|
||||
@@ -73,14 +74,14 @@ class FirStatusResolver(
|
||||
@Suppress("RemoveExplicitTypeArguments") // Workaround for KT-42175
|
||||
buildList<FirCallableMemberDeclaration<*>> {
|
||||
val scope = containingClass.unsubstitutedScope(session, scopeSession, withForcedTypeCalculator = false)
|
||||
scope.processFunctionsByName(function.name) {}
|
||||
scope
|
||||
.processDirectOverriddenFunctionsWithBaseScope(function.symbol) { symbol, _ ->
|
||||
(symbol.fir as? FirCallableMemberDeclaration<*>)?.let {
|
||||
this += it
|
||||
}
|
||||
val symbol = function.symbol
|
||||
if (symbol is FirNamedFunctionSymbol) {
|
||||
scope.processFunctionsByName(function.name) {}
|
||||
scope.processDirectOverriddenFunctionsWithBaseScope(symbol) { overriddenSymbol, _ ->
|
||||
this += overriddenSymbol.fir
|
||||
ProcessorAction.NEXT
|
||||
}
|
||||
}
|
||||
}.mapNotNull {
|
||||
it.status as? FirResolvedDeclarationStatus
|
||||
}
|
||||
|
||||
+12
-12
@@ -6,7 +6,6 @@
|
||||
package org.jetbrains.kotlin.fir.scopes.impl
|
||||
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
|
||||
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
|
||||
import org.jetbrains.kotlin.fir.scopes.*
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.*
|
||||
@@ -20,7 +19,7 @@ abstract class AbstractFirUseSiteMemberScope(
|
||||
) : AbstractFirOverrideScope(session, overrideChecker) {
|
||||
|
||||
private val functions = hashMapOf<Name, Collection<FirFunctionSymbol<*>>>()
|
||||
private val directOverriddenFunctions = hashMapOf<FirFunctionSymbol<*>, Collection<FirFunctionSymbol<*>>>()
|
||||
private val directOverriddenFunctions = hashMapOf<FirNamedFunctionSymbol, Collection<FirNamedFunctionSymbol>>()
|
||||
protected val directOverriddenProperties = hashMapOf<FirPropertySymbol, MutableList<FirPropertySymbol>>()
|
||||
|
||||
override fun processFunctionsByName(name: Name, processor: (FirFunctionSymbol<*>) -> Unit) {
|
||||
@@ -37,8 +36,10 @@ abstract class AbstractFirUseSiteMemberScope(
|
||||
val overrideCandidates = mutableSetOf<FirFunctionSymbol<*>>()
|
||||
declaredMemberScope.processFunctionsByName(name) { symbol ->
|
||||
if (symbol.isStatic) return@processFunctionsByName
|
||||
val directOverridden = computeDirectOverridden(symbol)
|
||||
this@AbstractFirUseSiteMemberScope.directOverriddenFunctions[symbol] = directOverridden
|
||||
if (symbol is FirNamedFunctionSymbol) {
|
||||
val directOverridden = computeDirectOverridden(symbol)
|
||||
this@AbstractFirUseSiteMemberScope.directOverriddenFunctions[symbol] = directOverridden
|
||||
}
|
||||
overrideCandidates += symbol
|
||||
add(symbol)
|
||||
}
|
||||
@@ -53,13 +54,12 @@ abstract class AbstractFirUseSiteMemberScope(
|
||||
}
|
||||
}
|
||||
|
||||
private fun computeDirectOverridden(symbol: FirFunctionSymbol<*>): Collection<FirFunctionSymbol<*>> {
|
||||
val result = mutableListOf<FirFunctionSymbol<*>>()
|
||||
val firSimpleFunction = symbol.fir as? FirSimpleFunction ?: return emptyList()
|
||||
private fun computeDirectOverridden(symbol: FirNamedFunctionSymbol): Collection<FirNamedFunctionSymbol> {
|
||||
val result = mutableListOf<FirNamedFunctionSymbol>()
|
||||
val firSimpleFunction = symbol.fir
|
||||
superTypesScope.processFunctionsByName(symbol.callableId.callableName) { superSymbol ->
|
||||
val superFunctionFir = superSymbol.fir
|
||||
if (superFunctionFir is FirSimpleFunction &&
|
||||
overrideChecker.isOverriddenFunction(firSimpleFunction, superFunctionFir)
|
||||
if (superSymbol is FirNamedFunctionSymbol &&
|
||||
overrideChecker.isOverriddenFunction(firSimpleFunction, superSymbol.fir)
|
||||
) {
|
||||
result.add(superSymbol)
|
||||
}
|
||||
@@ -69,8 +69,8 @@ abstract class AbstractFirUseSiteMemberScope(
|
||||
}
|
||||
|
||||
override fun processDirectOverriddenFunctionsWithBaseScope(
|
||||
functionSymbol: FirFunctionSymbol<*>,
|
||||
processor: (FirFunctionSymbol<*>, FirTypeScope) -> ProcessorAction
|
||||
functionSymbol: FirNamedFunctionSymbol,
|
||||
processor: (FirNamedFunctionSymbol, FirTypeScope) -> ProcessorAction
|
||||
): ProcessorAction =
|
||||
doProcessDirectOverriddenCallables(
|
||||
functionSymbol, processor, directOverriddenFunctions, superTypesScope,
|
||||
|
||||
+2
-2
@@ -44,8 +44,8 @@ class FirClassSubstitutionScope(
|
||||
}
|
||||
|
||||
override fun processDirectOverriddenFunctionsWithBaseScope(
|
||||
functionSymbol: FirFunctionSymbol<*>,
|
||||
processor: (FirFunctionSymbol<*>, FirTypeScope) -> ProcessorAction
|
||||
functionSymbol: FirNamedFunctionSymbol,
|
||||
processor: (FirNamedFunctionSymbol, FirTypeScope) -> ProcessorAction
|
||||
): ProcessorAction =
|
||||
processDirectOverriddenWithBaseScope(
|
||||
functionSymbol, processor, FirTypeScope::processDirectOverriddenFunctionsWithBaseScope, substitutionOverrideFunctions
|
||||
|
||||
+2
-2
@@ -108,8 +108,8 @@ class FirDelegatedMemberScope(
|
||||
}
|
||||
|
||||
override fun processDirectOverriddenFunctionsWithBaseScope(
|
||||
functionSymbol: FirFunctionSymbol<*>,
|
||||
processor: (FirFunctionSymbol<*>, FirTypeScope) -> ProcessorAction
|
||||
functionSymbol: FirNamedFunctionSymbol,
|
||||
processor: (FirNamedFunctionSymbol, FirTypeScope) -> ProcessorAction
|
||||
): ProcessorAction {
|
||||
return processDirectOverriddenWithBaseScope(
|
||||
functionSymbol, processor, FirTypeScope::processDirectOverriddenFunctionsWithBaseScope
|
||||
|
||||
+2
-2
@@ -47,8 +47,8 @@ class FirScopeWithFakeOverrideTypeCalculator(
|
||||
}
|
||||
|
||||
override fun processDirectOverriddenFunctionsWithBaseScope(
|
||||
functionSymbol: FirFunctionSymbol<*>,
|
||||
processor: (FirFunctionSymbol<*>, FirTypeScope) -> ProcessorAction
|
||||
functionSymbol: FirNamedFunctionSymbol,
|
||||
processor: (FirNamedFunctionSymbol, FirTypeScope) -> ProcessorAction
|
||||
): ProcessorAction {
|
||||
return delegate.processDirectOverriddenFunctionsWithBaseScope(functionSymbol) { symbol, scope ->
|
||||
updateReturnType(symbol.fir)
|
||||
|
||||
+2
-2
@@ -444,8 +444,8 @@ class FirTypeIntersectionScope private constructor(
|
||||
}
|
||||
|
||||
override fun processDirectOverriddenFunctionsWithBaseScope(
|
||||
functionSymbol: FirFunctionSymbol<*>,
|
||||
processor: (FirFunctionSymbol<*>, FirTypeScope) -> ProcessorAction
|
||||
functionSymbol: FirNamedFunctionSymbol,
|
||||
processor: (FirNamedFunctionSymbol, FirTypeScope) -> ProcessorAction
|
||||
): ProcessorAction =
|
||||
processDirectOverriddenCallablesWithBaseScope(
|
||||
functionSymbol, processor,
|
||||
|
||||
Reference in New Issue
Block a user