From e51018406fc031b8360da6263df6595e582ef5c6 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Fri, 14 Oct 2016 12:26:30 +0200 Subject: [PATCH] register PsiElementFinder extensions before JavaPsiFacade is registered --- .../cli/jvm/compiler/KotlinCoreEnvironment.kt | 42 ++++++++++++------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCoreEnvironment.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCoreEnvironment.kt index 96ff84af8b7..f29b88ab748 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCoreEnvironment.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCoreEnvironment.kt @@ -117,6 +117,28 @@ class KotlinCoreEnvironment private constructor( override fun preregisterServices() { registerProjectExtensionPoints(Extensions.getArea(project)) } + + override fun registerJavaPsiFacade() { + with (project) { + registerService(CoreJavaFileManager::class.java, ServiceManager.getService(this, JavaFileManager::class.java) as CoreJavaFileManager) + + val cliLightClassGenerationSupport = CliLightClassGenerationSupport(this) + registerService(LightClassGenerationSupport::class.java, cliLightClassGenerationSupport) + registerService(CliLightClassGenerationSupport::class.java, cliLightClassGenerationSupport) + registerService(CodeAnalyzerInitializer::class.java, cliLightClassGenerationSupport) + + registerService(ExternalAnnotationsManager::class.java, MockExternalAnnotationsManager()) + registerService(InferredAnnotationsManager::class.java, MockInferredAnnotationsManager()) + + val area = Extensions.getArea(this) + + area.getExtensionPoint(PsiElementFinder.EP_NAME).registerExtension(JavaElementFinder(this, cliLightClassGenerationSupport)) + area.getExtensionPoint(PsiElementFinder.EP_NAME).registerExtension( + PsiElementFinderImpl(this, ServiceManager.getService(this, JavaFileManager::class.java))) + } + + super.registerJavaPsiFacade() + } } private val sourceFiles = ArrayList() private val rootsIndex: JvmDependenciesDynamicCompoundIndex @@ -469,23 +491,11 @@ class KotlinCoreEnvironment private constructor( } private fun registerProjectServicesForCLI(projectEnvironment: JavaCoreProjectEnvironment) { - with (projectEnvironment.project) { - registerService(CoreJavaFileManager::class.java, ServiceManager.getService(this, JavaFileManager::class.java) as CoreJavaFileManager) + /** + * Note that Kapt may restart code analysis process, and CLI services should be aware of that. + * Use PsiManager.getModificationTracker() to ensure that all the data you cached is still valid. + */ - val cliLightClassGenerationSupport = CliLightClassGenerationSupport(this) - registerService(LightClassGenerationSupport::class.java, cliLightClassGenerationSupport) - registerService(CliLightClassGenerationSupport::class.java, cliLightClassGenerationSupport) - registerService(CodeAnalyzerInitializer::class.java, cliLightClassGenerationSupport) - - registerService(ExternalAnnotationsManager::class.java, MockExternalAnnotationsManager()) - registerService(InferredAnnotationsManager::class.java, MockInferredAnnotationsManager()) - - val area = Extensions.getArea(this) - - area.getExtensionPoint(PsiElementFinder.EP_NAME).registerExtension(JavaElementFinder(this, cliLightClassGenerationSupport)) - area.getExtensionPoint(PsiElementFinder.EP_NAME).registerExtension( - PsiElementFinderImpl(this, ServiceManager.getService(this, JavaFileManager::class.java))) - } } } }