AA: refactor service registrations
such that AA standalone mode doesn't need to unregister services that were already registered by pre-analysis handlers
This commit is contained in:
committed by
Ilya Kirillov
parent
26e923e3ae
commit
a986aff429
-6
@@ -6,7 +6,6 @@
|
||||
package org.jetbrains.kotlin.analysis.api.standalone;
|
||||
|
||||
import com.intellij.mock.MockProject;
|
||||
import org.jetbrains.annotations.TestOnly;
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirResolveStateService;
|
||||
|
||||
class RegisterComponentService {
|
||||
@@ -16,9 +15,4 @@ class RegisterComponentService {
|
||||
new LLFirResolveStateService(project)
|
||||
);
|
||||
}
|
||||
|
||||
@TestOnly
|
||||
static void unregisterLLFirResolveStateService(MockProject project) {
|
||||
project.getPicoContainer().unregisterComponent(LLFirResolveStateService.class.getName());
|
||||
}
|
||||
}
|
||||
|
||||
-39
@@ -5,48 +5,22 @@
|
||||
|
||||
package org.jetbrains.kotlin.analysis.api.standalone
|
||||
|
||||
import com.intellij.mock.MockProject
|
||||
import com.intellij.psi.util.PsiTreeUtil
|
||||
import org.jetbrains.kotlin.analysis.api.InvalidWayOfUsingAnalysisSession
|
||||
import org.jetbrains.kotlin.analysis.api.KtAnalysisSessionProvider
|
||||
import org.jetbrains.kotlin.analysis.api.components.KtDeclarationRendererOptions
|
||||
import org.jetbrains.kotlin.analysis.api.components.RendererModifier
|
||||
import org.jetbrains.kotlin.analysis.api.impl.barebone.test.expressionMarkerProvider
|
||||
import org.jetbrains.kotlin.analysis.api.impl.base.test.TestReferenceResolveResultRenderer.renderResolvedTo
|
||||
import org.jetbrains.kotlin.analysis.api.impl.base.test.findReferencesAtCaret
|
||||
import org.jetbrains.kotlin.analysis.api.impl.base.test.test.framework.AbstractHLApiSingleModuleTest
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.services.FirSealedClassInheritorsProcessorFactory
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.services.PackagePartProviderFactory
|
||||
import org.jetbrains.kotlin.analysis.project.structure.KtModuleScopeProvider
|
||||
import org.jetbrains.kotlin.analysis.project.structure.ProjectStructureProvider
|
||||
import org.jetbrains.kotlin.analysis.providers.KotlinDeclarationProviderFactory
|
||||
import org.jetbrains.kotlin.analysis.providers.KotlinModificationTrackerFactory
|
||||
import org.jetbrains.kotlin.analysis.providers.KotlinPackageProviderFactory
|
||||
import org.jetbrains.kotlin.cli.jvm.config.addJavaSourceRoots
|
||||
import org.jetbrains.kotlin.psi.KtDeclaration
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.test.model.TestModule
|
||||
import org.jetbrains.kotlin.test.services.TestServices
|
||||
import org.jetbrains.kotlin.test.services.assertions
|
||||
import org.jetbrains.kotlin.test.services.compilerConfigurationProvider
|
||||
import java.io.File
|
||||
|
||||
abstract class AbstractStandaloneModeSingleModuleTest : AbstractHLApiSingleModuleTest() {
|
||||
|
||||
override fun doTestByFileStructure(ktFiles: List<KtFile>, module: TestModule, testServices: TestServices) {
|
||||
val project = testServices.compilerConfigurationProvider.getProject(module) as MockProject
|
||||
// (project.picoContainer as DefaultPicoContainer).release() // is way too strong :( even PsiManager is gone
|
||||
unregisterServices(project)
|
||||
// TODO: better to be part of `StandaloneModeUtilsConfiguratorService`
|
||||
val compilerConfiguration = testServices.compilerConfigurationProvider.getCompilerConfiguration(module)
|
||||
compilerConfiguration.addJavaSourceRoots(ktFiles.map { File(it.virtualFilePath) })
|
||||
configureProjectEnvironment(
|
||||
project,
|
||||
compilerConfiguration,
|
||||
ktFiles,
|
||||
testServices.compilerConfigurationProvider.getPackagePartProviderFactory(module)
|
||||
)
|
||||
|
||||
val mainKtFile = ktFiles.singleOrNull() ?: ktFiles.first { it.name == "main.kt" }
|
||||
val caretPosition = testServices.expressionMarkerProvider.getCaretPosition(mainKtFile)
|
||||
val ktReferences = findReferencesAtCaret(mainKtFile, caretPosition)
|
||||
@@ -70,17 +44,4 @@ abstract class AbstractStandaloneModeSingleModuleTest : AbstractHLApiSingleModul
|
||||
modifiers = RendererModifier.DEFAULT - RendererModifier.ANNOTATIONS,
|
||||
sortNestedDeclarations = true
|
||||
)
|
||||
|
||||
@OptIn(InvalidWayOfUsingAnalysisSession::class)
|
||||
private fun unregisterServices(project: MockProject) {
|
||||
project.picoContainer.unregisterComponent(KtAnalysisSessionProvider::class.qualifiedName)
|
||||
project.picoContainer.unregisterComponent(KotlinModificationTrackerFactory::class.qualifiedName)
|
||||
RegisterComponentService.unregisterLLFirResolveStateService(project)
|
||||
project.picoContainer.unregisterComponent(FirSealedClassInheritorsProcessorFactory::class.qualifiedName)
|
||||
project.picoContainer.unregisterComponent(KtModuleScopeProvider::class.qualifiedName)
|
||||
project.picoContainer.unregisterComponent(ProjectStructureProvider::class.qualifiedName)
|
||||
project.picoContainer.unregisterComponent(KotlinDeclarationProviderFactory::class.qualifiedName)
|
||||
project.picoContainer.unregisterComponent(KotlinPackageProviderFactory::class.qualifiedName)
|
||||
project.picoContainer.unregisterComponent(PackagePartProviderFactory::class.qualifiedName)
|
||||
}
|
||||
}
|
||||
|
||||
+12
-3
@@ -8,8 +8,12 @@ package org.jetbrains.kotlin.analysis.api.standalone
|
||||
import com.intellij.mock.MockApplication
|
||||
import com.intellij.mock.MockProject
|
||||
import com.intellij.openapi.Disposable
|
||||
import com.intellij.psi.search.GlobalSearchScope
|
||||
import org.jetbrains.kotlin.analysis.api.fir.FirFrontendApiTestConfiguratorService
|
||||
import org.jetbrains.kotlin.analysis.api.impl.barebone.test.FrontendApiTestConfiguratorService
|
||||
import org.jetbrains.kotlin.analysis.project.structure.ProjectStructureProvider
|
||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||
import org.jetbrains.kotlin.load.kotlin.PackagePartProvider
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
|
||||
|
||||
@@ -21,9 +25,14 @@ object StandaloneModeConfiguratorService : FrontendApiTestConfiguratorService {
|
||||
with(FirFrontendApiTestConfiguratorService) { configureTest(disposable) }
|
||||
}
|
||||
|
||||
// TODO: other variant to register project services by compiler configuration?
|
||||
override fun registerProjectServices(project: MockProject) {
|
||||
// Will be configured at the test
|
||||
override fun registerProjectServices(
|
||||
project: MockProject,
|
||||
compilerConfig: CompilerConfiguration,
|
||||
files: List<KtFile>,
|
||||
packagePartProvider: (GlobalSearchScope) -> PackagePartProvider,
|
||||
projectStructureProvider: ProjectStructureProvider
|
||||
) {
|
||||
configureProjectEnvironment(project, compilerConfig, files, packagePartProvider)
|
||||
}
|
||||
|
||||
override fun registerApplicationServices(application: MockApplication) {
|
||||
|
||||
Reference in New Issue
Block a user