K2 UAST: simplify PSI declaration provider

In addition to class lookup (done at cec299ac), we can use
JavaFileManager to search classes in a certain package too.
This commit is contained in:
Jinseong Jeon
2023-11-14 23:21:42 -08:00
committed by Space Team
parent 6aab336979
commit 0dfaa91970
4 changed files with 25 additions and 236 deletions
@@ -13,7 +13,6 @@ import com.intellij.openapi.util.Disposer
import com.intellij.openapi.vfs.impl.jar.CoreJarFileSystem
import com.intellij.psi.PsiFile
import com.intellij.psi.search.GlobalSearchScope
import org.jetbrains.kotlin.analysis.api.KtAnalysisApiInternals
import org.jetbrains.kotlin.analysis.api.standalone.base.project.structure.FirStandaloneServiceRegistrar
import org.jetbrains.kotlin.analysis.api.standalone.base.project.structure.KtStaticProjectStructureProvider
import org.jetbrains.kotlin.analysis.api.standalone.base.project.structure.LLFirStandaloneLibrarySymbolProviderFactory
@@ -23,7 +22,6 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.LLFirLi
import org.jetbrains.kotlin.analysis.project.structure.KtSourceModule
import org.jetbrains.kotlin.analysis.project.structure.builder.KtModuleProviderBuilder
import org.jetbrains.kotlin.analysis.project.structure.builder.buildProjectStructureProvider
import org.jetbrains.kotlin.analysis.project.structure.impl.KtStandaloneProjectStructureProvider
import org.jetbrains.kotlin.analysis.project.structure.impl.KtSourceModuleImpl
import org.jetbrains.kotlin.analysis.project.structure.impl.buildKtModuleProviderByCompilerConfiguration
import org.jetbrains.kotlin.analysis.project.structure.impl.getPsiFilesFromPaths
@@ -108,7 +106,6 @@ public class StandaloneAnalysisAPISessionBuilder(
extensionDescriptor.registerExtensionPoint(project)
}
@OptIn(KtAnalysisApiInternals::class)
private fun registerProjectServices(
sourceKtFiles: List<KtFile>,
packagePartProvider: (GlobalSearchScope) -> PackagePartProvider,
@@ -161,15 +158,10 @@ public class StandaloneAnalysisAPISessionBuilder(
}
private fun registerPsiDeclarationFromBinaryModuleProvider() {
val standaloneProjectStructureProvider = projectStructureProvider as KtStandaloneProjectStructureProvider
kotlinCoreProjectEnvironment.project.apply {
registerService(
KotlinPsiDeclarationProviderFactory::class.java,
KotlinStaticPsiDeclarationProviderFactory(
this,
standaloneProjectStructureProvider.binaryModules,
kotlinCoreProjectEnvironment.environment.jarFileSystem as CoreJarFileSystem
)
KotlinStaticPsiDeclarationProviderFactory::class.java
)
}
}
@@ -6,18 +6,13 @@
package org.jetbrains.kotlin.analysis.api.standalone.fir.test.configurators
import com.intellij.mock.MockProject
import com.intellij.openapi.vfs.impl.jar.CoreJarFileSystem
import org.jetbrains.kotlin.analysis.api.KtAnalysisApiInternals
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeTokenProvider
import org.jetbrains.kotlin.analysis.api.standalone.KtAlwaysAccessibleLifetimeTokenProvider
import org.jetbrains.kotlin.analysis.api.standalone.base.project.structure.LLFirStandaloneLibrarySymbolProviderFactory
import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.LLFirLibrarySymbolProviderFactory
import org.jetbrains.kotlin.analysis.project.structure.KtBinaryModule
import org.jetbrains.kotlin.analysis.project.structure.ProjectStructureProvider
import org.jetbrains.kotlin.analysis.providers.KotlinPsiDeclarationProviderFactory
import org.jetbrains.kotlin.analysis.providers.impl.KotlinStaticPsiDeclarationProviderFactory
import org.jetbrains.kotlin.analysis.test.framework.services.KtTestProjectStructureProvider
import org.jetbrains.kotlin.analysis.test.framework.services.environmentManager
import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiTestServiceRegistrar
import org.jetbrains.kotlin.test.services.TestServices
@@ -31,19 +26,10 @@ public object StandaloneModeTestServiceRegistrar : AnalysisApiTestServiceRegistr
}
override fun registerProjectModelServices(project: MockProject, testServices: TestServices) {
val projectStructureProvider = ProjectStructureProvider.getInstance(project)
val binaryModules =
(projectStructureProvider as? KtTestProjectStructureProvider)?.allKtModules?.filterIsInstance<KtBinaryModule>()
?: emptyList()
val projectEnvironment = testServices.environmentManager.getProjectEnvironment()
project.apply {
registerService(
KotlinPsiDeclarationProviderFactory::class.java,
KotlinStaticPsiDeclarationProviderFactory(
this,
binaryModules,
projectEnvironment.environment.jarFileSystem as CoreJarFileSystem
)
KotlinStaticPsiDeclarationProviderFactory::class.java
)
}
}