AA: allow directory as source roots

This commit is contained in:
Jinseong Jeon
2022-06-17 01:40:47 -07:00
committed by Ilya Kirillov
parent 4af2fcd633
commit 87ba8525cf
3 changed files with 24 additions and 11 deletions
@@ -5,7 +5,7 @@
package org.jetbrains.kotlin.analysis.project.structure.builder
import com.intellij.psi.PsiFile
import com.intellij.psi.PsiFileSystemItem
import org.jetbrains.kotlin.analysis.project.structure.KtSourceModule
import org.jetbrains.kotlin.analysis.project.structure.impl.KtSourceModuleImpl
import org.jetbrains.kotlin.config.ApiVersion
@@ -21,13 +21,13 @@ public class KtSourceModuleBuilder : KtModuleBuilder() {
public lateinit var moduleName: String
public var languageVersionSettings: LanguageVersionSettings =
LanguageVersionSettingsImpl(LanguageVersion.LATEST_STABLE, ApiVersion.LATEST)
private val sourceRoots: MutableList<PsiFile> = mutableListOf()
private val sourceRoots: MutableList<PsiFileSystemItem> = mutableListOf()
public fun addSourceRoot(file: PsiFile) {
public fun addSourceRoot(file: PsiFileSystemItem) {
sourceRoots.add(file)
}
public fun addSourceRoots(files: Collection<PsiFile>) {
public fun addSourceRoots(files: Collection<PsiFileSystemItem>) {
sourceRoots.addAll(files)
}
@@ -9,7 +9,7 @@ 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.PsiFileSystemItem
import com.intellij.psi.PsiManager
import com.intellij.psi.search.GlobalSearchScope
import com.intellij.psi.search.ProjectScope
@@ -55,6 +55,7 @@ internal fun TargetPlatform.getAnalyzerServices(): PlatformDependentAnalyzerServ
internal fun getSourceFilePaths(
compilerConfig: CompilerConfiguration,
includeDirectoryRoot: Boolean = false,
): Set<String> {
return buildSet {
compilerConfig.javaSourceRoots.forEach { srcRoot ->
@@ -64,6 +65,9 @@ internal fun getSourceFilePaths(
Files.walk(path)
.filter(java.nio.file.Files::isRegularFile)
.forEach { add(it.toString()) }
if (includeDirectoryRoot) {
add(srcRoot)
}
} else {
// E.g., project/app/src/some/pkg/main.kt
add(srcRoot)
@@ -72,7 +76,7 @@ internal fun getSourceFilePaths(
}
}
internal inline fun <reified T : PsiFile> getPsiFilesFromPaths(
internal inline fun <reified T : PsiFileSystemItem> getPsiFilesFromPaths(
project: Project,
paths: Collection<String>,
): List<T> {
@@ -81,8 +85,12 @@ internal inline fun <reified T : PsiFile> getPsiFilesFromPaths(
return buildList {
for (path in paths) {
val vFile = fs.findFileByPath(path) ?: continue
val psiFile = psiManager.findFile(vFile) as? T ?: continue
add(psiFile)
val psiFileSystemItem =
if (vFile.isDirectory)
psiManager.findDirectory(vFile) as? T
else
psiManager.findFile(vFile) as? T
psiFileSystemItem?.let { add(it) }
}
}
}
@@ -150,7 +158,12 @@ internal fun buildKtModuleProviderByCompilerConfiguration(
this.platform = platform
this.project = project
this.moduleName = moduleName
addSourceRoots(getPsiFilesFromPaths(project, getSourceFilePaths(compilerConfig)))
addSourceRoots(
getPsiFilesFromPaths(
project,
getSourceFilePaths(compilerConfig, includeDirectoryRoot = true)
)
)
}
)
}
@@ -6,7 +6,7 @@
package org.jetbrains.kotlin.analysis.project.structure.impl
import com.intellij.openapi.project.Project
import com.intellij.psi.PsiFile
import com.intellij.psi.PsiFileSystemItem
import com.intellij.psi.search.GlobalSearchScope
import org.jetbrains.kotlin.analysis.project.structure.KtModule
import org.jetbrains.kotlin.analysis.project.structure.KtSourceModule
@@ -23,7 +23,7 @@ internal class KtSourceModuleImpl(
override val project: Project,
override val moduleName: String,
override val languageVersionSettings: LanguageVersionSettings,
internal val sourceRoots: List<PsiFile>,
internal val sourceRoots: List<PsiFileSystemItem>,
) : KtSourceModule, KtModuleWithPlatform {
override val analyzerServices: PlatformDependentAnalyzerServices = super.analyzerServices
}