diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassUseSiteMemberScope.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassUseSiteMemberScope.kt index 76839840e50..e592d617b42 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassUseSiteMemberScope.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassUseSiteMemberScope.kt @@ -53,10 +53,12 @@ class JavaClassUseSiteMemberScope( private val canUseSpecialGetters: Boolean by lazy { !klass.hasKotlinSuper(session) } - override fun getCallableNames(): Set { - return declaredMemberScope.getContainingCallableNamesIfPresent() + superTypesScope.getCallableNames() + private val callableNamesCached by lazy(LazyThreadSafetyMode.PUBLICATION) { + declaredMemberScope.getContainingCallableNamesIfPresent() + superTypesScope.getCallableNames() } + override fun getCallableNames(): Set = callableNamesCached + override fun getClassifierNames(): Set { return declaredMemberScope.getContainingClassifierNamesIfPresent() + superTypesScope.getClassifierNames() } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/AbstractFirUseSiteMemberScope.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/AbstractFirUseSiteMemberScope.kt index e1c2e6d99f7..dd4aa577fb5 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/AbstractFirUseSiteMemberScope.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/AbstractFirUseSiteMemberScope.kt @@ -22,6 +22,10 @@ abstract class AbstractFirUseSiteMemberScope( protected val directOverriddenFunctions = hashMapOf>() protected val directOverriddenProperties = hashMapOf>() + private val callableNamesCached by lazy(LazyThreadSafetyMode.PUBLICATION) { + declaredMemberScope.getContainingCallableNamesIfPresent() + superTypesScope.getCallableNames() + } + override fun processFunctionsByName(name: Name, processor: (FirNamedFunctionSymbol) -> Unit) { functions.getOrPut(name) { doProcessFunctions(name) @@ -89,9 +93,7 @@ abstract class AbstractFirUseSiteMemberScope( declaredMemberScope.processDeclaredConstructors(processor) } - override fun getCallableNames(): Set { - return declaredMemberScope.getContainingCallableNamesIfPresent() + superTypesScope.getCallableNames() - } + override fun getCallableNames(): Set = callableNamesCached override fun getClassifierNames(): Set { return declaredMemberScope.getContainingClassifierNamesIfPresent() + superTypesScope.getClassifierNames() diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirTypeIntersectionScope.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirTypeIntersectionScope.kt index c80567d2fdd..3f346183846 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirTypeIntersectionScope.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirTypeIntersectionScope.kt @@ -42,6 +42,10 @@ class FirTypeIntersectionScope private constructor( private val intersectionOverrides: MutableMap, MemberWithBaseScope>> = mutableMapOf() + private val callableNamesCached by lazy(LazyThreadSafetyMode.PUBLICATION) { + scopes.flatMapTo(mutableSetOf()) { it.getCallableNames() } + } + override fun processFunctionsByName(name: Name, processor: (FirNamedFunctionSymbol) -> Unit) { if (!processCallablesByName(name, processor, absentFunctions, FirScope::processFunctionsByName)) { super.processFunctionsByName(name, processor) @@ -540,9 +544,7 @@ class FirTypeIntersectionScope private constructor( return ProcessorAction.NEXT } - override fun getCallableNames(): Set { - return scopes.flatMapTo(mutableSetOf()) { it.getCallableNames() } - } + override fun getCallableNames(): Set = callableNamesCached override fun getClassifierNames(): Set { return scopes.flatMapTo(hashSetOf()) { it.getClassifierNames() }