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>> =
setOf(SourceKotlinRootType, TestSourceKotlinRootType) + JavaModuleSourceRootTypes.SOURCES
private val Module.pureKotlinSourceFolders: List<String>?
get() = KotlinFacet.get(this)?.configuration?.settings?.pureKotlinSourceFolders
private fun Module.getNonGeneratedKotlinSourceRoots(): List<VirtualFile> {
val result = mutableListOf<VirtualFile>()
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<VirtualFile> {
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
@@ -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<String> = sourceRoots.map { it.path }
private fun AbstractMultiModuleTest.doSetupProject(rootInfos: List<RootInfo>) {
val infosByModuleId = rootInfos.groupBy { it.moduleId }
val modulesById = infosByModuleId.mapValues { (moduleId, infos) ->
@@ -153,15 +159,25 @@ private fun AbstractMultiModuleTest.doSetupProject(rootInfos: List<RootInfo>) {
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 ->
@@ -155,21 +155,25 @@ fun Module.createFacet(
fun Module.createMultiplatformFacetM1(
platformKind: TargetPlatform? = null,
useProjectSettings: Boolean = true,
implementedModuleNames: List<String>
implementedModuleNames: List<String>,
pureKotlinSourceFolders: List<String>
) {
createFacetWithAdditionalSetup(platformKind, useProjectSettings) {
this.implementedModuleNames = implementedModuleNames
this.pureKotlinSourceFolders = pureKotlinSourceFolders
}
}
fun Module.createMultiplatformFacetM3(
platformKind: TargetPlatform? = null,
useProjectSettings: Boolean = true,
dependsOnModuleNames: List<String>
dependsOnModuleNames: List<String>,
pureKotlinSourceFolders: List<String>
) {
createFacetWithAdditionalSetup(platformKind, useProjectSettings) {
this.dependsOnModuleNames = dependsOnModuleNames
this.isHmppEnabled = true
this.pureKotlinSourceFolders = pureKotlinSourceFolders
}
}