Fixed tests for pureKotlinSourceFolders by extending created facets

This commit is contained in:
Yaroslav Chernyshev
2020-07-21 17:24:50 +03:00
parent f490085142
commit 96d9dad429
3 changed files with 31 additions and 7 deletions
@@ -94,9 +94,12 @@ private fun findLongestExistingPackage(module: Module, packageName: String): Psi
private val kotlinSourceRootTypes: Set<JpsModuleSourceRootType<JavaSourceRootProperties>> = private val kotlinSourceRootTypes: Set<JpsModuleSourceRootType<JavaSourceRootProperties>> =
setOf(SourceKotlinRootType, TestSourceKotlinRootType) + JavaModuleSourceRootTypes.SOURCES setOf(SourceKotlinRootType, TestSourceKotlinRootType) + JavaModuleSourceRootTypes.SOURCES
private val Module.pureKotlinSourceFolders: List<String>?
get() = KotlinFacet.get(this)?.configuration?.settings?.pureKotlinSourceFolders
private fun Module.getNonGeneratedKotlinSourceRoots(): List<VirtualFile> { private fun Module.getNonGeneratedKotlinSourceRoots(): List<VirtualFile> {
val result = mutableListOf<VirtualFile>() val result = mutableListOf<VirtualFile>()
val facetSettings = KotlinFacet.get(this)?.configuration?.settings val pureKotlinSourceFolders = this.pureKotlinSourceFolders
val rootManager = ModuleRootManager.getInstance(this) val rootManager = ModuleRootManager.getInstance(this)
for (contentEntry in rootManager.contentEntries) { for (contentEntry in rootManager.contentEntries) {
@@ -105,7 +108,8 @@ private fun Module.getNonGeneratedKotlinSourceRoots(): List<VirtualFile> {
if (sourceFolder.jpsElement.getProperties(kotlinSourceRootTypes)?.isForGeneratedSources == true) { if (sourceFolder.jpsElement.getProperties(kotlinSourceRootTypes)?.isForGeneratedSources == true) {
continue continue
} }
facetSettings?.pureKotlinSourceFolders?.also { pureKotlin ->
pureKotlinSourceFolders?.also { pureKotlin ->
sourceFolder.file?.also { sourceFolder.file?.also {
if (it.path in pureKotlin) { if (it.path in pureKotlin) {
result += it result += it
@@ -21,6 +21,8 @@ import org.jetbrains.kotlin.idea.stubs.createMultiplatformFacetM3
import org.jetbrains.kotlin.idea.test.ConfigLibraryUtil import org.jetbrains.kotlin.idea.test.ConfigLibraryUtil
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase import org.jetbrains.kotlin.idea.test.PluginTestCaseBase
import org.jetbrains.kotlin.idea.util.application.executeWriteCommand 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.CommonPlatforms
import org.jetbrains.kotlin.platform.TargetPlatform import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.platform.isCommon import org.jetbrains.kotlin.platform.isCommon
@@ -106,15 +108,19 @@ fun AbstractMultiModuleTest.doSetup(projectModel: ProjectResolveModel) {
for ((resolveModule, ideaModule) in resolveModulesToIdeaModules.entries) { for ((resolveModule, ideaModule) in resolveModulesToIdeaModules.entries) {
val platform = resolveModule.platform val platform = resolveModule.platform
val pureKotlinSourceFolders = ideaModule.collectSourceFolders()
ideaModule.createMultiplatformFacetM3( ideaModule.createMultiplatformFacetM3(
platform, 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 // 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") ideaModule.enableMultiPlatform(additionalCompilerArguments = "-Xnew-inference")
} }
} }
private fun Module.collectSourceFolders(): List<String> = sourceRoots.map { it.path }
private fun AbstractMultiModuleTest.doSetupProject(rootInfos: List<RootInfo>) { private fun AbstractMultiModuleTest.doSetupProject(rootInfos: List<RootInfo>) {
val infosByModuleId = rootInfos.groupBy { it.moduleId } val infosByModuleId = rootInfos.groupBy { it.moduleId }
val modulesById = infosByModuleId.mapValues { (moduleId, infos) -> val modulesById = infosByModuleId.mapValues { (moduleId, infos) ->
@@ -153,15 +159,25 @@ private fun AbstractMultiModuleTest.doSetupProject(rootInfos: List<RootInfo>) {
modulesById.forEach { (nameAndPlatform, module) -> modulesById.forEach { (nameAndPlatform, module) ->
val (name, platform) = nameAndPlatform val (name, platform) = nameAndPlatform
val pureKotlinSourceFolders = module.collectSourceFolders()
when { when {
platform.isCommon() -> { platform.isCommon() -> {
module.createMultiplatformFacetM1(platform, useProjectSettings = false, implementedModuleNames = emptyList()) module.createMultiplatformFacetM1(
platform,
useProjectSettings = false,
implementedModuleNames = emptyList(),
pureKotlinSourceFolders = pureKotlinSourceFolders
)
} }
else -> { else -> {
val commonModuleId = ModuleId(name, CommonPlatforms.defaultCommonPlatform) val commonModuleId = ModuleId(name, CommonPlatforms.defaultCommonPlatform)
module.createMultiplatformFacetM1(platform, implementedModuleNames = listOf(commonModuleId.ideaModuleName())) module.createMultiplatformFacetM1(
platform,
implementedModuleNames = listOf(commonModuleId.ideaModuleName()),
pureKotlinSourceFolders = pureKotlinSourceFolders
)
module.enableMultiPlatform() module.enableMultiPlatform()
modulesById[commonModuleId]?.let { commonModule -> modulesById[commonModuleId]?.let { commonModule ->
@@ -155,21 +155,25 @@ fun Module.createFacet(
fun Module.createMultiplatformFacetM1( fun Module.createMultiplatformFacetM1(
platformKind: TargetPlatform? = null, platformKind: TargetPlatform? = null,
useProjectSettings: Boolean = true, useProjectSettings: Boolean = true,
implementedModuleNames: List<String> implementedModuleNames: List<String>,
pureKotlinSourceFolders: List<String>
) { ) {
createFacetWithAdditionalSetup(platformKind, useProjectSettings) { createFacetWithAdditionalSetup(platformKind, useProjectSettings) {
this.implementedModuleNames = implementedModuleNames this.implementedModuleNames = implementedModuleNames
this.pureKotlinSourceFolders = pureKotlinSourceFolders
} }
} }
fun Module.createMultiplatformFacetM3( fun Module.createMultiplatformFacetM3(
platformKind: TargetPlatform? = null, platformKind: TargetPlatform? = null,
useProjectSettings: Boolean = true, useProjectSettings: Boolean = true,
dependsOnModuleNames: List<String> dependsOnModuleNames: List<String>,
pureKotlinSourceFolders: List<String>
) { ) {
createFacetWithAdditionalSetup(platformKind, useProjectSettings) { createFacetWithAdditionalSetup(platformKind, useProjectSettings) {
this.dependsOnModuleNames = dependsOnModuleNames this.dependsOnModuleNames = dependsOnModuleNames
this.isHmppEnabled = true this.isHmppEnabled = true
this.pureKotlinSourceFolders = pureKotlinSourceFolders
} }
} }