diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/packageUtils.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/packageUtils.kt index 12a574459bf..f5e777be1c1 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/packageUtils.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/packageUtils.kt @@ -94,9 +94,12 @@ private fun findLongestExistingPackage(module: Module, packageName: String): Psi private val kotlinSourceRootTypes: Set> = setOf(SourceKotlinRootType, TestSourceKotlinRootType) + JavaModuleSourceRootTypes.SOURCES +private val Module.pureKotlinSourceFolders: List? + get() = KotlinFacet.get(this)?.configuration?.settings?.pureKotlinSourceFolders + private fun Module.getNonGeneratedKotlinSourceRoots(): List { val result = mutableListOf() - val facetSettings = KotlinFacet.get(this)?.configuration?.settings + val pureKotlinSourceFolders = this.pureKotlinSourceFolders val rootManager = ModuleRootManager.getInstance(this) for (contentEntry in rootManager.contentEntries) { @@ -105,7 +108,8 @@ private fun Module.getNonGeneratedKotlinSourceRoots(): List { if (sourceFolder.jpsElement.getProperties(kotlinSourceRootTypes)?.isForGeneratedSources == true) { continue } - facetSettings?.pureKotlinSourceFolders?.also { pureKotlin -> + + pureKotlinSourceFolders?.also { pureKotlin -> sourceFolder.file?.also { if (it.path in pureKotlin) { result += it diff --git a/idea/tests/org/jetbrains/kotlin/idea/multiplatform/multiPlatformSetup.kt b/idea/tests/org/jetbrains/kotlin/idea/multiplatform/multiPlatformSetup.kt index 372e0123184..91d651bacbf 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/multiplatform/multiPlatformSetup.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/multiplatform/multiPlatformSetup.kt @@ -21,6 +21,8 @@ import org.jetbrains.kotlin.idea.stubs.createMultiplatformFacetM3 import org.jetbrains.kotlin.idea.test.ConfigLibraryUtil import org.jetbrains.kotlin.idea.test.PluginTestCaseBase import org.jetbrains.kotlin.idea.util.application.executeWriteCommand +import org.jetbrains.kotlin.idea.util.projectStructure.getModuleDir +import org.jetbrains.kotlin.idea.util.sourceRoots import org.jetbrains.kotlin.platform.CommonPlatforms import org.jetbrains.kotlin.platform.TargetPlatform import org.jetbrains.kotlin.platform.isCommon @@ -106,15 +108,19 @@ fun AbstractMultiModuleTest.doSetup(projectModel: ProjectResolveModel) { for ((resolveModule, ideaModule) in resolveModulesToIdeaModules.entries) { val platform = resolveModule.platform + val pureKotlinSourceFolders = ideaModule.collectSourceFolders() ideaModule.createMultiplatformFacetM3( platform, - dependsOnModuleNames = resolveModule.dependencies.filter { it.kind == ResolveDependency.Kind.DEPENDS_ON }.map { it.to.name } + dependsOnModuleNames = resolveModule.dependencies.filter { it.kind == ResolveDependency.Kind.DEPENDS_ON }.map { it.to.name }, + pureKotlinSourceFolders = pureKotlinSourceFolders ) // New inference is enabled here as these tests are using type refinement feature that is working only along with NI ideaModule.enableMultiPlatform(additionalCompilerArguments = "-Xnew-inference") } } +private fun Module.collectSourceFolders(): List = sourceRoots.map { it.path } + private fun AbstractMultiModuleTest.doSetupProject(rootInfos: List) { val infosByModuleId = rootInfos.groupBy { it.moduleId } val modulesById = infosByModuleId.mapValues { (moduleId, infos) -> @@ -153,15 +159,25 @@ private fun AbstractMultiModuleTest.doSetupProject(rootInfos: List) { modulesById.forEach { (nameAndPlatform, module) -> val (name, platform) = nameAndPlatform + val pureKotlinSourceFolders = module.collectSourceFolders() when { platform.isCommon() -> { - module.createMultiplatformFacetM1(platform, useProjectSettings = false, implementedModuleNames = emptyList()) + module.createMultiplatformFacetM1( + platform, + useProjectSettings = false, + implementedModuleNames = emptyList(), + pureKotlinSourceFolders = pureKotlinSourceFolders + ) } else -> { val commonModuleId = ModuleId(name, CommonPlatforms.defaultCommonPlatform) - module.createMultiplatformFacetM1(platform, implementedModuleNames = listOf(commonModuleId.ideaModuleName())) + module.createMultiplatformFacetM1( + platform, + implementedModuleNames = listOf(commonModuleId.ideaModuleName()), + pureKotlinSourceFolders = pureKotlinSourceFolders + ) module.enableMultiPlatform() modulesById[commonModuleId]?.let { commonModule -> diff --git a/idea/tests/org/jetbrains/kotlin/idea/stubs/AbstractMultiModuleTest.kt b/idea/tests/org/jetbrains/kotlin/idea/stubs/AbstractMultiModuleTest.kt index aefa0064663..95ea0573d43 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/stubs/AbstractMultiModuleTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/stubs/AbstractMultiModuleTest.kt @@ -155,21 +155,25 @@ fun Module.createFacet( fun Module.createMultiplatformFacetM1( platformKind: TargetPlatform? = null, useProjectSettings: Boolean = true, - implementedModuleNames: List + implementedModuleNames: List, + pureKotlinSourceFolders: List ) { createFacetWithAdditionalSetup(platformKind, useProjectSettings) { this.implementedModuleNames = implementedModuleNames + this.pureKotlinSourceFolders = pureKotlinSourceFolders } } fun Module.createMultiplatformFacetM3( platformKind: TargetPlatform? = null, useProjectSettings: Boolean = true, - dependsOnModuleNames: List + dependsOnModuleNames: List, + pureKotlinSourceFolders: List ) { createFacetWithAdditionalSetup(platformKind, useProjectSettings) { this.dependsOnModuleNames = dependsOnModuleNames this.isHmppEnabled = true + this.pureKotlinSourceFolders = pureKotlinSourceFolders } }