From f7eb294b80c119e5d7f17b4aaf297dd0317d9e94 Mon Sep 17 00:00:00 2001 From: Dmitry Savvinov Date: Tue, 10 Sep 2019 11:38:27 +0300 Subject: [PATCH] Configure facets depending on MPP version in tests setup --- .../idea/multiplatform/multiPlatformSetup.kt | 14 ++++-- .../idea/stubs/AbstractMultiModuleTest.kt | 48 ++++++++++++++----- 2 files changed, 45 insertions(+), 17 deletions(-) diff --git a/idea/tests/org/jetbrains/kotlin/idea/multiplatform/multiPlatformSetup.kt b/idea/tests/org/jetbrains/kotlin/idea/multiplatform/multiPlatformSetup.kt index 55aff9d745c..46a1e0c5586 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/multiplatform/multiPlatformSetup.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/multiplatform/multiPlatformSetup.kt @@ -18,7 +18,8 @@ import org.jetbrains.kotlin.codegen.forTestCompile.ForTestCompileRuntime import org.jetbrains.kotlin.idea.framework.CommonLibraryKind import org.jetbrains.kotlin.idea.framework.JSLibraryKind import org.jetbrains.kotlin.idea.stubs.AbstractMultiModuleTest -import org.jetbrains.kotlin.idea.stubs.createFacet +import org.jetbrains.kotlin.idea.stubs.createMultiplatformFacetM1 +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.test.TestJdkKind @@ -90,9 +91,9 @@ fun AbstractMultiModuleTest.doSetup(projectModel: ProjectResolveModel) { for ((resolveModule, ideaModule) in resolveModulesToIdeaModules.entries) { val platform = resolveModule.platform - ideaModule.createFacet( + ideaModule.createMultiplatformFacetM3( platform, - implementedModuleNames = 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 } ) // 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") @@ -138,11 +139,14 @@ private fun AbstractMultiModuleTest.doSetupProject(rootInfos: List) { modulesById.forEach { (nameAndPlatform, module) -> val (name, platform) = nameAndPlatform when { - platform.isCommon() -> module.createFacet(platform, useProjectSettings = false) + platform.isCommon() -> { + module.createMultiplatformFacetM1(platform, useProjectSettings = false, implementedModuleNames = emptyList()) + } + else -> { val commonModuleId = ModuleId(name, CommonPlatforms.defaultCommonPlatform) - module.createFacet(platform, implementedModuleNames = listOf(commonModuleId.ideaModuleName())) + module.createMultiplatformFacetM1(platform, implementedModuleNames = listOf(commonModuleId.ideaModuleName())) 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 e90ddd7271e..86d1e152940 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/stubs/AbstractMultiModuleTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/stubs/AbstractMultiModuleTest.kt @@ -23,9 +23,7 @@ import com.intellij.openapi.vfs.VfsUtil import com.intellij.openapi.vfs.newvfs.impl.VfsRootAccess import com.intellij.psi.PsiFile import com.intellij.testFramework.PsiTestUtil -import org.jetbrains.kotlin.config.CompilerSettings -import org.jetbrains.kotlin.config.KotlinFacetSettingsProvider -import org.jetbrains.kotlin.config.LanguageFeature +import org.jetbrains.kotlin.config.* import org.jetbrains.kotlin.idea.facet.getOrCreateFacet import org.jetbrains.kotlin.idea.facet.initializeIfNeeded import org.jetbrains.kotlin.idea.test.ConfigLibraryUtil @@ -140,22 +138,48 @@ abstract class AbstractMultiModuleTest : DaemonAnalyzerTestCase() { } fun Module.createFacet( + platformKind: TargetPlatform? = null, + useProjectSettings: Boolean = true +) { + createFacetWithAdditionalSetup(platformKind, useProjectSettings) { } +} + +fun Module.createMultiplatformFacetM1( platformKind: TargetPlatform? = null, useProjectSettings: Boolean = true, - implementedModuleNames: List? = null + implementedModuleNames: List +) { + createFacetWithAdditionalSetup(platformKind, useProjectSettings) { + this.implementedModuleNames = implementedModuleNames + } +} + +fun Module.createMultiplatformFacetM3( + platformKind: TargetPlatform? = null, + useProjectSettings: Boolean = true, + dependsOnModuleNames: List +) { + createFacetWithAdditionalSetup(platformKind, useProjectSettings) { + this.dependsOnModuleNames = dependsOnModuleNames + this.isHmppEnabled = true + } +} + +private fun Module.createFacetWithAdditionalSetup( + platformKind: TargetPlatform?, + useProjectSettings: Boolean, + additionalSetup: KotlinFacetSettings.() -> Unit ) { WriteAction.run { val modelsProvider = IdeModifiableModelsProviderImpl(project) - with (getOrCreateFacet(modelsProvider, useProjectSettings).configuration.settings) { + with(getOrCreateFacet(modelsProvider, useProjectSettings).configuration.settings) { initializeIfNeeded( - this@createFacet, - modelsProvider.getModifiableRootModel(this@createFacet), - platformKind + this@createFacetWithAdditionalSetup, + modelsProvider.getModifiableRootModel(this@createFacetWithAdditionalSetup), + platformKind ) - if (implementedModuleNames != null) { - this.implementedModuleNames = implementedModuleNames - } + additionalSetup() } modelsProvider.commit() } -} +} \ No newline at end of file