AA: utilize file lookup utils (to reuse in facade)
This commit is contained in:
committed by
Ilya Kirillov
parent
4cfefbd921
commit
72bf702309
+3
-40
@@ -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<KtFile>(project, getSourceFilePaths(compilerConfig))
|
||||
configureProjectEnvironment(project, compilerConfig, ktFiles, packagePartProvider)
|
||||
}
|
||||
|
||||
private fun getSourceFilePaths(
|
||||
compilerConfig: CompilerConfiguration,
|
||||
): Set<String> {
|
||||
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<String>,
|
||||
): List<KtFile> {
|
||||
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,
|
||||
|
||||
+41
-2
@@ -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<String> {
|
||||
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 <reified T : PsiFile> getPsiFilesFromPaths(
|
||||
project: Project,
|
||||
paths: Collection<String>,
|
||||
): List<T> {
|
||||
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")
|
||||
|
||||
Reference in New Issue
Block a user