AA: allow directory as source roots
diff --git a/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/project/structure/builder/KtSourceModuleBuilder.kt b/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/project/structure/builder/KtSourceModuleBuilder.kt
index 454cd09..22df08b 100644
--- a/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/project/structure/builder/KtSourceModuleBuilder.kt
+++ b/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/project/structure/builder/KtSourceModuleBuilder.kt
@@ -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 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)
}
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 e0e9a5b..c4ca626 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
@@ -9,7 +9,7 @@
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 getSourceFilePaths(
compilerConfig: CompilerConfiguration,
+ includeDirectoryRoot: Boolean = false,
): Set<String> {
return buildSet {
compilerConfig.javaSourceRoots.forEach { srcRoot ->
@@ -64,6 +65,9 @@
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 inline fun <reified T : PsiFile> getPsiFilesFromPaths(
+internal inline fun <reified T : PsiFileSystemItem> getPsiFilesFromPaths(
project: Project,
paths: Collection<String>,
): List<T> {
@@ -81,8 +85,12 @@
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 @@
this.platform = platform
this.project = project
this.moduleName = moduleName
- addSourceRoots(getPsiFilesFromPaths(project, getSourceFilePaths(compilerConfig)))
+ addSourceRoots(
+ getPsiFilesFromPaths(
+ project,
+ getSourceFilePaths(compilerConfig, includeDirectoryRoot = true)
+ )
+ )
}
)
}
diff --git a/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/project/structure/impl/KtSourceModuleImpl.kt b/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/project/structure/impl/KtSourceModuleImpl.kt
index 34a9bd1..4e928f8 100644
--- a/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/project/structure/impl/KtSourceModuleImpl.kt
+++ b/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/project/structure/impl/KtSourceModuleImpl.kt
@@ -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 @@
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
}
\ No newline at end of file