[FIR] Refactor session components initialization
From now all customization of session should perform via DSL which declared in FirSessionFactory. Registration or mutation session services from other places is prohibited
This commit is contained in:
+6
-9
@@ -64,15 +64,12 @@ import org.jetbrains.kotlin.fir.backend.jvm.FirJvmClassCodegen
|
|||||||
import org.jetbrains.kotlin.fir.backend.jvm.FirJvmKotlinMangler
|
import org.jetbrains.kotlin.fir.backend.jvm.FirJvmKotlinMangler
|
||||||
import org.jetbrains.kotlin.fir.backend.jvm.FirJvmVisibilityConverter
|
import org.jetbrains.kotlin.fir.backend.jvm.FirJvmVisibilityConverter
|
||||||
import org.jetbrains.kotlin.fir.builder.RawFirBuilder
|
import org.jetbrains.kotlin.fir.builder.RawFirBuilder
|
||||||
import org.jetbrains.kotlin.fir.extensions.BunchOfRegisteredExtensions
|
import org.jetbrains.kotlin.fir.checkers.registerExtendedCommonCheckers
|
||||||
import org.jetbrains.kotlin.fir.extensions.extensionService
|
|
||||||
import org.jetbrains.kotlin.fir.extensions.registerExtensions
|
|
||||||
import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider
|
import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider
|
||||||
import org.jetbrains.kotlin.fir.resolve.firProvider
|
import org.jetbrains.kotlin.fir.resolve.firProvider
|
||||||
import org.jetbrains.kotlin.fir.resolve.providers.impl.FirProviderImpl
|
import org.jetbrains.kotlin.fir.resolve.providers.impl.FirProviderImpl
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.FirTotalResolveProcessor
|
import org.jetbrains.kotlin.fir.resolve.transformers.FirTotalResolveProcessor
|
||||||
import org.jetbrains.kotlin.fir.session.FirSessionFactory
|
import org.jetbrains.kotlin.fir.session.FirSessionFactory
|
||||||
import org.jetbrains.kotlin.fir.session.registerExtendedCheckersComponent
|
|
||||||
import org.jetbrains.kotlin.idea.MainFunctionDetector
|
import org.jetbrains.kotlin.idea.MainFunctionDetector
|
||||||
import org.jetbrains.kotlin.ir.backend.jvm.jvmResolveLibraries
|
import org.jetbrains.kotlin.ir.backend.jvm.jvmResolveLibraries
|
||||||
import org.jetbrains.kotlin.ir.backend.jvm.serialization.JvmManglerDesc
|
import org.jetbrains.kotlin.ir.backend.jvm.serialization.JvmManglerDesc
|
||||||
@@ -353,7 +350,11 @@ object KotlinToJVMBytecodeCompiler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
val moduleInfo = FirJvmModuleInfo(module.getModuleName())
|
val moduleInfo = FirJvmModuleInfo(module.getModuleName())
|
||||||
val session: FirSession = FirSessionFactory.createJavaModuleBasedSession(moduleInfo, provider, scope).also {
|
val session: FirSession = FirSessionFactory.createJavaModuleBasedSession(moduleInfo, provider, scope) {
|
||||||
|
if (extendedAnalysisMode) {
|
||||||
|
registerExtendedCommonCheckers()
|
||||||
|
}
|
||||||
|
}.also {
|
||||||
val dependenciesInfo = FirJvmModuleInfo(Name.special("<dependencies>"))
|
val dependenciesInfo = FirJvmModuleInfo(Name.special("<dependencies>"))
|
||||||
moduleInfo.dependencies.add(dependenciesInfo)
|
moduleInfo.dependencies.add(dependenciesInfo)
|
||||||
val librariesScope = ProjectScope.getLibrariesScope(project)
|
val librariesScope = ProjectScope.getLibrariesScope(project)
|
||||||
@@ -361,10 +362,6 @@ object KotlinToJVMBytecodeCompiler {
|
|||||||
dependenciesInfo, provider, librariesScope,
|
dependenciesInfo, provider, librariesScope,
|
||||||
project, environment.createPackagePartProvider(librariesScope)
|
project, environment.createPackagePartProvider(librariesScope)
|
||||||
)
|
)
|
||||||
it.extensionService.registerExtensions(BunchOfRegisteredExtensions.empty())
|
|
||||||
if (extendedAnalysisMode) {
|
|
||||||
it.registerExtendedCheckersComponent()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
val firProvider = (session.firProvider as FirProviderImpl)
|
val firProvider = (session.firProvider as FirProviderImpl)
|
||||||
val builder = RawFirBuilder(session, firProvider.kotlinScopeProvider, stubMode = false)
|
val builder = RawFirBuilder(session, firProvider.kotlinScopeProvider, stubMode = false)
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.analysis
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.FirSessionComponent
|
import org.jetbrains.kotlin.fir.FirSessionComponent
|
||||||
|
import org.jetbrains.kotlin.fir.SessionConfiguration
|
||||||
import org.jetbrains.kotlin.fir.analysis.cfa.AbstractFirPropertyInitializationChecker
|
import org.jetbrains.kotlin.fir.analysis.cfa.AbstractFirPropertyInitializationChecker
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.cfa.FirControlFlowChecker
|
import org.jetbrains.kotlin.fir.analysis.checkers.cfa.FirControlFlowChecker
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.*
|
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.*
|
||||||
@@ -14,29 +15,23 @@ import org.jetbrains.kotlin.fir.analysis.checkers.expression.*
|
|||||||
import org.jetbrains.kotlin.fir.analysis.extensions.FirAdditionalCheckersExtension
|
import org.jetbrains.kotlin.fir.analysis.extensions.FirAdditionalCheckersExtension
|
||||||
|
|
||||||
class CheckersComponent : FirSessionComponent {
|
class CheckersComponent : FirSessionComponent {
|
||||||
companion object {
|
|
||||||
fun componentWithDefaultCheckers(): CheckersComponent {
|
|
||||||
return CheckersComponent().apply {
|
|
||||||
register(CommonDeclarationCheckers)
|
|
||||||
register(CommonExpressionCheckers)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
val declarationCheckers: DeclarationCheckers get() = _declarationCheckers
|
val declarationCheckers: DeclarationCheckers get() = _declarationCheckers
|
||||||
private val _declarationCheckers = ComposedDeclarationCheckers()
|
private val _declarationCheckers = ComposedDeclarationCheckers()
|
||||||
|
|
||||||
val expressionCheckers: ExpressionCheckers get() = _expressionCheckers
|
val expressionCheckers: ExpressionCheckers get() = _expressionCheckers
|
||||||
private val _expressionCheckers = ComposedExpressionCheckers()
|
private val _expressionCheckers = ComposedExpressionCheckers()
|
||||||
|
|
||||||
|
@SessionConfiguration
|
||||||
fun register(checkers: DeclarationCheckers) {
|
fun register(checkers: DeclarationCheckers) {
|
||||||
_declarationCheckers.register(checkers)
|
_declarationCheckers.register(checkers)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SessionConfiguration
|
||||||
fun register(checkers: ExpressionCheckers) {
|
fun register(checkers: ExpressionCheckers) {
|
||||||
_expressionCheckers.register(checkers)
|
_expressionCheckers.register(checkers)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SessionConfiguration
|
||||||
fun register(checkers: FirAdditionalCheckersExtension) {
|
fun register(checkers: FirAdditionalCheckersExtension) {
|
||||||
register(checkers.declarationCheckers)
|
register(checkers.declarationCheckers)
|
||||||
register(checkers.expressionCheckers)
|
register(checkers.expressionCheckers)
|
||||||
|
|||||||
-17
@@ -5,20 +5,3 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fir.analysis.checkers.expression
|
package org.jetbrains.kotlin.fir.analysis.checkers.expression
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirSealedClassConstructorCallChecker
|
|
||||||
|
|
||||||
object CommonExpressionCheckers : ExpressionCheckers() {
|
|
||||||
override val expressionCheckers: List<FirBasicExpresionChecker> = listOf()
|
|
||||||
override val qualifiedAccessCheckers: List<FirQualifiedAccessChecker> = listOf(
|
|
||||||
FirSuperNotAvailableChecker,
|
|
||||||
FirNotASupertypeChecker,
|
|
||||||
FirSuperclassNotAccessibleFromInterfaceChecker,
|
|
||||||
FirAbstractSuperCallChecker,
|
|
||||||
FirQualifiedSupertypeExtendedByOtherSupertypeChecker,
|
|
||||||
FirProjectionsOnNonClassTypeArgumentChecker,
|
|
||||||
FirUpperBoundViolatedChecker,
|
|
||||||
FirTypeArgumentsNotAllowedExpressionChecker,
|
|
||||||
FirSealedClassConstructorCallChecker,
|
|
||||||
)
|
|
||||||
override val functionCallCheckers: List<FirFunctionCallChecker> = listOf()
|
|
||||||
}
|
|
||||||
+1
-10
@@ -6,13 +6,9 @@
|
|||||||
package org.jetbrains.kotlin.fir.analysis.collectors
|
package org.jetbrains.kotlin.fir.analysis.collectors
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkersComponent
|
|
||||||
import org.jetbrains.kotlin.fir.analysis.extensions.additionalCheckers
|
|
||||||
import org.jetbrains.kotlin.fir.extensions.extensionService
|
|
||||||
|
|
||||||
object FirDiagnosticsCollector {
|
object FirDiagnosticsCollector {
|
||||||
fun create(session: FirSession): AbstractDiagnosticCollector {
|
fun create(session: FirSession): AbstractDiagnosticCollector {
|
||||||
session.registerAdditionalCheckers()
|
|
||||||
val collector = SimpleDiagnosticsCollector(session)
|
val collector = SimpleDiagnosticsCollector(session)
|
||||||
collector.registerAllComponents()
|
collector.registerAllComponents()
|
||||||
return collector
|
return collector
|
||||||
@@ -21,13 +17,8 @@ object FirDiagnosticsCollector {
|
|||||||
// Use in CLI compiler
|
// Use in CLI compiler
|
||||||
@Suppress("unused")
|
@Suppress("unused")
|
||||||
fun createParallel(session: FirSession): AbstractDiagnosticCollector {
|
fun createParallel(session: FirSession): AbstractDiagnosticCollector {
|
||||||
session.registerAdditionalCheckers()
|
|
||||||
val collector = ParallelDiagnosticsCollector(session, numberOfThreads = 4)
|
val collector = ParallelDiagnosticsCollector(session, numberOfThreads = 4)
|
||||||
collector.registerAllComponents()
|
collector.registerAllComponents()
|
||||||
return collector
|
return collector
|
||||||
}
|
}
|
||||||
|
}
|
||||||
private fun FirSession.registerAdditionalCheckers() {
|
|
||||||
extensionService.additionalCheckers.forEach(checkersComponent::register)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
/*
|
||||||
|
* 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.checkers
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.ExtendedDeclarationCheckers
|
||||||
|
import org.jetbrains.kotlin.fir.analysis.checkers.expression.ExtendedExpressionCheckers
|
||||||
|
import org.jetbrains.kotlin.fir.session.FirSessionFactory
|
||||||
|
|
||||||
|
fun FirSessionFactory.FirSessionConfigurator.registerCommonCheckers() {
|
||||||
|
useCheckers(CommonDeclarationCheckers)
|
||||||
|
useCheckers(CommonExpressionCheckers)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun FirSessionFactory.FirSessionConfigurator.registerExtendedCommonCheckers() {
|
||||||
|
useCheckers(ExtendedExpressionCheckers)
|
||||||
|
useCheckers(ExtendedDeclarationCheckers)
|
||||||
|
}
|
||||||
+5
-6
@@ -3,18 +3,17 @@
|
|||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* 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.analysis.checkers.declaration
|
package org.jetbrains.kotlin.fir.checkers
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.analysis.cfa.AbstractFirPropertyInitializationChecker
|
import org.jetbrains.kotlin.fir.analysis.cfa.AbstractFirPropertyInitializationChecker
|
||||||
import org.jetbrains.kotlin.fir.analysis.cfa.FirCallsEffectAnalyzer
|
import org.jetbrains.kotlin.fir.analysis.cfa.FirCallsEffectAnalyzer
|
||||||
import org.jetbrains.kotlin.fir.analysis.cfa.FirPropertyInitializationAnalyzer
|
import org.jetbrains.kotlin.fir.analysis.cfa.FirPropertyInitializationAnalyzer
|
||||||
import org.jetbrains.kotlin.fir.analysis.cfa.FirReturnsImpliesAnalyzer
|
import org.jetbrains.kotlin.fir.analysis.cfa.FirReturnsImpliesAnalyzer
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.cfa.FirControlFlowChecker
|
import org.jetbrains.kotlin.fir.analysis.checkers.cfa.FirControlFlowChecker
|
||||||
|
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.*
|
||||||
|
|
||||||
object CommonDeclarationCheckers : DeclarationCheckers() {
|
object CommonDeclarationCheckers : DeclarationCheckers() {
|
||||||
override val fileCheckers: List<FirFileChecker> = listOf(
|
override val fileCheckers: List<FirFileChecker> = listOf()
|
||||||
|
|
||||||
)
|
|
||||||
|
|
||||||
override val declarationCheckers: List<FirBasicDeclarationChecker> = listOf(
|
override val declarationCheckers: List<FirBasicDeclarationChecker> = listOf(
|
||||||
FirAnnotationClassDeclarationChecker,
|
FirAnnotationClassDeclarationChecker,
|
||||||
@@ -27,7 +26,7 @@ object CommonDeclarationCheckers : DeclarationCheckers() {
|
|||||||
FirConflictingProjectionChecker,
|
FirConflictingProjectionChecker,
|
||||||
)
|
)
|
||||||
|
|
||||||
override val memberDeclarationCheckers: List<FirMemberDeclarationChecker> =listOf(
|
override val memberDeclarationCheckers: List<FirMemberDeclarationChecker> = listOf(
|
||||||
FirInfixFunctionDeclarationChecker,
|
FirInfixFunctionDeclarationChecker,
|
||||||
FirExposedVisibilityDeclarationChecker,
|
FirExposedVisibilityDeclarationChecker,
|
||||||
FirCommonConstructorDelegationIssuesChecker,
|
FirCommonConstructorDelegationIssuesChecker,
|
||||||
@@ -59,4 +58,4 @@ object CommonDeclarationCheckers : DeclarationCheckers() {
|
|||||||
override val variableAssignmentCfaBasedCheckers: List<AbstractFirPropertyInitializationChecker> = listOf(
|
override val variableAssignmentCfaBasedCheckers: List<AbstractFirPropertyInitializationChecker> = listOf(
|
||||||
FirPropertyInitializationAnalyzer
|
FirPropertyInitializationAnalyzer
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
+25
@@ -0,0 +1,25 @@
|
|||||||
|
/*
|
||||||
|
* 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.checkers
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirSealedClassConstructorCallChecker
|
||||||
|
import org.jetbrains.kotlin.fir.analysis.checkers.expression.*
|
||||||
|
|
||||||
|
object CommonExpressionCheckers : ExpressionCheckers() {
|
||||||
|
override val expressionCheckers: List<FirBasicExpresionChecker> = listOf()
|
||||||
|
override val qualifiedAccessCheckers: List<FirQualifiedAccessChecker> = listOf(
|
||||||
|
FirSuperNotAvailableChecker,
|
||||||
|
FirNotASupertypeChecker,
|
||||||
|
FirSuperclassNotAccessibleFromInterfaceChecker,
|
||||||
|
FirAbstractSuperCallChecker,
|
||||||
|
FirQualifiedSupertypeExtendedByOtherSupertypeChecker,
|
||||||
|
FirProjectionsOnNonClassTypeArgumentChecker,
|
||||||
|
FirUpperBoundViolatedChecker,
|
||||||
|
FirTypeArgumentsNotAllowedExpressionChecker,
|
||||||
|
FirSealedClassConstructorCallChecker,
|
||||||
|
)
|
||||||
|
override val functionCallCheckers: List<FirFunctionCallChecker> = listOf()
|
||||||
|
}
|
||||||
+20
-32
@@ -5,30 +5,25 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fir.session
|
package org.jetbrains.kotlin.fir.session
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.FirModuleBasedSession
|
import org.jetbrains.kotlin.fir.*
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
|
||||||
import org.jetbrains.kotlin.fir.analysis.CheckersComponent
|
import org.jetbrains.kotlin.fir.analysis.CheckersComponent
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.ExtendedDeclarationCheckers
|
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.expression.ExtendedExpressionCheckers
|
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkersComponent
|
|
||||||
import org.jetbrains.kotlin.fir.extensions.FirExtensionService
|
import org.jetbrains.kotlin.fir.extensions.FirExtensionService
|
||||||
import org.jetbrains.kotlin.fir.extensions.FirPredicateBasedProvider
|
import org.jetbrains.kotlin.fir.extensions.FirPredicateBasedProvider
|
||||||
import org.jetbrains.kotlin.fir.extensions.FirRegisteredPluginAnnotations
|
import org.jetbrains.kotlin.fir.extensions.FirRegisteredPluginAnnotations
|
||||||
import org.jetbrains.kotlin.fir.java.registerJavaVisibilityChecker
|
import org.jetbrains.kotlin.fir.java.FirJavaVisibilityChecker
|
||||||
import org.jetbrains.kotlin.fir.registerJvmEffectiveVisibilityResolver
|
import org.jetbrains.kotlin.fir.resolve.*
|
||||||
import org.jetbrains.kotlin.fir.resolve.FirQualifierResolver
|
import org.jetbrains.kotlin.fir.resolve.calls.ConeCallConflictResolverFactory
|
||||||
import org.jetbrains.kotlin.fir.resolve.FirTypeResolver
|
import org.jetbrains.kotlin.fir.resolve.calls.FirSyntheticNamesProvider
|
||||||
import org.jetbrains.kotlin.fir.resolve.calls.jvm.registerJvmCallConflictResolverFactory
|
import org.jetbrains.kotlin.fir.resolve.calls.jvm.JvmCallConflictResolverFactory
|
||||||
import org.jetbrains.kotlin.fir.resolve.providers.impl.FirQualifierResolverImpl
|
import org.jetbrains.kotlin.fir.resolve.providers.impl.FirQualifierResolverImpl
|
||||||
import org.jetbrains.kotlin.fir.resolve.providers.impl.FirTypeResolverImpl
|
import org.jetbrains.kotlin.fir.resolve.providers.impl.FirTypeResolverImpl
|
||||||
import org.jetbrains.kotlin.fir.resolve.registerJavaClassMapper
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.registerJavaSyntheticNamesProvider
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.plugin.GeneratedClassIndex
|
import org.jetbrains.kotlin.fir.resolve.transformers.plugin.GeneratedClassIndex
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.FirDeclaredMemberScopeProvider
|
import org.jetbrains.kotlin.fir.scopes.impl.FirDeclaredMemberScopeProvider
|
||||||
import org.jetbrains.kotlin.fir.types.FirCorrespondingSupertypesCache
|
import org.jetbrains.kotlin.fir.types.FirCorrespondingSupertypesCache
|
||||||
|
|
||||||
// -------------------------- Required components --------------------------
|
// -------------------------- Required components --------------------------
|
||||||
|
|
||||||
|
@OptIn(SessionConfiguration::class)
|
||||||
fun FirSession.registerCommonComponents() {
|
fun FirSession.registerCommonComponents() {
|
||||||
register(FirDeclaredMemberScopeProvider::class, FirDeclaredMemberScopeProvider())
|
register(FirDeclaredMemberScopeProvider::class, FirDeclaredMemberScopeProvider())
|
||||||
register(FirCorrespondingSupertypesCache::class, FirCorrespondingSupertypesCache(this))
|
register(FirCorrespondingSupertypesCache::class, FirCorrespondingSupertypesCache(this))
|
||||||
@@ -41,31 +36,24 @@ fun FirSession.registerCommonComponents() {
|
|||||||
|
|
||||||
// -------------------------- Resolve components --------------------------
|
// -------------------------- Resolve components --------------------------
|
||||||
|
|
||||||
// TODO: rename to `registerCommonResolveComponents
|
/*
|
||||||
|
* Resolve components which are same on all platforms
|
||||||
|
*/
|
||||||
|
@OptIn(SessionConfiguration::class)
|
||||||
fun FirModuleBasedSession.registerResolveComponents() {
|
fun FirModuleBasedSession.registerResolveComponents() {
|
||||||
register(FirQualifierResolver::class, FirQualifierResolverImpl(this))
|
register(FirQualifierResolver::class, FirQualifierResolverImpl(this))
|
||||||
register(FirTypeResolver::class, FirTypeResolverImpl(this))
|
register(FirTypeResolver::class, FirTypeResolverImpl(this))
|
||||||
|
register(CheckersComponent::class, CheckersComponent())
|
||||||
}
|
}
|
||||||
|
|
||||||
fun FirModuleBasedSession.registerJavaSpecificComponents() {
|
|
||||||
registerJavaVisibilityChecker()
|
|
||||||
registerJvmCallConflictResolverFactory()
|
|
||||||
registerJvmEffectiveVisibilityResolver()
|
|
||||||
registerJavaClassMapper()
|
|
||||||
registerJavaSyntheticNamesProvider()
|
|
||||||
}
|
|
||||||
|
|
||||||
// -------------------------- Checker components --------------------------
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* TODO: in future rename to `registerCheckersComponent` and configure
|
* Resolve components which have specific implementations on JVM
|
||||||
* exact checkers according to platforms of current session
|
|
||||||
*/
|
*/
|
||||||
fun FirModuleBasedSession.registerCheckersComponent() {
|
@OptIn(SessionConfiguration::class)
|
||||||
register(CheckersComponent::class, CheckersComponent.componentWithDefaultCheckers())
|
fun FirModuleBasedSession.registerJavaSpecificComponents() {
|
||||||
}
|
register(FirVisibilityChecker::class, FirJavaVisibilityChecker)
|
||||||
|
register(ConeCallConflictResolverFactory::class, JvmCallConflictResolverFactory)
|
||||||
fun FirModuleBasedSession.registerExtendedCheckersComponent() {
|
register(FirEffectiveVisibilityResolver::class, FirJvmEffectiveVisibilityResolver(this))
|
||||||
this.checkersComponent.register(ExtendedExpressionCheckers)
|
register(FirPlatformClassMapper::class, FirJavaClassMapper(this))
|
||||||
this.checkersComponent.register(ExtendedDeclarationCheckers)
|
register(FirSyntheticNamesProvider::class, FirJavaSyntheticNamesProvider)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,8 +10,18 @@ import com.intellij.psi.PsiElementFinder
|
|||||||
import com.intellij.psi.search.GlobalSearchScope
|
import com.intellij.psi.search.GlobalSearchScope
|
||||||
import org.jetbrains.annotations.TestOnly
|
import org.jetbrains.annotations.TestOnly
|
||||||
import org.jetbrains.kotlin.analyzer.ModuleInfo
|
import org.jetbrains.kotlin.analyzer.ModuleInfo
|
||||||
|
import org.jetbrains.kotlin.fir.FirModuleBasedSession
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.PrivateSessionConstructor
|
import org.jetbrains.kotlin.fir.PrivateSessionConstructor
|
||||||
|
import org.jetbrains.kotlin.fir.SessionConfiguration
|
||||||
|
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.DeclarationCheckers
|
||||||
|
import org.jetbrains.kotlin.fir.analysis.checkers.expression.ExpressionCheckers
|
||||||
|
import org.jetbrains.kotlin.fir.analysis.checkersComponent
|
||||||
|
import org.jetbrains.kotlin.fir.analysis.extensions.additionalCheckers
|
||||||
|
import org.jetbrains.kotlin.fir.checkers.registerCommonCheckers
|
||||||
|
import org.jetbrains.kotlin.fir.extensions.BunchOfRegisteredExtensions
|
||||||
|
import org.jetbrains.kotlin.fir.extensions.extensionService
|
||||||
|
import org.jetbrains.kotlin.fir.extensions.registerExtensions
|
||||||
import org.jetbrains.kotlin.fir.java.*
|
import org.jetbrains.kotlin.fir.java.*
|
||||||
import org.jetbrains.kotlin.fir.java.deserialization.KotlinDeserializedJvmSymbolsProvider
|
import org.jetbrains.kotlin.fir.java.deserialization.KotlinDeserializedJvmSymbolsProvider
|
||||||
import org.jetbrains.kotlin.fir.resolve.providers.FirProvider
|
import org.jetbrains.kotlin.fir.resolve.providers.FirProvider
|
||||||
@@ -23,18 +33,40 @@ import org.jetbrains.kotlin.load.java.JavaClassFinderImpl
|
|||||||
import org.jetbrains.kotlin.load.kotlin.PackagePartProvider
|
import org.jetbrains.kotlin.load.kotlin.PackagePartProvider
|
||||||
import org.jetbrains.kotlin.load.kotlin.VirtualFileFinderFactory
|
import org.jetbrains.kotlin.load.kotlin.VirtualFileFinderFactory
|
||||||
|
|
||||||
@OptIn(PrivateSessionConstructor::class)
|
@OptIn(PrivateSessionConstructor::class, SessionConfiguration::class)
|
||||||
object FirSessionFactory {
|
object FirSessionFactory {
|
||||||
|
class FirSessionConfigurator(private val session: FirModuleBasedSession) {
|
||||||
|
private val registeredExtensions = mutableListOf<BunchOfRegisteredExtensions>(BunchOfRegisteredExtensions.empty())
|
||||||
|
|
||||||
|
fun registerExtensions(extensions: BunchOfRegisteredExtensions) {
|
||||||
|
registeredExtensions += extensions
|
||||||
|
}
|
||||||
|
|
||||||
|
fun useCheckers(checkers: ExpressionCheckers) {
|
||||||
|
session.checkersComponent.register(checkers)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun useCheckers(checkers: DeclarationCheckers) {
|
||||||
|
session.checkersComponent.register(checkers)
|
||||||
|
}
|
||||||
|
|
||||||
|
@SessionConfiguration
|
||||||
|
fun configure() {
|
||||||
|
session.extensionService.registerExtensions(registeredExtensions.reduce(BunchOfRegisteredExtensions::plus))
|
||||||
|
session.extensionService.additionalCheckers.forEach(session.checkersComponent::register)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun createJavaModuleBasedSession(
|
fun createJavaModuleBasedSession(
|
||||||
moduleInfo: ModuleInfo,
|
moduleInfo: ModuleInfo,
|
||||||
sessionProvider: FirProjectSessionProvider,
|
sessionProvider: FirProjectSessionProvider,
|
||||||
scope: GlobalSearchScope,
|
scope: GlobalSearchScope,
|
||||||
dependenciesProvider: FirSymbolProvider? = null
|
dependenciesProvider: FirSymbolProvider? = null,
|
||||||
|
init: FirSessionConfigurator.() -> Unit = {}
|
||||||
): FirJavaModuleBasedSession {
|
): FirJavaModuleBasedSession {
|
||||||
return FirJavaModuleBasedSession(moduleInfo, sessionProvider).apply {
|
return FirJavaModuleBasedSession(moduleInfo, sessionProvider).apply {
|
||||||
registerCommonComponents()
|
registerCommonComponents()
|
||||||
registerResolveComponents()
|
registerResolveComponents()
|
||||||
registerCheckersComponent()
|
|
||||||
registerJavaSpecificComponents()
|
registerJavaSpecificComponents()
|
||||||
|
|
||||||
val kotlinScopeProvider = KotlinScopeProvider(::wrapScopeWithJvmMapped)
|
val kotlinScopeProvider = KotlinScopeProvider(::wrapScopeWithJvmMapped)
|
||||||
@@ -54,6 +86,11 @@ object FirSessionFactory {
|
|||||||
) as FirSymbolProvider
|
) as FirSymbolProvider
|
||||||
)
|
)
|
||||||
|
|
||||||
|
FirSessionConfigurator(this).apply {
|
||||||
|
registerCommonCheckers()
|
||||||
|
init()
|
||||||
|
}.configure()
|
||||||
|
|
||||||
PsiElementFinder.EP.getPoint(sessionProvider.project)
|
PsiElementFinder.EP.getPoint(sessionProvider.project)
|
||||||
.registerExtension(FirJavaElementFinder(this, sessionProvider.project), sessionProvider.project)
|
.registerExtension(FirJavaElementFinder(this, sessionProvider.project), sessionProvider.project)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,7 +42,3 @@ object FirJavaVisibilityChecker : FirVisibilityChecker() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun FirSession.registerJavaVisibilityChecker() {
|
|
||||||
register(FirVisibilityChecker::class, FirJavaVisibilityChecker)
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -15,7 +15,3 @@ class FirJvmEffectiveVisibilityResolver(session: FirSession) : FirEffectiveVisib
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun FirSession.registerJvmEffectiveVisibilityResolver() {
|
|
||||||
register(FirEffectiveVisibilityResolver::class, FirJvmEffectiveVisibilityResolver(this))
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -16,7 +16,3 @@ class FirJavaClassMapper(private val session: FirSession) : FirPlatformClassMapp
|
|||||||
return javaClassId?.let { session.firSymbolProvider.getClassLikeSymbolByFqName(it)?.fir } as? FirRegularClass
|
return javaClassId?.let { session.firSymbolProvider.getClassLikeSymbolByFqName(it)?.fir } as? FirRegularClass
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun FirSession.registerJavaClassMapper() {
|
|
||||||
register(FirPlatformClassMapper::class, FirJavaClassMapper(this))
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -5,7 +5,6 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fir.resolve
|
package org.jetbrains.kotlin.fir.resolve
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.calls.FirSyntheticNamesProvider
|
import org.jetbrains.kotlin.fir.resolve.calls.FirSyntheticNamesProvider
|
||||||
import org.jetbrains.kotlin.load.java.propertyNameByGetMethodName
|
import org.jetbrains.kotlin.load.java.propertyNameByGetMethodName
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
@@ -41,6 +40,3 @@ object FirJavaSyntheticNamesProvider : FirSyntheticNamesProvider() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun FirSession.registerJavaSyntheticNamesProvider() {
|
|
||||||
register(FirSyntheticNamesProvider::class, FirJavaSyntheticNamesProvider)
|
|
||||||
}
|
|
||||||
|
|||||||
-5
@@ -5,7 +5,6 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fir.resolve.calls.jvm
|
package org.jetbrains.kotlin.fir.resolve.calls.jvm
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.calls.ConeCallConflictResolverFactory
|
import org.jetbrains.kotlin.fir.resolve.calls.ConeCallConflictResolverFactory
|
||||||
import org.jetbrains.kotlin.fir.resolve.calls.ConeCompositeConflictResolver
|
import org.jetbrains.kotlin.fir.resolve.calls.ConeCompositeConflictResolver
|
||||||
import org.jetbrains.kotlin.fir.resolve.calls.ConeOverloadConflictResolver
|
import org.jetbrains.kotlin.fir.resolve.calls.ConeOverloadConflictResolver
|
||||||
@@ -25,7 +24,3 @@ object JvmCallConflictResolverFactory : ConeCallConflictResolverFactory() {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun FirSession.registerJvmCallConflictResolverFactory() {
|
|
||||||
register(ConeCallConflictResolverFactory::class, JvmCallConflictResolverFactory)
|
|
||||||
}
|
|
||||||
@@ -6,6 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.fir.extensions
|
package org.jetbrains.kotlin.fir.extensions
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
|
import org.jetbrains.kotlin.fir.SessionConfiguration
|
||||||
import kotlin.reflect.KClass
|
import kotlin.reflect.KClass
|
||||||
|
|
||||||
abstract class FirExtensionRegistrar {
|
abstract class FirExtensionRegistrar {
|
||||||
@@ -76,8 +77,14 @@ class BunchOfRegisteredExtensions @PluginServicesInitialization constructor(
|
|||||||
return BunchOfRegisteredExtensions(extensions)
|
return BunchOfRegisteredExtensions(extensions)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@OptIn(PluginServicesInitialization::class)
|
||||||
|
operator fun plus(other: BunchOfRegisteredExtensions): BunchOfRegisteredExtensions {
|
||||||
|
return BunchOfRegisteredExtensions(extensions + other.extensions)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SessionConfiguration
|
||||||
@OptIn(PluginServicesInitialization::class)
|
@OptIn(PluginServicesInitialization::class)
|
||||||
fun FirExtensionService.registerExtensions(registeredExtensions: BunchOfRegisteredExtensions) {
|
fun FirExtensionService.registerExtensions(registeredExtensions: BunchOfRegisteredExtensions) {
|
||||||
registeredExtensions.extensions.forEach { registerExtensions(it.kClass, it.extensionFactories) }
|
registeredExtensions.extensions.forEach { registerExtensions(it.kClass, it.extensionFactories) }
|
||||||
|
|||||||
@@ -18,6 +18,9 @@ import kotlin.reflect.KClass
|
|||||||
@RequiresOptIn
|
@RequiresOptIn
|
||||||
annotation class PrivateSessionConstructor
|
annotation class PrivateSessionConstructor
|
||||||
|
|
||||||
|
@RequiresOptIn
|
||||||
|
annotation class SessionConfiguration
|
||||||
|
|
||||||
interface FirSessionComponent
|
interface FirSessionComponent
|
||||||
|
|
||||||
abstract class FirSession @PrivateSessionConstructor constructor(val sessionProvider: FirSessionProvider?) : ComponentArrayOwner<FirSessionComponent, FirSessionComponent>() {
|
abstract class FirSession @PrivateSessionConstructor constructor(val sessionProvider: FirSessionProvider?) : ComponentArrayOwner<FirSessionComponent, FirSessionComponent>() {
|
||||||
@@ -39,6 +42,7 @@ abstract class FirSession @PrivateSessionConstructor constructor(val sessionProv
|
|||||||
|
|
||||||
final override val typeRegistry: TypeRegistry<FirSessionComponent, FirSessionComponent> = Companion
|
final override val typeRegistry: TypeRegistry<FirSessionComponent, FirSessionComponent> = Companion
|
||||||
|
|
||||||
|
@SessionConfiguration
|
||||||
fun register(tClass: KClass<out FirSessionComponent>, value: FirSessionComponent) {
|
fun register(tClass: KClass<out FirSessionComponent>, value: FirSessionComponent) {
|
||||||
registerComponent(tClass, value)
|
registerComponent(tClass, value)
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-7
@@ -5,13 +5,11 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fir
|
package org.jetbrains.kotlin.fir
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.ExtendedDeclarationCheckers
|
import org.jetbrains.kotlin.fir.checkers.registerExtendedCommonCheckers
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.expression.ExtendedExpressionCheckers
|
import org.jetbrains.kotlin.fir.session.FirSessionFactory
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkersComponent
|
|
||||||
|
|
||||||
abstract class AbstractExtendedFirDiagnosticsTest : AbstractFirDiagnosticsTest() {
|
abstract class AbstractExtendedFirDiagnosticsTest : AbstractFirDiagnosticsTest() {
|
||||||
override fun configureSession(session: FirSession) {
|
override fun FirSessionFactory.FirSessionConfigurator.configureSession() {
|
||||||
session.checkersComponent.register(ExtendedDeclarationCheckers)
|
registerExtendedCommonCheckers()
|
||||||
session.checkersComponent.register(ExtendedExpressionCheckers)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-7
@@ -5,13 +5,11 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fir
|
package org.jetbrains.kotlin.fir
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.ExtendedDeclarationCheckers
|
import org.jetbrains.kotlin.fir.checkers.registerExtendedCommonCheckers
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.expression.ExtendedExpressionCheckers
|
import org.jetbrains.kotlin.fir.session.FirSessionFactory
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkersComponent
|
|
||||||
|
|
||||||
abstract class AbstractExtendedFirWithLightTreeDiagnosticsTest : AbstractFirDiagnosticsWithLightTreeTest() {
|
abstract class AbstractExtendedFirWithLightTreeDiagnosticsTest : AbstractFirDiagnosticsWithLightTreeTest() {
|
||||||
override fun configureSession(session: FirSession) {
|
override fun FirSessionFactory.FirSessionConfigurator.configureSession() {
|
||||||
session.checkersComponent.register(ExtendedDeclarationCheckers)
|
registerExtendedCommonCheckers()
|
||||||
session.checkersComponent.register(ExtendedExpressionCheckers)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+9
-12
@@ -27,9 +27,6 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirPsiDiagnostic
|
|||||||
import org.jetbrains.kotlin.fir.builder.RawFirBuilder
|
import org.jetbrains.kotlin.fir.builder.RawFirBuilder
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||||
import org.jetbrains.kotlin.fir.extensions.BunchOfRegisteredExtensions
|
import org.jetbrains.kotlin.fir.extensions.BunchOfRegisteredExtensions
|
||||||
import org.jetbrains.kotlin.fir.extensions.FirExtensionService
|
|
||||||
import org.jetbrains.kotlin.fir.extensions.extensionService
|
|
||||||
import org.jetbrains.kotlin.fir.extensions.registerExtensions
|
|
||||||
import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider
|
import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider
|
||||||
import org.jetbrains.kotlin.fir.lightTree.LightTree2Fir
|
import org.jetbrains.kotlin.fir.lightTree.LightTree2Fir
|
||||||
import org.jetbrains.kotlin.fir.resolve.firProvider
|
import org.jetbrains.kotlin.fir.resolve.firProvider
|
||||||
@@ -79,18 +76,18 @@ abstract class AbstractFirBaseDiagnosticsTest : BaseDiagnosticsTest() {
|
|||||||
FirSessionFactory.createLibrarySession(
|
FirSessionFactory.createLibrarySession(
|
||||||
builtInsModuleInfo, sessionProvider, allProjectScope, project,
|
builtInsModuleInfo, sessionProvider, allProjectScope, project,
|
||||||
environment.createPackagePartProvider(allProjectScope)
|
environment.createPackagePartProvider(allProjectScope)
|
||||||
).also {
|
)
|
||||||
registerFirExtensions(it.extensionService)
|
|
||||||
}
|
|
||||||
|
|
||||||
val configToSession = modules.mapValues { (config, info) ->
|
val configToSession = modules.mapValues { (config, info) ->
|
||||||
val moduleFiles = groupedByModule.getValue(config)
|
val moduleFiles = groupedByModule.getValue(config)
|
||||||
val scope = TopDownAnalyzerFacadeForJVM.newModuleSearchScope(
|
val scope = TopDownAnalyzerFacadeForJVM.newModuleSearchScope(
|
||||||
project,
|
project,
|
||||||
moduleFiles.mapNotNull { it.ktFile })
|
moduleFiles.mapNotNull { it.ktFile })
|
||||||
FirSessionFactory.createJavaModuleBasedSession(info, sessionProvider, scope).also {
|
FirSessionFactory.createJavaModuleBasedSession(info, sessionProvider, scope) {
|
||||||
registerFirExtensions(it.extensionService)
|
configureSession()
|
||||||
configureSession(it)
|
getFirExtensions()?.let {
|
||||||
|
registerExtensions(it)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -110,8 +107,8 @@ abstract class AbstractFirBaseDiagnosticsTest : BaseDiagnosticsTest() {
|
|||||||
runAnalysis(testDataFile, files, firFilesPerSession)
|
runAnalysis(testDataFile, files, firFilesPerSession)
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun registerFirExtensions(service: FirExtensionService) {
|
protected open fun getFirExtensions(): BunchOfRegisteredExtensions? {
|
||||||
service.registerExtensions(BunchOfRegisteredExtensions.empty())
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun mapKtFilesToFirFiles(session: FirSession, ktFiles: List<KtFile>, firFiles: MutableList<FirFile>, useLightTree: Boolean) {
|
private fun mapKtFilesToFirFiles(session: FirSession, ktFiles: List<KtFile>, firFiles: MutableList<FirFile>, useLightTree: Boolean) {
|
||||||
@@ -333,5 +330,5 @@ abstract class AbstractFirBaseDiagnosticsTest : BaseDiagnosticsTest() {
|
|||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
protected open fun configureSession(session: FirSession) {}
|
protected open fun FirSessionFactory.FirSessionConfigurator.configureSession() {}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,9 +8,6 @@ package org.jetbrains.kotlin.fir
|
|||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.psi.search.GlobalSearchScope
|
import com.intellij.psi.search.GlobalSearchScope
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
||||||
import org.jetbrains.kotlin.fir.extensions.BunchOfRegisteredExtensions
|
|
||||||
import org.jetbrains.kotlin.fir.extensions.extensionService
|
|
||||||
import org.jetbrains.kotlin.fir.extensions.registerExtensions
|
|
||||||
import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider
|
import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider
|
||||||
import org.jetbrains.kotlin.fir.session.FirSessionFactory
|
import org.jetbrains.kotlin.fir.session.FirSessionFactory
|
||||||
import org.jetbrains.kotlin.load.kotlin.PackagePartProvider
|
import org.jetbrains.kotlin.load.kotlin.PackagePartProvider
|
||||||
@@ -34,7 +31,6 @@ fun createSession(
|
|||||||
val provider = FirProjectSessionProvider(project)
|
val provider = FirProjectSessionProvider(project)
|
||||||
return FirSessionFactory.createJavaModuleBasedSession(moduleInfo, provider, sourceScope).also {
|
return FirSessionFactory.createJavaModuleBasedSession(moduleInfo, provider, sourceScope).also {
|
||||||
createSessionForDependencies(project, provider, moduleInfo, librariesScope, packagePartProvider)
|
createSessionForDependencies(project, provider, moduleInfo, librariesScope, packagePartProvider)
|
||||||
it.extensionService.registerExtensions(BunchOfRegisteredExtensions.empty())
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.idea.fir.low.level.api.sessions
|
|||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.psi.search.GlobalSearchScope
|
import com.intellij.psi.search.GlobalSearchScope
|
||||||
import org.jetbrains.kotlin.fir.PrivateSessionConstructor
|
import org.jetbrains.kotlin.fir.PrivateSessionConstructor
|
||||||
|
import org.jetbrains.kotlin.fir.SessionConfiguration
|
||||||
import org.jetbrains.kotlin.analyzer.ModuleInfo
|
import org.jetbrains.kotlin.analyzer.ModuleInfo
|
||||||
import org.jetbrains.kotlin.fir.java.JavaSymbolProvider
|
import org.jetbrains.kotlin.fir.java.JavaSymbolProvider
|
||||||
import org.jetbrains.kotlin.fir.java.deserialization.KotlinDeserializedJvmSymbolsProvider
|
import org.jetbrains.kotlin.fir.java.deserialization.KotlinDeserializedJvmSymbolsProvider
|
||||||
@@ -34,6 +35,7 @@ internal class FirIdeLibrariesSession private constructor(
|
|||||||
override val scope: GlobalSearchScope
|
override val scope: GlobalSearchScope
|
||||||
) : FirIdeSession(moduleInfo, sessionProvider) {
|
) : FirIdeSession(moduleInfo, sessionProvider) {
|
||||||
companion object {
|
companion object {
|
||||||
|
@OptIn(SessionConfiguration::class)
|
||||||
fun create(
|
fun create(
|
||||||
moduleInfo: ModuleSourceInfo,
|
moduleInfo: ModuleSourceInfo,
|
||||||
sessionProvider: FirIdeSessionProvider,
|
sessionProvider: FirIdeSessionProvider,
|
||||||
|
|||||||
+1
-2
@@ -21,7 +21,6 @@ import org.jetbrains.kotlin.fir.resolve.providers.impl.FirCompositeSymbolProvide
|
|||||||
import org.jetbrains.kotlin.fir.resolve.scopes.wrapScopeWithJvmMapped
|
import org.jetbrains.kotlin.fir.resolve.scopes.wrapScopeWithJvmMapped
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.PhasedFirFileResolver
|
import org.jetbrains.kotlin.fir.resolve.transformers.PhasedFirFileResolver
|
||||||
import org.jetbrains.kotlin.fir.scopes.KotlinScopeProvider
|
import org.jetbrains.kotlin.fir.scopes.KotlinScopeProvider
|
||||||
import org.jetbrains.kotlin.fir.session.registerCheckersComponent
|
|
||||||
import org.jetbrains.kotlin.fir.session.registerCommonComponents
|
import org.jetbrains.kotlin.fir.session.registerCommonComponents
|
||||||
import org.jetbrains.kotlin.fir.session.registerJavaSpecificComponents
|
import org.jetbrains.kotlin.fir.session.registerJavaSpecificComponents
|
||||||
import org.jetbrains.kotlin.fir.session.registerResolveComponents
|
import org.jetbrains.kotlin.fir.session.registerResolveComponents
|
||||||
@@ -51,6 +50,7 @@ internal class FirIdeSourcesSession private constructor(
|
|||||||
/**
|
/**
|
||||||
* Should be invoked only under a [moduleInfo]-based lock
|
* Should be invoked only under a [moduleInfo]-based lock
|
||||||
*/
|
*/
|
||||||
|
@OptIn(SessionConfiguration::class)
|
||||||
fun create(
|
fun create(
|
||||||
project: Project,
|
project: Project,
|
||||||
moduleInfo: ModuleSourceInfo,
|
moduleInfo: ModuleSourceInfo,
|
||||||
@@ -68,7 +68,6 @@ internal class FirIdeSourcesSession private constructor(
|
|||||||
|
|
||||||
registerCommonComponents()
|
registerCommonComponents()
|
||||||
registerResolveComponents()
|
registerResolveComponents()
|
||||||
registerCheckersComponent()
|
|
||||||
|
|
||||||
val provider = FirIdeProvider(
|
val provider = FirIdeProvider(
|
||||||
project,
|
project,
|
||||||
|
|||||||
+1
-6
@@ -15,9 +15,6 @@ import org.jetbrains.kotlin.fir.builder.RawFirBuilder
|
|||||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||||
import org.jetbrains.kotlin.fir.dependenciesWithoutSelf
|
import org.jetbrains.kotlin.fir.dependenciesWithoutSelf
|
||||||
import org.jetbrains.kotlin.fir.extensions.BunchOfRegisteredExtensions
|
|
||||||
import org.jetbrains.kotlin.fir.extensions.extensionService
|
|
||||||
import org.jetbrains.kotlin.fir.extensions.registerExtensions
|
|
||||||
import org.jetbrains.kotlin.fir.java.*
|
import org.jetbrains.kotlin.fir.java.*
|
||||||
import org.jetbrains.kotlin.fir.psi
|
import org.jetbrains.kotlin.fir.psi
|
||||||
import org.jetbrains.kotlin.fir.resolve.firProvider
|
import org.jetbrains.kotlin.fir.resolve.firProvider
|
||||||
@@ -60,9 +57,7 @@ abstract class AbstractFirMultiModuleResolveTest : AbstractMultiModuleTest() {
|
|||||||
|
|
||||||
private fun createSession(module: Module, provider: FirProjectSessionProvider): FirJavaModuleBasedSession {
|
private fun createSession(module: Module, provider: FirProjectSessionProvider): FirJavaModuleBasedSession {
|
||||||
val moduleInfo = module.productionSourceInfo()!!
|
val moduleInfo = module.productionSourceInfo()!!
|
||||||
return FirSessionFactory.createJavaModuleBasedSession(moduleInfo, provider, moduleInfo.contentScope()).also {
|
return FirSessionFactory.createJavaModuleBasedSession(moduleInfo, provider, moduleInfo.contentScope())
|
||||||
it.extensionService.registerExtensions(BunchOfRegisteredExtensions.empty())
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun createLibrarySession(moduleInfo: IdeaModuleInfo, provider: FirProjectSessionProvider): FirLibrarySession {
|
private fun createLibrarySession(moduleInfo: IdeaModuleInfo, provider: FirProjectSessionProvider): FirLibrarySession {
|
||||||
|
|||||||
+3
-4
@@ -8,16 +8,15 @@ package org.jetbrains.kotlin.fir.plugin
|
|||||||
import org.jetbrains.kotlin.cli.jvm.config.addJvmClasspathRoot
|
import org.jetbrains.kotlin.cli.jvm.config.addJvmClasspathRoot
|
||||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||||
import org.jetbrains.kotlin.fir.AbstractFirDiagnosticsTest
|
import org.jetbrains.kotlin.fir.AbstractFirDiagnosticsTest
|
||||||
import org.jetbrains.kotlin.fir.extensions.FirExtensionService
|
import org.jetbrains.kotlin.fir.extensions.BunchOfRegisteredExtensions
|
||||||
import org.jetbrains.kotlin.fir.extensions.registerExtensions
|
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
abstract class AbstractFirAllOpenDiagnosticTest : AbstractFirDiagnosticsTest() {
|
abstract class AbstractFirAllOpenDiagnosticTest : AbstractFirDiagnosticsTest() {
|
||||||
override val pluginPhasesEnabled: Boolean
|
override val pluginPhasesEnabled: Boolean
|
||||||
get() = true
|
get() = true
|
||||||
|
|
||||||
override fun registerFirExtensions(service: FirExtensionService) {
|
override fun getFirExtensions(): BunchOfRegisteredExtensions {
|
||||||
service.registerExtensions(FirAllOpenComponentRegistrar().configure())
|
return FirAllOpenComponentRegistrar().configure()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun updateConfiguration(configuration: CompilerConfiguration) {
|
override fun updateConfiguration(configuration: CompilerConfiguration) {
|
||||||
|
|||||||
Reference in New Issue
Block a user