FIR IDE: make KtFirDelegatingScope caching a thread safe
This commit is contained in:
+4
-8
@@ -15,6 +15,7 @@ import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
|||||||
import org.jetbrains.kotlin.fir.symbols.PossiblyFirFakeOverrideSymbol
|
import org.jetbrains.kotlin.fir.symbols.PossiblyFirFakeOverrideSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
||||||
|
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.scopes.KtScope
|
import org.jetbrains.kotlin.idea.frontend.api.scopes.KtScope
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtCallableSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtCallableSymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassLikeSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassLikeSymbol
|
||||||
@@ -22,17 +23,12 @@ import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSymbol
|
|||||||
import org.jetbrains.kotlin.idea.frontend.api.withValidityAssertion
|
import org.jetbrains.kotlin.idea.frontend.api.withValidityAssertion
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
internal abstract class KtFirDelegatingScope(private val builder: KtSymbolByFirBuilder) : KtScope {
|
internal abstract class KtFirDelegatingScope(private val builder: KtSymbolByFirBuilder) : KtScope, ValidityOwnerByValidityToken {
|
||||||
abstract val firScope: FirScope
|
abstract val firScope: FirScope
|
||||||
|
|
||||||
private var allNamesCached: Set<Name>? = null
|
private val allNamesCached by cached { getCallableNames() + getClassLikeSymbolNames() }
|
||||||
|
|
||||||
override fun getAllNames(): Set<Name> = withValidityAssertion {
|
override fun getAllNames(): Set<Name> = allNamesCached
|
||||||
if (allNamesCached == null) {
|
|
||||||
allNamesCached = getCallableNames() + getClassLikeSymbolNames()
|
|
||||||
}
|
|
||||||
allNamesCached!!
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getCallableNames(): Set<Name> = withValidityAssertion {
|
override fun getCallableNames(): Set<Name> = withValidityAssertion {
|
||||||
firScope.getCallableNames()
|
firScope.getCallableNames()
|
||||||
|
|||||||
Reference in New Issue
Block a user