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 454cd098e63..22df08bea4a 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 class KtSourceModuleBuilder : KtModuleBuilder() { public lateinit var moduleName: String public var languageVersionSettings: LanguageVersionSettings = LanguageVersionSettingsImpl(LanguageVersion.LATEST_STABLE, ApiVersion.LATEST) - private val sourceRoots: MutableList = mutableListOf() + private val sourceRoots: MutableList = mutableListOf() - public fun addSourceRoot(file: PsiFile) { + public fun addSourceRoot(file: PsiFileSystemItem) { sourceRoots.add(file) } - public fun addSourceRoots(files: Collection) { + public fun addSourceRoots(files: Collection) { 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 e0e9a5b382a..c4ca6269485 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.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 { 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 getPsiFilesFromPaths( +internal inline fun getPsiFilesFromPaths( project: Project, paths: Collection, ): List { @@ -81,8 +85,12 @@ internal inline fun 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) + ) + ) } ) } 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 34a9bd108e5..4e928f87fee 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 @@ internal class KtSourceModuleImpl( override val project: Project, override val moduleName: String, override val languageVersionSettings: LanguageVersionSettings, - internal val sourceRoots: List, + internal val sourceRoots: List, ) : KtSourceModule, KtModuleWithPlatform { override val analyzerServices: PlatformDependentAnalyzerServices = super.analyzerServices } \ No newline at end of file