From 72bf7023090898af16bc5737c0ac9a91890c85b7 Mon Sep 17 00:00:00 2001 From: Jinseong Jeon Date: Tue, 31 May 2022 14:32:27 -0700 Subject: [PATCH] AA: utilize file lookup utils (to reuse in facade) --- .../api/standalone/StandaloneUtils.kt | 43 ++----------------- .../project/structure/impl/KtModuleUtils.kt | 43 ++++++++++++++++++- 2 files changed, 44 insertions(+), 42 deletions(-) diff --git a/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/api/standalone/StandaloneUtils.kt b/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/api/standalone/StandaloneUtils.kt index bc30a5e6d58..aafd355292e 100644 --- a/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/api/standalone/StandaloneUtils.kt +++ b/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/api/standalone/StandaloneUtils.kt @@ -8,9 +8,7 @@ package org.jetbrains.kotlin.analysis.api.standalone import com.intellij.mock.MockApplication import com.intellij.mock.MockProject import com.intellij.openapi.project.Project -import com.intellij.openapi.vfs.StandardFileSystems import com.intellij.psi.PsiElementFinder -import com.intellij.psi.PsiManager import com.intellij.psi.search.GlobalSearchScope import org.jetbrains.kotlin.analysis.api.KtAnalysisApiInternals import org.jetbrains.kotlin.analysis.api.session.KtAnalysisSessionProvider @@ -23,11 +21,12 @@ import org.jetbrains.kotlin.analysis.project.structure.KtModuleScopeProvider import org.jetbrains.kotlin.analysis.project.structure.KtModuleScopeProviderImpl import org.jetbrains.kotlin.analysis.project.structure.ProjectStructureProvider import org.jetbrains.kotlin.analysis.project.structure.impl.buildKtModuleProviderByCompilerConfiguration +import org.jetbrains.kotlin.analysis.project.structure.impl.getPsiFilesFromPaths +import org.jetbrains.kotlin.analysis.project.structure.impl.getSourceFilePaths import org.jetbrains.kotlin.analysis.providers.* import org.jetbrains.kotlin.analysis.providers.impl.* import org.jetbrains.kotlin.asJava.KotlinAsJavaSupport import org.jetbrains.kotlin.asJava.finder.JavaElementFinder -import org.jetbrains.kotlin.cli.jvm.config.javaSourceRoots import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.fir.declarations.SealedClassInheritorsProvider import org.jetbrains.kotlin.fir.declarations.SealedClassInheritorsProviderImpl @@ -38,8 +37,6 @@ import org.jetbrains.kotlin.light.classes.symbol.caches.SymbolLightClassFacadeCa import org.jetbrains.kotlin.load.kotlin.PackagePartProvider import org.jetbrains.kotlin.psi.KotlinReferenceProvidersService import org.jetbrains.kotlin.psi.KtFile -import java.nio.file.Files -import java.nio.file.Paths /** * Configure Application environment for Analysis API standalone mode. @@ -91,44 +88,10 @@ public fun configureProjectEnvironment( compilerConfig: CompilerConfiguration, packagePartProvider: (GlobalSearchScope) -> PackagePartProvider, ) { - val ktFiles = getKtFilesFromPaths(project, getSourceFilePaths(compilerConfig)) + val ktFiles = getPsiFilesFromPaths(project, getSourceFilePaths(compilerConfig)) configureProjectEnvironment(project, compilerConfig, ktFiles, packagePartProvider) } -private fun getSourceFilePaths( - compilerConfig: CompilerConfiguration, -): Set { - return buildSet { - compilerConfig.javaSourceRoots.forEach { srcRoot -> - val path = Paths.get(srcRoot) - if (Files.isDirectory(path)) { - // E.g., project/app/src - Files.walk(path) - .filter(Files::isRegularFile) - .forEach { add(it.toString()) } - } else { - // E.g., project/app/src/some/pkg/main.kt - add(srcRoot) - } - } - } -} - -private fun getKtFilesFromPaths( - project: Project, - paths: Collection, -): List { - val fs = StandardFileSystems.local() - val psiManager = PsiManager.getInstance(project) - return buildList { - for (path in paths) { - val vFile = fs.findFileByPath(path) ?: continue - val ktFile = psiManager.findFile(vFile) as? KtFile ?: continue - add(ktFile) - } - } -} - internal fun configureProjectEnvironment( project: MockProject, compilerConfig: CompilerConfiguration, diff --git a/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/project/structure/impl/KtModuleUtils.kt b/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/project/structure/impl/KtModuleUtils.kt index 75b5be2a1a4..4d382fb0fb6 100644 --- a/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/project/structure/impl/KtModuleUtils.kt +++ b/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/project/structure/impl/KtModuleUtils.kt @@ -5,9 +5,12 @@ package org.jetbrains.kotlin.analysis.project.structure.impl -import com.google.common.io.Files +import com.google.common.io.Files.getNameWithoutExtension import com.intellij.openapi.project.Project +import com.intellij.openapi.vfs.StandardFileSystems import com.intellij.openapi.vfs.VirtualFileManager +import com.intellij.psi.PsiFile +import com.intellij.psi.PsiManager import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.search.ProjectScope import com.intellij.util.io.URLUtil @@ -19,6 +22,7 @@ import org.jetbrains.kotlin.analysis.project.structure.builder.buildKtSourceModu import org.jetbrains.kotlin.analysis.project.structure.builder.buildProjectStructureProvider import org.jetbrains.kotlin.analyzer.common.CommonPlatformAnalyzerServices import org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM +import org.jetbrains.kotlin.cli.jvm.config.javaSourceRoots import org.jetbrains.kotlin.cli.jvm.config.jvmClasspathRoots import org.jetbrains.kotlin.cli.jvm.config.jvmModularRoots import org.jetbrains.kotlin.config.CommonConfigurationKeys @@ -36,6 +40,7 @@ import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.resolve.PlatformDependentAnalyzerServices import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatformAnalyzerServices import org.jetbrains.kotlin.resolve.konan.platform.NativePlatformAnalyzerServices +import java.nio.file.Files import java.nio.file.Paths internal fun TargetPlatform.getAnalyzerServices(): PlatformDependentAnalyzerServices { @@ -48,6 +53,40 @@ internal fun TargetPlatform.getAnalyzerServices(): PlatformDependentAnalyzerServ } } +internal fun getSourceFilePaths( + compilerConfig: CompilerConfiguration, +): Set { + return buildSet { + compilerConfig.javaSourceRoots.forEach { srcRoot -> + val path = Paths.get(srcRoot) + if (Files.isDirectory(path)) { + // E.g., project/app/src + Files.walk(path) + .filter(java.nio.file.Files::isRegularFile) + .forEach { add(it.toString()) } + } else { + // E.g., project/app/src/some/pkg/main.kt + add(srcRoot) + } + } + } +} + +internal inline fun getPsiFilesFromPaths( + project: Project, + paths: Collection, +): List { + val fs = StandardFileSystems.local() + val psiManager = PsiManager.getInstance(project) + return buildList { + for (path in paths) { + val vFile = fs.findFileByPath(path) ?: continue + val psiFile = psiManager.findFile(vFile) as? T ?: continue + add(psiFile) + } + } +} + internal fun buildKtModuleProviderByCompilerConfiguration( compilerConfig: CompilerConfiguration, project: Project, @@ -85,7 +124,7 @@ internal fun buildKtModuleProviderByCompilerConfiguration( this.platform = platform this.project = project binaryRoots = listOf(root) - libraryName = Files.getNameWithoutExtension(root.toString()) + libraryName = getNameWithoutExtension(root.toString()) isBuiltinsContainingStdlib = libraryName.startsWith("kotlin-stdlib") && !libraryName.contains("common") && !libraryName.contains("jdk")