From d4891cb464882e7721bf7f8506e6118a1b24dbf0 Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Mon, 14 Sep 2020 15:26:00 +0300 Subject: [PATCH] [FIR] Move Jsr305State from FirSession to separate component --- .../kotlin/fir/session/ComponentsContainers.kt | 4 +++- .../kotlin/fir/session/FirSessionFactory.kt | 2 +- .../enhancement/FirJsr305StateContainer.kt | 18 ++++++++++++++++++ .../java/enhancement/SignatureEnhancement.kt | 2 +- .../src/org/jetbrains/kotlin/fir/FirSession.kt | 2 -- .../typeReferenceError.fir.kt | 2 +- .../level/api/sessions/FirIdeSessionFactory.kt | 6 +++--- 7 files changed, 27 insertions(+), 9 deletions(-) create mode 100644 compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/FirJsr305StateContainer.kt diff --git a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/ComponentsContainers.kt b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/ComponentsContainers.kt index 6a68cce5339..61b77e4fd66 100644 --- a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/ComponentsContainers.kt +++ b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/ComponentsContainers.kt @@ -11,6 +11,7 @@ import org.jetbrains.kotlin.fir.extensions.FirExtensionService import org.jetbrains.kotlin.fir.extensions.FirPredicateBasedProvider import org.jetbrains.kotlin.fir.extensions.FirRegisteredPluginAnnotations import org.jetbrains.kotlin.fir.java.FirJavaVisibilityChecker +import org.jetbrains.kotlin.fir.java.enhancement.FirJsr305StateContainer import org.jetbrains.kotlin.fir.resolve.* import org.jetbrains.kotlin.fir.resolve.calls.ConeCallConflictResolverFactory import org.jetbrains.kotlin.fir.resolve.calls.FirSyntheticNamesProvider @@ -52,10 +53,11 @@ fun FirModuleBasedSession.registerResolveComponents() { * Resolve components which have specific implementations on JVM */ @OptIn(SessionConfiguration::class) -fun FirModuleBasedSession.registerJavaSpecificComponents() { +fun FirModuleBasedSession.registerJavaSpecificResolveComponents() { register(FirVisibilityChecker::class, FirJavaVisibilityChecker) register(ConeCallConflictResolverFactory::class, JvmCallConflictResolverFactory) register(FirEffectiveVisibilityResolver::class, FirJvmEffectiveVisibilityResolver(this)) register(FirPlatformClassMapper::class, FirJavaClassMapper(this)) register(FirSyntheticNamesProvider::class, FirJavaSyntheticNamesProvider) + register(FirJsr305StateContainer::class, FirJsr305StateContainer.Default) } diff --git a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirSessionFactory.kt b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirSessionFactory.kt index 0a611228c65..53816c5a9d6 100644 --- a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirSessionFactory.kt +++ b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirSessionFactory.kt @@ -67,7 +67,7 @@ object FirSessionFactory { return FirJavaModuleBasedSession(moduleInfo, sessionProvider).apply { registerCommonComponents() registerResolveComponents() - registerJavaSpecificComponents() + registerJavaSpecificResolveComponents() val kotlinScopeProvider = KotlinScopeProvider(::wrapScopeWithJvmMapped) diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/FirJsr305StateContainer.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/FirJsr305StateContainer.kt new file mode 100644 index 00000000000..b3477afae5e --- /dev/null +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/FirJsr305StateContainer.kt @@ -0,0 +1,18 @@ +/* + * 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.java.enhancement + +import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.FirSessionComponent +import org.jetbrains.kotlin.utils.Jsr305State + +class FirJsr305StateContainer(val jsr305State: Jsr305State) : FirSessionComponent { + companion object { + val Default: FirJsr305StateContainer = FirJsr305StateContainer(Jsr305State.DEFAULT) + } +} + +val FirSession.jsr305StateContainer: FirJsr305StateContainer by FirSession.sessionComponentAccessor() diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/SignatureEnhancement.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/SignatureEnhancement.kt index 03eca1fbced..013f4e1c9bd 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/SignatureEnhancement.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/SignatureEnhancement.kt @@ -47,7 +47,7 @@ class FirSignatureEnhancement( private val javaTypeParameterStack: JavaTypeParameterStack = if (owner is FirJavaClass) owner.javaTypeParameterStack else JavaTypeParameterStack.EMPTY - private val jsr305State: Jsr305State = session.jsr305State ?: Jsr305State.DEFAULT + private val jsr305State: Jsr305State = session.jsr305StateContainer.jsr305State private val typeQualifierResolver = FirAnnotationTypeQualifierResolver(session, jsr305State) 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 9c1668d694c..4b83a5d82d8 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirSession.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirSession.kt @@ -30,8 +30,6 @@ abstract class FirSession @PrivateSessionConstructor constructor(val sessionProv open val moduleInfo: ModuleInfo? get() = null - val jsr305State: Jsr305State? get() = null - val builtinTypes: BuiltinTypes = BuiltinTypes() final override val typeRegistry: TypeRegistry = Companion diff --git a/compiler/testData/diagnostics/tests/incompleteCode/diagnosticWithSyntaxError/typeReferenceError.fir.kt b/compiler/testData/diagnostics/tests/incompleteCode/diagnosticWithSyntaxError/typeReferenceError.fir.kt index 2005bb1c589..d8525e9c207 100644 --- a/compiler/testData/diagnostics/tests/incompleteCode/diagnosticWithSyntaxError/typeReferenceError.fir.kt +++ b/compiler/testData/diagnostics/tests/incompleteCode/diagnosticWithSyntaxError/typeReferenceError.fir.kt @@ -1,3 +1,3 @@ package typeReferenceError -class Pair<:(val c: fun main() \ No newline at end of file +class Pair<:(val c: fun main() diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/sessions/FirIdeSessionFactory.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/sessions/FirIdeSessionFactory.kt index e0608083345..25bef97d500 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/sessions/FirIdeSessionFactory.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/sessions/FirIdeSessionFactory.kt @@ -23,7 +23,7 @@ import org.jetbrains.kotlin.fir.resolve.transformers.FirPhaseManager import org.jetbrains.kotlin.fir.scopes.KotlinScopeProvider import org.jetbrains.kotlin.fir.session.FirSessionFactory import org.jetbrains.kotlin.fir.session.registerCommonComponents -import org.jetbrains.kotlin.fir.session.registerJavaSpecificComponents +import org.jetbrains.kotlin.fir.session.registerJavaSpecificResolveComponents import org.jetbrains.kotlin.fir.session.registerResolveComponents import org.jetbrains.kotlin.idea.caches.project.ModuleSourceInfo import org.jetbrains.kotlin.idea.caches.resolve.IDEPackagePartProvider @@ -89,7 +89,7 @@ internal object FirIdeSessionFactory { } ) as FirSymbolProvider ) - registerJavaSpecificComponents() + registerJavaSpecificResolveComponents() FirSessionFactory.FirSessionConfigurator(this).apply { registerCommonCheckers() init() @@ -115,7 +115,7 @@ internal object FirIdeSessionFactory { val kotlinClassFinder = VirtualFileFinderFactory.getInstance(project).create(searchScope) return FirIdeLibrariesSession(moduleInfo, sessionProvider, searchScope).apply { registerCommonComponents() - registerJavaSpecificComponents() + registerJavaSpecificResolveComponents() val javaSymbolProvider = JavaSymbolProvider(this, sessionProvider.project, searchScope)