[Analysis API Standalone] commonize logic for Analysis API FIR service registration between standalone and tests

This commit is contained in:
Ilya Kirillov
2023-05-11 22:56:20 +02:00
committed by Space Team
parent feaf9acd1d
commit fbcf73eb42
16 changed files with 150 additions and 116 deletions
@@ -0,0 +1,22 @@
plugins {
kotlin("jvm")
id("jps-compatible")
}
dependencies {
implementation(intellijCore())
implementation(kotlinStdlib())
implementation(project(":compiler:psi"))
implementation(project(":compiler:cli-base"))
implementation(project(":analysis:analysis-api"))
implementation(project(":analysis:analysis-api-impl-base"))
implementation(project(":analysis:analysis-api-fir"))
implementation(project(":analysis:symbol-light-classes"))
implementation(project(":analysis:analysis-api-standalone:analysis-api-standalone-base"))
}
sourceSets {
"main" { projectDefault() }
"test" { none() }
}
@@ -0,0 +1,66 @@
/*
* Copyright 2010-2023 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.analysis.api.standalone.base.project.structure
import com.intellij.mock.MockApplication
import com.intellij.mock.MockProject
import com.intellij.openapi.Disposable
import com.intellij.psi.PsiElementFinder
import com.intellij.psi.impl.PsiElementFinderImpl
import org.jetbrains.kotlin.analysis.api.KtAnalysisApiInternals
import org.jetbrains.kotlin.analysis.api.fir.KtFirAnalysisSessionProvider
import org.jetbrains.kotlin.analysis.api.fir.references.ReadWriteAccessCheckerFirImpl
import org.jetbrains.kotlin.analysis.api.session.KtAnalysisSessionProvider
import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirGlobalResolveComponents
import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirInternals
import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirResolveSessionService
import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.JvmFirDeserializedSymbolProviderFactory
import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.LLFirBuiltinsSessionFactory
import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirSessionCache
import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirSessionConfigurator
import org.jetbrains.kotlin.analysis.low.level.api.fir.stubBased.deserialization.JvmStubBasedDeserializedSymbolProviderFactory
import org.jetbrains.kotlin.asJava.KotlinAsJavaSupport
import org.jetbrains.kotlin.asJava.finder.JavaElementFinder
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrarAdapter
import org.jetbrains.kotlin.idea.references.KotlinFirReferenceContributor
import org.jetbrains.kotlin.idea.references.KotlinReferenceProviderContributor
import org.jetbrains.kotlin.idea.references.ReadWriteAccessChecker
import org.jetbrains.kotlin.light.classes.symbol.SymbolKotlinAsJavaSupport
@OptIn(LLFirInternals::class, KtAnalysisApiInternals::class)
object FirStandaloneServiceRegistrar : AnalysisApiStandaloneServiceRegistrar {
override fun registerApplicationServices(application: MockApplication) {
}
override fun registerProjectExtensionPoints(project: MockProject) {
IrGenerationExtension.registerExtensionPoint(project)
FirExtensionRegistrarAdapter.registerExtensionPoint(project)
LLFirSessionConfigurator.registerExtensionPoint(project)
}
override fun registerProjectServices(project: MockProject) {
project.apply {
registerService(KtAnalysisSessionProvider::class.java, KtFirAnalysisSessionProvider(this))
registerService(LLFirResolveSessionService::class.java)
registerService(LLFirSessionCache::class.java)
registerService(KotlinAsJavaSupport::class.java, SymbolKotlinAsJavaSupport::class.java)
registerService(LLFirGlobalResolveComponents::class.java)
registerService(LLFirBuiltinsSessionFactory::class.java)
registerService(JvmFirDeserializedSymbolProviderFactory::class.java, JvmStubBasedDeserializedSymbolProviderFactory::class.java)
registerService(KotlinReferenceProviderContributor::class.java, KotlinFirReferenceContributor::class.java)
registerService(ReadWriteAccessChecker::class.java, ReadWriteAccessCheckerFirImpl::class.java )
}
}
@Suppress("TestOnlyProblems")
override fun registerProjectModelServices(project: MockProject, disposable: Disposable) {
with(PsiElementFinder.EP.getPoint(project)) {
registerExtension(JavaElementFinder(project), disposable)
registerExtension(PsiElementFinderImpl(project), disposable)
}
}
}