From 1a84ec9677c12dff3d6a6e488393dc65ba94a1d0 Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Tue, 8 Sep 2020 16:34:39 +0300 Subject: [PATCH] [FIR] Mark all session components respectively to they have mutable state or not Also add documentation for all fir annotations --- .../kotlin/fir/analysis/CheckersComponent.kt | 8 +++- .../impl/FirBuiltinSymbolProvider.kt | 1 + .../fir/backend/jvm/FirJvmKotlinMangler.kt | 4 +- .../signaturer/FirBasedSignatureComposer.kt | 4 +- .../fir/java/FirJavaVisibilityChecker.kt | 6 ++- .../kotlin/fir/java/JavaSymbolProvider.kt | 1 + .../KotlinDeserializedJvmSymbolsProvider.kt | 2 + .../fir/FirJvmEffectiveVisibilityResolver.kt | 1 + .../kotlin/fir/resolve/FirJavaClassMapper.kt | 2 + .../resolve/FirJavaSyntheticNamesProvider.kt | 2 + .../jvm/JvmCallConflictResolverFactory.kt | 2 + .../fir/FirEffectiveVisibilityResolverImpl.kt | 1 + .../kotlin/fir/FirVisibilityChecker.kt | 4 +- .../fir/extensions/FirExtensionService.kt | 2 + .../extensions/FirPredicateBasedProvider.kt | 5 ++- .../FirRegisteredPluginAnnotations.kt | 4 +- .../fir/resolve/FirPlatformClassMapper.kt | 2 + .../resolve/inference/InferenceComponents.kt | 2 + .../impl/FirCloneableSymbolProvider.kt | 4 +- .../impl/FirCompositeSymbolProvider.kt | 2 + .../impl/FirDependenciesSymbolProviderImpl.kt | 2 + .../resolve/providers/impl/FirProviderImpl.kt | 2 + .../impl/FirQualifierResolverImpl.kt | 2 + .../providers/impl/FirTypeResolverImpl.kt | 3 +- .../plugin/GeneratedClassIndex.kt | 4 +- .../impl/FirDeclaredMemberScopeProvider.kt | 5 ++- .../types/FirCorrespondingSupertypesCache.kt | 2 + .../fir/FirEffectiveVisibilityResolver.kt | 1 + .../org/jetbrains/kotlin/fir/FirSession.kt | 6 --- .../jetbrains/kotlin/fir/PrivateForInline.kt | 9 ---- .../org/jetbrains/kotlin/fir/annotations.kt | 44 +++++++++++++++++++ .../fir/low/level/api/IdeFirPhaseManager.kt | 2 + .../fir/low/level/api/IdeSessionComponents.kt | 2 + .../low/level/api/providers/FirIdeProvider.kt | 4 ++ 34 files changed, 117 insertions(+), 30 deletions(-) delete mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/PrivateForInline.kt create mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/annotations.kt diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/CheckersComponent.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/CheckersComponent.kt index f72c9740ed0..207fd136788 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/CheckersComponent.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/CheckersComponent.kt @@ -7,14 +7,18 @@ package org.jetbrains.kotlin.fir.analysis import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSessionComponent +import org.jetbrains.kotlin.fir.NoMutableState import org.jetbrains.kotlin.fir.SessionConfiguration -import org.jetbrains.kotlin.fir.analysis.checkers.declaration.* -import org.jetbrains.kotlin.fir.analysis.checkers.expression.* +import org.jetbrains.kotlin.fir.analysis.checkers.declaration.ComposedDeclarationCheckers +import org.jetbrains.kotlin.fir.analysis.checkers.declaration.DeclarationCheckers +import org.jetbrains.kotlin.fir.analysis.checkers.expression.ComposedExpressionCheckers +import org.jetbrains.kotlin.fir.analysis.checkers.expression.ExpressionCheckers import org.jetbrains.kotlin.fir.analysis.extensions.FirAdditionalCheckersExtension @RequiresOptIn annotation class CheckersComponentInternal +@NoMutableState class CheckersComponent : FirSessionComponent { val declarationCheckers: DeclarationCheckers get() = _declarationCheckers private val _declarationCheckers = ComposedDeclarationCheckers() diff --git a/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirBuiltinSymbolProvider.kt b/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirBuiltinSymbolProvider.kt index 802ce382fb3..1f92e9c3e8a 100644 --- a/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirBuiltinSymbolProvider.kt +++ b/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirBuiltinSymbolProvider.kt @@ -47,6 +47,7 @@ import org.jetbrains.kotlin.utils.addToStdlib.firstNotNullResult import org.jetbrains.kotlin.utils.addToStdlib.getOrPut import java.io.InputStream +@NoMutableState class FirBuiltinSymbolProvider(session: FirSession, val kotlinScopeProvider: KotlinScopeProvider) : FirSymbolProvider(session) { private data class SyntheticFunctionalInterfaceSymbolKey(val kind: FunctionClassKind, val arity: Int) diff --git a/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmKotlinMangler.kt b/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmKotlinMangler.kt index 6603a47fc78..dc4621b2a2d 100644 --- a/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmKotlinMangler.kt +++ b/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmKotlinMangler.kt @@ -7,9 +7,11 @@ package org.jetbrains.kotlin.fir.backend.jvm import org.jetbrains.kotlin.backend.common.serialization.mangle.* import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.NoMutableState import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.signaturer.FirMangler +@NoMutableState class FirJvmKotlinMangler(private val session: FirSession) : AbstractKotlinMangler(), FirMangler { override val FirDeclaration.mangleString: String @@ -34,4 +36,4 @@ class FirJvmKotlinMangler(private val session: FirSession) : AbstractKotlinMangl override fun getMangleComputer(mode: MangleMode): KotlinMangleComputer { return FirJvmMangleComputer(StringBuilder(256), mode, session) } -} \ No newline at end of file +} diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/signaturer/FirBasedSignatureComposer.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/signaturer/FirBasedSignatureComposer.kt index 380c1904933..5b375c75883 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/signaturer/FirBasedSignatureComposer.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/signaturer/FirBasedSignatureComposer.kt @@ -5,8 +5,9 @@ package org.jetbrains.kotlin.fir.signaturer -import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.descriptors.Visibilities +import org.jetbrains.kotlin.fir.FirElement +import org.jetbrains.kotlin.fir.NoMutableState import org.jetbrains.kotlin.fir.backend.Fir2IrSignatureComposer import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.render @@ -15,6 +16,7 @@ import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid import org.jetbrains.kotlin.ir.util.IdSignature import org.jetbrains.kotlin.name.FqName +@NoMutableState class FirBasedSignatureComposer(private val mangler: FirMangler) : Fir2IrSignatureComposer { inner class SignatureBuilder : FirVisitorVoid() { var hashId: Long? = null diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/FirJavaVisibilityChecker.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/FirJavaVisibilityChecker.kt index 072bbec9b2f..b8caf7d1368 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/FirJavaVisibilityChecker.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/FirJavaVisibilityChecker.kt @@ -5,16 +5,18 @@ package org.jetbrains.kotlin.fir.java +import org.jetbrains.kotlin.descriptors.Visibility +import org.jetbrains.kotlin.descriptors.java.JavaVisibilities import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirVisibilityChecker -import org.jetbrains.kotlin.descriptors.java.JavaVisibilities -import org.jetbrains.kotlin.descriptors.Visibility +import org.jetbrains.kotlin.fir.NoMutableState import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.declarations.FirFile import org.jetbrains.kotlin.fir.resolve.calls.Candidate import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.name.ClassId +@NoMutableState object FirJavaVisibilityChecker : FirVisibilityChecker() { override fun platformVisibilityCheck( declarationVisibility: Visibility, diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaSymbolProvider.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaSymbolProvider.kt index 929f990623e..c0452969577 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaSymbolProvider.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaSymbolProvider.kt @@ -41,6 +41,7 @@ import org.jetbrains.kotlin.types.Variance.INVARIANT import org.jetbrains.kotlin.util.OperatorNameConventions import org.jetbrains.kotlin.utils.addIfNotNull +@ThreadSafeMutableState class JavaSymbolProvider( session: FirSession, val project: Project, diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/KotlinDeserializedJvmSymbolsProvider.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/KotlinDeserializedJvmSymbolsProvider.kt index 0274f821f00..e1063b2c6d3 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/KotlinDeserializedJvmSymbolsProvider.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/KotlinDeserializedJvmSymbolsProvider.kt @@ -9,6 +9,7 @@ import com.intellij.openapi.progress.ProcessCanceledException import com.intellij.openapi.project.Project import org.jetbrains.kotlin.descriptors.SourceElement import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.ThreadSafeMutableState import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.impl.FirSimpleFunctionImpl import org.jetbrains.kotlin.fir.deserialization.FirConstDeserializer @@ -50,6 +51,7 @@ import org.jetbrains.kotlin.serialization.deserialization.IncompatibleVersionErr import org.jetbrains.kotlin.serialization.deserialization.getName import org.jetbrains.kotlin.utils.addToStdlib.firstNotNullResult +@ThreadSafeMutableState class KotlinDeserializedJvmSymbolsProvider( session: FirSession, val project: Project, diff --git a/compiler/fir/jvm/src/org/jetbrains/kotlin/fir/FirJvmEffectiveVisibilityResolver.kt b/compiler/fir/jvm/src/org/jetbrains/kotlin/fir/FirJvmEffectiveVisibilityResolver.kt index 0f33c821329..aacd38f64b1 100644 --- a/compiler/fir/jvm/src/org/jetbrains/kotlin/fir/FirJvmEffectiveVisibilityResolver.kt +++ b/compiler/fir/jvm/src/org/jetbrains/kotlin/fir/FirJvmEffectiveVisibilityResolver.kt @@ -9,6 +9,7 @@ import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.descriptors.java.JavaVisibilities import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol +@NoMutableState class FirJvmEffectiveVisibilityResolver(session: FirSession) : FirEffectiveVisibilityResolverImpl(session) { override fun computeEffectiveVisibility(visibility: Visibility, containerSymbol: FirClassLikeSymbol<*>?): FirEffectiveVisibility { return when (visibility) { diff --git a/compiler/fir/jvm/src/org/jetbrains/kotlin/fir/resolve/FirJavaClassMapper.kt b/compiler/fir/jvm/src/org/jetbrains/kotlin/fir/resolve/FirJavaClassMapper.kt index ca0db6b1612..da107a5fdcf 100644 --- a/compiler/fir/jvm/src/org/jetbrains/kotlin/fir/resolve/FirJavaClassMapper.kt +++ b/compiler/fir/jvm/src/org/jetbrains/kotlin/fir/resolve/FirJavaClassMapper.kt @@ -7,9 +7,11 @@ package org.jetbrains.kotlin.fir.resolve import org.jetbrains.kotlin.builtins.jvm.JavaToKotlinClassMap import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.NoMutableState import org.jetbrains.kotlin.fir.declarations.FirClassLikeDeclaration import org.jetbrains.kotlin.fir.declarations.FirRegularClass +@NoMutableState class FirJavaClassMapper(private val session: FirSession) : FirPlatformClassMapper() { override fun getCorrespondingPlatformClass(declaration: FirClassLikeDeclaration<*>): FirRegularClass? { val javaClassId = JavaToKotlinClassMap.mapKotlinToJava(declaration.symbol.classId.asSingleFqName().toUnsafe()) diff --git a/compiler/fir/jvm/src/org/jetbrains/kotlin/fir/resolve/FirJavaSyntheticNamesProvider.kt b/compiler/fir/jvm/src/org/jetbrains/kotlin/fir/resolve/FirJavaSyntheticNamesProvider.kt index 506408efad5..ad90cc0e622 100644 --- a/compiler/fir/jvm/src/org/jetbrains/kotlin/fir/resolve/FirJavaSyntheticNamesProvider.kt +++ b/compiler/fir/jvm/src/org/jetbrains/kotlin/fir/resolve/FirJavaSyntheticNamesProvider.kt @@ -5,12 +5,14 @@ package org.jetbrains.kotlin.fir.resolve +import org.jetbrains.kotlin.fir.NoMutableState import org.jetbrains.kotlin.fir.resolve.calls.FirSyntheticNamesProvider import org.jetbrains.kotlin.load.java.propertyNameByGetMethodName import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.util.capitalizeDecapitalize.capitalizeAsciiOnly import org.jetbrains.kotlin.util.capitalizeDecapitalize.capitalizeFirstWord +@NoMutableState object FirJavaSyntheticNamesProvider : FirSyntheticNamesProvider() { private const val GETTER_PREFIX = "get" private const val IS_PREFIX = "is" diff --git a/compiler/fir/jvm/src/org/jetbrains/kotlin/fir/resolve/calls/jvm/JvmCallConflictResolverFactory.kt b/compiler/fir/jvm/src/org/jetbrains/kotlin/fir/resolve/calls/jvm/JvmCallConflictResolverFactory.kt index a9e317070ea..e9ccd6be8d7 100644 --- a/compiler/fir/jvm/src/org/jetbrains/kotlin/fir/resolve/calls/jvm/JvmCallConflictResolverFactory.kt +++ b/compiler/fir/jvm/src/org/jetbrains/kotlin/fir/resolve/calls/jvm/JvmCallConflictResolverFactory.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.fir.resolve.calls.jvm +import org.jetbrains.kotlin.fir.NoMutableState import org.jetbrains.kotlin.fir.resolve.calls.ConeCallConflictResolverFactory import org.jetbrains.kotlin.fir.resolve.calls.ConeCompositeConflictResolver import org.jetbrains.kotlin.fir.resolve.calls.ConeOverloadConflictResolver @@ -12,6 +13,7 @@ import org.jetbrains.kotlin.fir.resolve.inference.InferenceComponents import org.jetbrains.kotlin.resolve.calls.results.TypeSpecificityComparator import org.jetbrains.kotlin.resolve.jvm.JvmTypeSpecificityComparator +@NoMutableState object JvmCallConflictResolverFactory : ConeCallConflictResolverFactory() { override fun create( typeSpecificityComparator: TypeSpecificityComparator, diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirEffectiveVisibilityResolverImpl.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirEffectiveVisibilityResolverImpl.kt index dcacd15806d..7509a66433e 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirEffectiveVisibilityResolverImpl.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirEffectiveVisibilityResolverImpl.kt @@ -14,6 +14,7 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.utils.addToStdlib.safeAs +@ThreadSafeMutableState open class FirEffectiveVisibilityResolverImpl(private val session: FirSession) : FirEffectiveVisibilityResolver() { private val cache = mutableMapOf() diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirVisibilityChecker.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirVisibilityChecker.kt index 9a11d27fd24..83a199e2707 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirVisibilityChecker.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirVisibilityChecker.kt @@ -8,7 +8,8 @@ package org.jetbrains.kotlin.fir import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.fir.declarations.* -import org.jetbrains.kotlin.fir.resolve.calls.* +import org.jetbrains.kotlin.fir.resolve.calls.Candidate +import org.jetbrains.kotlin.fir.resolve.calls.ReceiverValue import org.jetbrains.kotlin.fir.resolve.firProvider import org.jetbrains.kotlin.fir.resolve.firSymbolProvider import org.jetbrains.kotlin.fir.resolve.fullyExpandedType @@ -22,6 +23,7 @@ import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName abstract class FirVisibilityChecker : FirSessionComponent { + @NoMutableState object Default : FirVisibilityChecker() { override fun platformVisibilityCheck( declarationVisibility: Visibility, diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/extensions/FirExtensionService.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/extensions/FirExtensionService.kt index f368dd9d201..79c100dbba4 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/extensions/FirExtensionService.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/extensions/FirExtensionService.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.extensions import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSessionComponent +import org.jetbrains.kotlin.fir.NoMutableState import org.jetbrains.kotlin.fir.utils.ArrayMapAccessor import org.jetbrains.kotlin.fir.utils.ComponentArrayOwner import org.jetbrains.kotlin.fir.utils.Protected @@ -16,6 +17,7 @@ import kotlin.reflect.KClass @RequiresOptIn annotation class PluginServicesInitialization +@NoMutableState class FirExtensionService(val session: FirSession) : ComponentArrayOwner>(), FirSessionComponent { companion object : TypeRegistry>() { inline fun > registeredExtensions(): ArrayMapAccessor, V> { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/extensions/FirPredicateBasedProvider.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/extensions/FirPredicateBasedProvider.kt index 8dc19d4cf8c..2938013dfd5 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/extensions/FirPredicateBasedProvider.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/extensions/FirPredicateBasedProvider.kt @@ -10,10 +10,10 @@ import com.google.common.collect.Multimap import kotlinx.collections.immutable.PersistentList import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSessionComponent +import org.jetbrains.kotlin.fir.NoMutableState import org.jetbrains.kotlin.fir.declarations.FirAnnotatedDeclaration import org.jetbrains.kotlin.fir.declarations.FirFile import org.jetbrains.kotlin.fir.extensions.predicate.* -import org.jetbrains.kotlin.fir.resolve.firProvider import org.jetbrains.kotlin.fir.resolve.fqName abstract class FirPredicateBasedProvider : FirSessionComponent { @@ -49,6 +49,7 @@ abstract class FirPredicateBasedProvider : FirSessionComponent { abstract fun matches(predicate: DeclarationPredicate, declaration: FirAnnotatedDeclaration): Boolean } +@NoMutableState private class FirPredicateBasedProviderImpl(private val session: FirSession) : FirPredicateBasedProvider() { private val registeredPluginAnnotations = session.registeredPluginAnnotations private val cache = Cache() @@ -187,4 +188,4 @@ private class FirPredicateBasedProviderImpl(private val session: FirSession) : F } } -val FirSession.predicateBasedProvider: FirPredicateBasedProvider by FirSession.sessionComponentAccessor() \ No newline at end of file +val FirSession.predicateBasedProvider: FirPredicateBasedProvider by FirSession.sessionComponentAccessor() diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/extensions/FirRegisteredPluginAnnotations.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/extensions/FirRegisteredPluginAnnotations.kt index ff317162816..fe3c4175e72 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/extensions/FirRegisteredPluginAnnotations.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/extensions/FirRegisteredPluginAnnotations.kt @@ -10,6 +10,7 @@ import com.google.common.collect.Multimap import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSessionComponent +import org.jetbrains.kotlin.fir.NoMutableState import org.jetbrains.kotlin.fir.declarations.FirRegularClass import org.jetbrains.kotlin.fir.extensions.predicate.DeclarationPredicate @@ -32,6 +33,7 @@ abstract class FirRegisteredPluginAnnotations(val session: FirSession) : FirSess abstract fun initialize() } +@NoMutableState private class FirRegisteredPluginAnnotationsImpl(session: FirSession) : FirRegisteredPluginAnnotations(session) { override val annotations: MutableSet = mutableSetOf() override val metaAnnotations: MutableSet = mutableSetOf() @@ -75,4 +77,4 @@ private class FirRegisteredPluginAnnotationsImpl(session: FirSession) : FirRegis } } -val FirSession.registeredPluginAnnotations: FirRegisteredPluginAnnotations by FirSession.sessionComponentAccessor() \ No newline at end of file +val FirSession.registeredPluginAnnotations: FirRegisteredPluginAnnotations by FirSession.sessionComponentAccessor() diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/FirPlatformClassMapper.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/FirPlatformClassMapper.kt index bdcad551131..01d8666813a 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/FirPlatformClassMapper.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/FirPlatformClassMapper.kt @@ -7,10 +7,12 @@ package org.jetbrains.kotlin.fir.resolve import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSessionComponent +import org.jetbrains.kotlin.fir.NoMutableState import org.jetbrains.kotlin.fir.declarations.FirClassLikeDeclaration import org.jetbrains.kotlin.fir.declarations.FirRegularClass abstract class FirPlatformClassMapper : FirSessionComponent { + @NoMutableState object Default : FirPlatformClassMapper() { override fun getCorrespondingPlatformClass(declaration: FirClassLikeDeclaration<*>): FirRegularClass? { return null diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/InferenceComponents.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/InferenceComponents.kt index 88df5f5667e..751be9f2af3 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/InferenceComponents.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/InferenceComponents.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.resolve.inference import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSessionComponent +import org.jetbrains.kotlin.fir.NoMutableState import org.jetbrains.kotlin.fir.types.ConeInferenceContext import org.jetbrains.kotlin.fir.types.ConeTypeCheckerContext import org.jetbrains.kotlin.resolve.calls.inference.components.ConstraintIncorporator @@ -16,6 +17,7 @@ import org.jetbrains.kotlin.resolve.calls.inference.components.TrivialConstraint import org.jetbrains.kotlin.resolve.calls.inference.model.NewConstraintSystemImpl import org.jetbrains.kotlin.types.AbstractTypeApproximator +@NoMutableState class InferenceComponents(val session: FirSession) : FirSessionComponent { val ctx: ConeInferenceContext = ConeTypeCheckerContext(isErrorTypeEqualsToAnything = false, isStubTypeEqualsToAnything = false, session) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirCloneableSymbolProvider.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirCloneableSymbolProvider.kt index 9b7335358ef..7d8fd4b65e3 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirCloneableSymbolProvider.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirCloneableSymbolProvider.kt @@ -8,8 +8,9 @@ package org.jetbrains.kotlin.fir.resolve.providers.impl import org.jetbrains.kotlin.builtins.StandardNames import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.Modality -import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.descriptors.Visibilities +import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.NoMutableState import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.declarations.builder.buildRegularClass @@ -28,6 +29,7 @@ import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name +@NoMutableState class FirCloneableSymbolProvider(session: FirSession, scopeProvider: FirScopeProvider) : FirSymbolProvider(session) { companion object { val CLONEABLE: Name = Name.identifier("Cloneable") diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirCompositeSymbolProvider.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirCompositeSymbolProvider.kt index 5baa540ff0f..65529f0a587 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirCompositeSymbolProvider.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirCompositeSymbolProvider.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.fir.resolve.providers.impl import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.NoMutableState import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProviderInternals import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol @@ -15,6 +16,7 @@ import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.utils.addToStdlib.firstNotNullResult +@NoMutableState class FirCompositeSymbolProvider(session: FirSession, val providers: List) : FirSymbolProvider(session) { override fun getTopLevelCallableSymbols(packageFqName: FqName, name: Name): List> { return providers.flatMap { it.getTopLevelCallableSymbols(packageFqName, name) } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirDependenciesSymbolProviderImpl.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirDependenciesSymbolProviderImpl.kt index 2800057fbb2..e4450b4b1c5 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirDependenciesSymbolProviderImpl.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirDependenciesSymbolProviderImpl.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.fir.resolve.providers.impl import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.ThreadSafeMutableState import org.jetbrains.kotlin.fir.dependenciesWithoutSelf import org.jetbrains.kotlin.fir.resolve.firSymbolProvider import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider @@ -18,6 +19,7 @@ import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name +@ThreadSafeMutableState open class FirDependenciesSymbolProviderImpl(session: FirSession) : FirSymbolProvider(session) { private val classCache = SymbolProviderCache>() private val topLevelCallableCache = SymbolProviderCache>>() diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirProviderImpl.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirProviderImpl.kt index 3ea9a27a4a2..94b12ce92d2 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirProviderImpl.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirProviderImpl.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir.resolve.providers.impl import org.jetbrains.annotations.TestOnly import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.ThreadSafeMutableState import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty import org.jetbrains.kotlin.fir.resolve.providers.FirProvider @@ -24,6 +25,7 @@ import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name +@ThreadSafeMutableState class FirProviderImpl(val session: FirSession, val kotlinScopeProvider: KotlinScopeProvider) : FirProvider() { override val symbolProvider: FirSymbolProvider = SymbolProvider() diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirQualifierResolverImpl.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirQualifierResolverImpl.kt index 97371be5e00..4c2fb7a4e2f 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirQualifierResolverImpl.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirQualifierResolverImpl.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.fir.resolve.providers.impl import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.NoMutableState import org.jetbrains.kotlin.fir.resolve.FirQualifierResolver import org.jetbrains.kotlin.fir.resolve.firSymbolProvider import org.jetbrains.kotlin.fir.symbols.impl.FirClassifierSymbol @@ -13,6 +14,7 @@ import org.jetbrains.kotlin.fir.types.FirQualifierPart import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName +@NoMutableState class FirQualifierResolverImpl(val session: FirSession) : FirQualifierResolver() { override fun resolveSymbolWithPrefix(parts: List, prefix: ClassId): FirClassifierSymbol<*>? { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirTypeResolverImpl.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirTypeResolverImpl.kt index ff4a1571c4c..1a788330f45 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirTypeResolverImpl.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirTypeResolverImpl.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.resolve.providers.impl import org.jetbrains.kotlin.builtins.StandardNames import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.ThreadSafeMutableState import org.jetbrains.kotlin.fir.diagnostics.ConeIntermediateDiagnostic import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic import org.jetbrains.kotlin.fir.diagnostics.ConeUnexpectedTypeArgumentsError @@ -14,7 +15,6 @@ import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind import org.jetbrains.kotlin.fir.render import org.jetbrains.kotlin.fir.resolve.* import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeWrongNumberOfTypeArgumentsError -import org.jetbrains.kotlin.fir.resolve.bindSymbolToLookupTag import org.jetbrains.kotlin.fir.resolve.getSymbolByLookupTag import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor import org.jetbrains.kotlin.fir.scopes.FirScope @@ -26,6 +26,7 @@ import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl import org.jetbrains.kotlin.fir.types.impl.FirImplicitBuiltinTypeRef import org.jetbrains.kotlin.name.ClassId +@ThreadSafeMutableState class FirTypeResolverImpl(private val session: FirSession) : FirTypeResolver() { private val symbolProvider by lazy { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/GeneratedClassIndex.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/GeneratedClassIndex.kt index 327a20ab5e8..5079609b074 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/GeneratedClassIndex.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/GeneratedClassIndex.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir.resolve.transformers.plugin import com.google.common.collect.ArrayListMultimap import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSessionComponent +import org.jetbrains.kotlin.fir.ThreadSafeMutableState import org.jetbrains.kotlin.fir.declarations.FirAnnotatedDeclaration import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin import org.jetbrains.kotlin.fir.declarations.FirPluginKey @@ -28,6 +29,7 @@ abstract class GeneratedClassIndex : FirSessionComponent { val FirSession.generatedClassIndex: GeneratedClassIndex by FirSession.sessionComponentAccessor() +@ThreadSafeMutableState private class GeneratedClassIndexImpl : GeneratedClassIndex() { private val index: ArrayListMultimap = ArrayListMultimap.create() @@ -39,4 +41,4 @@ private class GeneratedClassIndexImpl : GeneratedClassIndex() { override fun get(key: FirPluginKey): List { return index.get(key) } -} \ No newline at end of file +} diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirDeclaredMemberScopeProvider.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirDeclaredMemberScopeProvider.kt index 2fb503d8e6e..7d8131ad8e6 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirDeclaredMemberScopeProvider.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirDeclaredMemberScopeProvider.kt @@ -6,17 +6,18 @@ package org.jetbrains.kotlin.fir.scopes.impl import org.jetbrains.kotlin.fir.FirSessionComponent +import org.jetbrains.kotlin.fir.ThreadSafeMutableState import org.jetbrains.kotlin.fir.declarations.FirClass import org.jetbrains.kotlin.fir.declarations.classId -import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider import org.jetbrains.kotlin.fir.resolve.declaredMemberScopeProvider +import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider import org.jetbrains.kotlin.fir.scopes.FirScope import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.utils.getOrPutNullable +@ThreadSafeMutableState class FirDeclaredMemberScopeProvider : FirSessionComponent { - private val declaredMemberCache = mutableMapOf, FirClassDeclaredMemberScope>() private val nestedClassifierCache = mutableMapOf, FirNestedClassifierScope?>() diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/types/FirCorrespondingSupertypesCache.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/types/FirCorrespondingSupertypesCache.kt index 65c7af0dea6..eb31055161d 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/types/FirCorrespondingSupertypesCache.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/types/FirCorrespondingSupertypesCache.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.types import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSessionComponent +import org.jetbrains.kotlin.fir.ThreadSafeMutableState import org.jetbrains.kotlin.fir.declarations.FirClassLikeDeclaration import org.jetbrains.kotlin.fir.declarations.FirTypeParameterRefsOwner import org.jetbrains.kotlin.fir.resolve.toSymbol @@ -17,6 +18,7 @@ import org.jetbrains.kotlin.types.model.CaptureStatus import org.jetbrains.kotlin.types.model.SimpleTypeMarker import org.jetbrains.kotlin.types.model.TypeConstructorMarker +@ThreadSafeMutableState class FirCorrespondingSupertypesCache(private val session: FirSession) : FirSessionComponent { private val context = ConeTypeCheckerContext(isErrorTypeEqualsToAnything = false, isStubTypeEqualsToAnything = true, session = session) private val cache = HashMap>?>(1000, 0.5f) diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirEffectiveVisibilityResolver.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirEffectiveVisibilityResolver.kt index 3f954cd6c2d..836afee643f 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirEffectiveVisibilityResolver.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirEffectiveVisibilityResolver.kt @@ -9,6 +9,7 @@ import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration import org.jetbrains.kotlin.fir.resolve.ScopeSession +@NoMutableState abstract class FirEffectiveVisibilityResolver : FirSessionComponent { abstract fun resolveFor( declaration: FirMemberDeclaration, diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirSession.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirSession.kt index af30993908c..9c1668d694c 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirSession.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirSession.kt @@ -15,12 +15,6 @@ import org.jetbrains.kotlin.fir.utils.TypeRegistry import org.jetbrains.kotlin.utils.Jsr305State import kotlin.reflect.KClass -@RequiresOptIn -annotation class PrivateSessionConstructor - -@RequiresOptIn -annotation class SessionConfiguration - interface FirSessionComponent abstract class FirSession @PrivateSessionConstructor constructor(val sessionProvider: FirSessionProvider?) : ComponentArrayOwner() { diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/PrivateForInline.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/PrivateForInline.kt deleted file mode 100644 index 2c639dc8868..00000000000 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/PrivateForInline.kt +++ /dev/null @@ -1,9 +0,0 @@ -/* - * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. - * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. - */ - -package org.jetbrains.kotlin.fir - -@RequiresOptIn(level = RequiresOptIn.Level.ERROR) -annotation class PrivateForInline diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/annotations.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/annotations.kt new file mode 100644 index 00000000000..b121270557b --- /dev/null +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/annotations.kt @@ -0,0 +1,44 @@ +/* + * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.fir + +/** + * [NoMutableState] annotation means that annotated class has no mutable state + * and it's safe to use it concurrent environment (e.g. as session component) + */ +@Target(AnnotationTarget.CLASS) +@Retention(AnnotationRetention.SOURCE) +annotation class NoMutableState + +/** + * [ThreadSafeMutableState] annotation means that annotated class has mutable state + * and it should carefully implement it for concurrent environment if it will be used + * as session component + */ +@Target(AnnotationTarget.CLASS) +@Retention(AnnotationRetention.SOURCE) +annotation class ThreadSafeMutableState + +/** + * All [FirSession]s should be created via FirSessionFactories, so constructors of all [FirSession] inheritors + * should be marked with this annotation, to avoid accidental creating session without factory + */ +@RequiresOptIn +annotation class PrivateSessionConstructor + +/** + * [SessionConfiguration] is used to avoid accidental registration of session components after + * session was initialized + */ +@RequiresOptIn +annotation class SessionConfiguration + +/** + * [PrivateForInline] used for cases when there is a var property with mutable set and corresponding + * inline function which mutates this var + */ +@RequiresOptIn +annotation class PrivateForInline diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/IdeFirPhaseManager.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/IdeFirPhaseManager.kt index 7d9b033b482..76f057398a9 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/IdeFirPhaseManager.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/IdeFirPhaseManager.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.idea.fir.low.level.api +import org.jetbrains.kotlin.fir.ThreadSafeMutableState import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.render @@ -14,6 +15,7 @@ import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.idea.fir.low.level.api.file.builder.ModuleFileCache import org.jetbrains.kotlin.idea.fir.low.level.api.lazy.resolve.FirLazyDeclarationResolver +@ThreadSafeMutableState internal class IdeFirPhaseManager( private val lazyDeclarationResolver: FirLazyDeclarationResolver, private val cache: ModuleFileCache diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/IdeSessionComponents.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/IdeSessionComponents.kt index b0fa71e56d1..f36a78c41f7 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/IdeSessionComponents.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/IdeSessionComponents.kt @@ -7,9 +7,11 @@ package org.jetbrains.kotlin.idea.fir.low.level.api import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSessionComponent +import org.jetbrains.kotlin.fir.NoMutableState import org.jetbrains.kotlin.fir.backend.jvm.FirJvmKotlinMangler import org.jetbrains.kotlin.fir.signaturer.FirBasedSignatureComposer +@NoMutableState data class IdeSessionComponents(val signatureComposer: FirBasedSignatureComposer): FirSessionComponent { companion object { fun create(session: FirSession) = IdeSessionComponents( diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/providers/FirIdeProvider.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/providers/FirIdeProvider.kt index 923e4457d19..e70c6f32d40 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/providers/FirIdeProvider.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/providers/FirIdeProvider.kt @@ -8,6 +8,8 @@ package org.jetbrains.kotlin.idea.fir.low.level.api.providers import com.intellij.openapi.project.Project import com.intellij.psi.search.GlobalSearchScope import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.NoMutableState +import org.jetbrains.kotlin.fir.ThreadSafeMutableState import org.jetbrains.kotlin.fir.builder.RawFirBuilder import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty @@ -30,6 +32,7 @@ import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.KtNamedFunction +@ThreadSafeMutableState internal class FirIdeProvider( project: Project, val session: FirSession, @@ -116,6 +119,7 @@ internal class FirIdeProvider( return emptySet() } + @NoMutableState private inner class SymbolProvider : FirSymbolProvider(session) { override fun getTopLevelCallableSymbols(packageFqName: FqName, name: Name): List> = providerHelper.getTopLevelCallableSymbols(packageFqName, name)