Configure facets depending on MPP version in tests setup

This commit is contained in:
Dmitry Savvinov
2019-09-10 11:38:27 +03:00
parent 182f5fafad
commit f7eb294b80
2 changed files with 45 additions and 17 deletions
@@ -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<RootInfo>) {
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 ->
@@ -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<String>? = null
implementedModuleNames: List<String>
) {
createFacetWithAdditionalSetup(platformKind, useProjectSettings) {
this.implementedModuleNames = implementedModuleNames
}
}
fun Module.createMultiplatformFacetM3(
platformKind: TargetPlatform? = null,
useProjectSettings: Boolean = true,
dependsOnModuleNames: List<String>
) {
createFacetWithAdditionalSetup(platformKind, useProjectSettings) {
this.dependsOnModuleNames = dependsOnModuleNames
this.isHmppEnabled = true
}
}
private fun Module.createFacetWithAdditionalSetup(
platformKind: TargetPlatform?,
useProjectSettings: Boolean,
additionalSetup: KotlinFacetSettings.() -> Unit
) {
WriteAction.run<Throwable> {
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()
}
}
}