Use FirNamedFunctionSymbol in FirScope.processFunctionsByName
This commit is contained in:
committed by
TeamCityServer
parent
2dfba10d84
commit
5daa406cdf
@@ -288,13 +288,8 @@ private fun FirRegularClass.findSingleAbstractMethodByNames(
|
||||
|
||||
classUseSiteMemberScope.processFunctionsByName(candidateName) { functionSymbol ->
|
||||
val firFunction = functionSymbol.fir
|
||||
require(firFunction is FirSimpleFunction) {
|
||||
"${functionSymbol.callableId
|
||||
.callableName} is expected to be _root_ide_package_.org.jetbrains.kotlin.fir.declarations.FirSimpleFunction, but ${functionSymbol::class} was found"
|
||||
}
|
||||
|
||||
if (firFunction.modality != Modality.ABSTRACT || firFunction
|
||||
.isPublicInObject(checkOnlyName = false)
|
||||
if (firFunction.modality != Modality.ABSTRACT ||
|
||||
firFunction.isPublicInObject(checkOnlyName = false)
|
||||
) return@processFunctionsByName
|
||||
|
||||
if (resultMethod != null) {
|
||||
|
||||
@@ -9,7 +9,6 @@ import org.jetbrains.kotlin.descriptors.ClassKind
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.fir.declarations.FirCallableMemberDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.FirProperty
|
||||
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
|
||||
import org.jetbrains.kotlin.fir.declarations.modality
|
||||
import org.jetbrains.kotlin.fir.dispatchReceiverClassOrNull
|
||||
import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
|
||||
@@ -124,7 +123,7 @@ private inline fun BodyResolveComponents.resolveSupertypesByMembers(
|
||||
private fun BodyResolveComponents.getFunctionMembers(type: ConeKotlinType, name: Name): Collection<FirCallableMemberDeclaration<*>> =
|
||||
buildList {
|
||||
type.scope(session, scopeSession, FakeOverrideTypeCalculator.DoNothing)?.processFunctionsByName(name) {
|
||||
addIfNotNull(it.fir as? FirSimpleFunction)
|
||||
add(it.fir)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+3
-5
@@ -124,10 +124,10 @@ fun ConeKotlinType.findSubtypeOfNonSuspendFunctionalType(session: FirSession, ex
|
||||
}
|
||||
}
|
||||
|
||||
fun ConeClassLikeType.findBaseInvokeSymbol(session: FirSession, scopeSession: ScopeSession): FirFunctionSymbol<*>? {
|
||||
fun ConeClassLikeType.findBaseInvokeSymbol(session: FirSession, scopeSession: ScopeSession): FirNamedFunctionSymbol? {
|
||||
require(this.isBuiltinFunctionalType(session))
|
||||
val functionN = (lookupTag.toSymbol(session)?.fir as? FirClass<*>) ?: return null
|
||||
var baseInvokeSymbol: FirFunctionSymbol<*>? = null
|
||||
var baseInvokeSymbol: FirNamedFunctionSymbol? = null
|
||||
functionN.unsubstitutedScope(
|
||||
session,
|
||||
scopeSession,
|
||||
@@ -155,9 +155,7 @@ fun ConeKotlinType.findContributedInvokeSymbol(
|
||||
val scope = scope(session, scopeSession, fakeOverrideTypeCalculator) ?: return null
|
||||
var declaredInvoke: FirNamedFunctionSymbol? = null
|
||||
scope.processFunctionsByName(OperatorNameConventions.INVOKE) { functionSymbol ->
|
||||
if (functionSymbol is FirNamedFunctionSymbol &&
|
||||
functionSymbol.fir.valueParameters.size == baseInvokeSymbol.fir.valueParameters.size
|
||||
) {
|
||||
if (functionSymbol.fir.valueParameters.size == baseInvokeSymbol.fir.valueParameters.size) {
|
||||
declaredInvoke = functionSymbol
|
||||
return@processFunctionsByName
|
||||
}
|
||||
|
||||
-2
@@ -8,12 +8,10 @@ package org.jetbrains.kotlin.fir.scopes.impl
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.declarations.builder.FirSimpleFunctionBuilder
|
||||
import org.jetbrains.kotlin.fir.scopes.FirOverrideChecker
|
||||
import org.jetbrains.kotlin.fir.scopes.FirTypeScope
|
||||
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
||||
|
||||
abstract class AbstractFirOverrideScope(
|
||||
val session: FirSession,
|
||||
|
||||
+9
-15
@@ -18,11 +18,11 @@ abstract class AbstractFirUseSiteMemberScope(
|
||||
protected val declaredMemberScope: FirScope
|
||||
) : AbstractFirOverrideScope(session, overrideChecker) {
|
||||
|
||||
private val functions = hashMapOf<Name, Collection<FirFunctionSymbol<*>>>()
|
||||
private val functions = hashMapOf<Name, Collection<FirNamedFunctionSymbol>>()
|
||||
private val directOverriddenFunctions = hashMapOf<FirNamedFunctionSymbol, Collection<FirNamedFunctionSymbol>>()
|
||||
protected val directOverriddenProperties = hashMapOf<FirPropertySymbol, MutableList<FirPropertySymbol>>()
|
||||
|
||||
override fun processFunctionsByName(name: Name, processor: (FirFunctionSymbol<*>) -> Unit) {
|
||||
override fun processFunctionsByName(name: Name, processor: (FirNamedFunctionSymbol) -> Unit) {
|
||||
functions.getOrPut(name) {
|
||||
doProcessFunctions(name)
|
||||
}.forEach {
|
||||
@@ -32,24 +32,20 @@ abstract class AbstractFirUseSiteMemberScope(
|
||||
|
||||
private fun doProcessFunctions(
|
||||
name: Name
|
||||
): Collection<FirFunctionSymbol<*>> = mutableListOf<FirFunctionSymbol<*>>().apply {
|
||||
): Collection<FirNamedFunctionSymbol> = mutableListOf<FirNamedFunctionSymbol>().apply {
|
||||
val overrideCandidates = mutableSetOf<FirFunctionSymbol<*>>()
|
||||
declaredMemberScope.processFunctionsByName(name) { symbol ->
|
||||
if (symbol.isStatic) return@processFunctionsByName
|
||||
if (symbol is FirNamedFunctionSymbol) {
|
||||
val directOverridden = computeDirectOverridden(symbol)
|
||||
this@AbstractFirUseSiteMemberScope.directOverriddenFunctions[symbol] = directOverridden
|
||||
}
|
||||
val directOverridden = computeDirectOverridden(symbol)
|
||||
this@AbstractFirUseSiteMemberScope.directOverriddenFunctions[symbol] = directOverridden
|
||||
overrideCandidates += symbol
|
||||
add(symbol)
|
||||
}
|
||||
|
||||
superTypesScope.processFunctionsByName(name) {
|
||||
if (it !is FirConstructorSymbol) {
|
||||
val overriddenBy = it.getOverridden(overrideCandidates)
|
||||
if (overriddenBy == null) {
|
||||
add(it)
|
||||
}
|
||||
val overriddenBy = it.getOverridden(overrideCandidates)
|
||||
if (overriddenBy == null) {
|
||||
add(it)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -58,9 +54,7 @@ abstract class AbstractFirUseSiteMemberScope(
|
||||
val result = mutableListOf<FirNamedFunctionSymbol>()
|
||||
val firSimpleFunction = symbol.fir
|
||||
superTypesScope.processFunctionsByName(symbol.callableId.callableName) { superSymbol ->
|
||||
if (superSymbol is FirNamedFunctionSymbol &&
|
||||
overrideChecker.isOverriddenFunction(firSimpleFunction, superSymbol.fir)
|
||||
) {
|
||||
if (overrideChecker.isOverriddenFunction(firSimpleFunction, superSymbol.fir)) {
|
||||
result.add(superSymbol)
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -88,11 +88,11 @@ abstract class FirAbstractImportingScope(
|
||||
processor: (FirCallableSymbol<*>) -> Unit
|
||||
)
|
||||
|
||||
final override fun processFunctionsByName(name: Name, processor: (FirFunctionSymbol<*>) -> Unit) {
|
||||
final override fun processFunctionsByName(name: Name, processor: (FirNamedFunctionSymbol) -> Unit) {
|
||||
return processCallables(
|
||||
name,
|
||||
TowerScopeLevel.Token.Functions
|
||||
) { if (it is FirFunctionSymbol<*>) processor(it) }
|
||||
) { if (it is FirNamedFunctionSymbol) processor(it) }
|
||||
}
|
||||
|
||||
final override fun processPropertiesByName(name: Name, processor: (FirVariableSymbol<*>) -> Unit) {
|
||||
|
||||
+1
-1
@@ -45,7 +45,7 @@ class FirClassDeclaredMemberScope(
|
||||
result
|
||||
}
|
||||
|
||||
override fun processFunctionsByName(name: Name, processor: (FirFunctionSymbol<*>) -> Unit) {
|
||||
override fun processFunctionsByName(name: Name, processor: (FirNamedFunctionSymbol) -> Unit) {
|
||||
if (name == CONSTRUCTOR_NAME) return
|
||||
processCallables(name, processor)
|
||||
}
|
||||
|
||||
+4
-8
@@ -28,13 +28,13 @@ class FirClassSubstitutionScope(
|
||||
private val makeExpect: Boolean = false
|
||||
) : FirTypeScope() {
|
||||
|
||||
private val substitutionOverrideFunctions = mutableMapOf<FirFunctionSymbol<*>, FirFunctionSymbol<*>>()
|
||||
private val substitutionOverrideFunctions = mutableMapOf<FirNamedFunctionSymbol, FirNamedFunctionSymbol>()
|
||||
private val substitutionOverrideConstructors = mutableMapOf<FirConstructorSymbol, FirConstructorSymbol>()
|
||||
private val substitutionOverrideVariables = mutableMapOf<FirVariableSymbol<*>, FirVariableSymbol<*>>()
|
||||
|
||||
private val newOwnerClassId = dispatchReceiverTypeForSubstitutedMembers.lookupTag.classId
|
||||
|
||||
override fun processFunctionsByName(name: Name, processor: (FirFunctionSymbol<*>) -> Unit) {
|
||||
override fun processFunctionsByName(name: Name, processor: (FirNamedFunctionSymbol) -> Unit) {
|
||||
useSiteMemberScope.processFunctionsByName(name) process@{ original ->
|
||||
val function = substitutionOverrideFunctions.getOrPut(original) { createSubstitutionOverrideFunction(original) }
|
||||
processor(function)
|
||||
@@ -110,13 +110,9 @@ class FirClassSubstitutionScope(
|
||||
return substitutor.substituteOrNull(this)
|
||||
}
|
||||
|
||||
private fun createSubstitutionOverrideFunction(original: FirFunctionSymbol<*>): FirFunctionSymbol<*> {
|
||||
private fun createSubstitutionOverrideFunction(original: FirNamedFunctionSymbol): FirNamedFunctionSymbol {
|
||||
if (substitutor == ConeSubstitutor.Empty) return original
|
||||
val member = when (original) {
|
||||
is FirNamedFunctionSymbol -> original.fir
|
||||
is FirConstructorSymbol -> return original
|
||||
else -> throw AssertionError("Should not be here")
|
||||
}
|
||||
val member = original.fir
|
||||
if (skipPrivateMembers && member.visibility == Visibilities.Private) return original
|
||||
|
||||
val (newTypeParameters, newReceiverType, newReturnType, newSubstitutor, fakeOverrideSubstitution) = createSubstitutedData(member)
|
||||
|
||||
+3
-3
@@ -33,9 +33,9 @@ class FirDelegatedMemberScope(
|
||||
private val dispatchReceiverType = containingClass.defaultType()
|
||||
private val overrideChecker = FirStandardOverrideChecker(session)
|
||||
|
||||
override fun processFunctionsByName(name: Name, processor: (FirFunctionSymbol<*>) -> Unit) {
|
||||
override fun processFunctionsByName(name: Name, processor: (FirNamedFunctionSymbol) -> Unit) {
|
||||
useSiteScope.processFunctionsByName(name) processor@{ functionSymbol ->
|
||||
if (functionSymbol !is FirNamedFunctionSymbol || functionSymbol.fir.isPublicInAny()) {
|
||||
if (functionSymbol.fir.isPublicInAny()) {
|
||||
processor(functionSymbol)
|
||||
return@processor
|
||||
}
|
||||
@@ -46,7 +46,7 @@ class FirDelegatedMemberScope(
|
||||
return@processor
|
||||
}
|
||||
|
||||
if (declaredMemberScope.getFunctions(name).any { it is FirNamedFunctionSymbol && overrideChecker.isOverriddenFunction(it.fir, original) }) {
|
||||
if (declaredMemberScope.getFunctions(name).any { overrideChecker.isOverriddenFunction(it.fir, original) }) {
|
||||
processor(functionSymbol)
|
||||
return@processor
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@ import org.jetbrains.kotlin.name.Name
|
||||
|
||||
class FirLocalScope private constructor(
|
||||
val properties: PersistentMap<Name, FirVariableSymbol<*>>,
|
||||
val functions: PersistentMultimap<Name, FirFunctionSymbol<*>>,
|
||||
val functions: PersistentMultimap<Name, FirNamedFunctionSymbol>,
|
||||
val classes: PersistentMap<Name, FirRegularClassSymbol>
|
||||
) : FirScope(), FirContainingNamesAwareScope {
|
||||
constructor() : this(persistentMapOf(), PersistentMultimap(), persistentMapOf())
|
||||
@@ -50,7 +50,7 @@ class FirLocalScope private constructor(
|
||||
)
|
||||
}
|
||||
|
||||
override fun processFunctionsByName(name: Name, processor: (FirFunctionSymbol<*>) -> Unit) {
|
||||
override fun processFunctionsByName(name: Name, processor: (FirNamedFunctionSymbol) -> Unit) {
|
||||
for (function in functions[name]) {
|
||||
processor(function)
|
||||
}
|
||||
|
||||
+1
-1
@@ -20,7 +20,7 @@ private class FirNestedClassifierScopeWithSubstitution(
|
||||
private val substitutor: ConeSubstitutor
|
||||
) : FirScope() {
|
||||
|
||||
override fun processFunctionsByName(name: Name, processor: (FirFunctionSymbol<*>) -> Unit) {
|
||||
override fun processFunctionsByName(name: Name, processor: (FirNamedFunctionSymbol) -> Unit) {
|
||||
scope.processFunctionsByName(name, processor)
|
||||
}
|
||||
|
||||
|
||||
+1
-5
@@ -20,12 +20,8 @@ class FirObjectImportedCallableScope(
|
||||
private val importedClassId: ClassId,
|
||||
private val objectUseSiteScope: FirTypeScope
|
||||
) : FirScope(), FirContainingNamesAwareScope {
|
||||
override fun processFunctionsByName(name: Name, processor: (FirFunctionSymbol<*>) -> Unit) {
|
||||
override fun processFunctionsByName(name: Name, processor: (FirNamedFunctionSymbol) -> Unit) {
|
||||
objectUseSiteScope.processFunctionsByName(name) wrapper@{ symbol ->
|
||||
if (symbol !is FirNamedFunctionSymbol) {
|
||||
processor(symbol)
|
||||
return@wrapper
|
||||
}
|
||||
val function = symbol.fir
|
||||
val syntheticFunction = buildSimpleFunctionCopy(function) {
|
||||
origin = FirDeclarationOrigin.ImportedFromObject
|
||||
|
||||
+2
-2
@@ -6,12 +6,12 @@
|
||||
package org.jetbrains.kotlin.fir.scopes.impl
|
||||
|
||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
class FirOnlyCallablesScope(val delegate: FirScope) : FirScope() {
|
||||
override fun processFunctionsByName(name: Name, processor: (FirFunctionSymbol<*>) -> Unit) {
|
||||
override fun processFunctionsByName(name: Name, processor: (FirNamedFunctionSymbol) -> Unit) {
|
||||
return delegate.processFunctionsByName(name, processor)
|
||||
}
|
||||
|
||||
|
||||
+2
-5
@@ -10,10 +10,7 @@ import org.jetbrains.kotlin.fir.resolve.firSymbolProvider
|
||||
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.ensureResolvedForCalls
|
||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassifierSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.*
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
@@ -39,7 +36,7 @@ class FirPackageMemberScope(val fqName: FqName, val session: FirSession) : FirSc
|
||||
}
|
||||
}
|
||||
|
||||
override fun processFunctionsByName(name: Name, processor: (FirFunctionSymbol<*>) -> Unit) {
|
||||
override fun processFunctionsByName(name: Name, processor: (FirNamedFunctionSymbol) -> Unit) {
|
||||
processCallables(name, processor)
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -24,7 +24,7 @@ class FirScopeWithFakeOverrideTypeCalculator(
|
||||
delegate.processClassifiersByNameWithSubstitution(name, processor)
|
||||
}
|
||||
|
||||
override fun processFunctionsByName(name: Name, processor: (FirFunctionSymbol<*>) -> Unit) {
|
||||
override fun processFunctionsByName(name: Name, processor: (FirNamedFunctionSymbol) -> Unit) {
|
||||
delegate.processFunctionsByName(name) {
|
||||
updateReturnType(it.fir)
|
||||
processor(it)
|
||||
|
||||
@@ -10,9 +10,8 @@ import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
|
||||
import org.jetbrains.kotlin.fir.declarations.isStatic
|
||||
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
|
||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||
import org.jetbrains.kotlin.fir.scopes.getContainingCallableNamesIfPresent
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassifierSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
@@ -21,7 +20,7 @@ class FirStaticScope(private val delegateScope: FirScope) : FirScope() {
|
||||
delegateScope.processClassifiersByNameWithSubstitution(name, processor)
|
||||
}
|
||||
|
||||
override fun processFunctionsByName(name: Name, processor: (FirFunctionSymbol<*>) -> Unit) {
|
||||
override fun processFunctionsByName(name: Name, processor: (FirNamedFunctionSymbol) -> Unit) {
|
||||
delegateScope.processFunctionsByName(name) {
|
||||
if ((it.fir as? FirSimpleFunction)?.isStatic == true) {
|
||||
processor(it)
|
||||
|
||||
+1
-1
@@ -40,7 +40,7 @@ class FirTypeIntersectionScope private constructor(
|
||||
|
||||
private val intersectionOverrides: MutableMap<FirCallableSymbol<*>, MemberWithBaseScope<out FirCallableSymbol<*>>> = mutableMapOf()
|
||||
|
||||
override fun processFunctionsByName(name: Name, processor: (FirFunctionSymbol<*>) -> Unit) {
|
||||
override fun processFunctionsByName(name: Name, processor: (FirNamedFunctionSymbol) -> Unit) {
|
||||
if (!processCallablesByName(name, processor, absentFunctions, FirScope::processFunctionsByName)) {
|
||||
super.processFunctionsByName(name, processor)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user