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.CommonLibraryKind
import org.jetbrains.kotlin.idea.framework.JSLibraryKind import org.jetbrains.kotlin.idea.framework.JSLibraryKind
import org.jetbrains.kotlin.idea.stubs.AbstractMultiModuleTest 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.ConfigLibraryUtil
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase import org.jetbrains.kotlin.idea.test.PluginTestCaseBase
import org.jetbrains.kotlin.test.TestJdkKind import org.jetbrains.kotlin.test.TestJdkKind
@@ -90,9 +91,9 @@ 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
ideaModule.createFacet( ideaModule.createMultiplatformFacetM3(
platform, 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 // 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")
@@ -138,11 +139,14 @@ private fun AbstractMultiModuleTest.doSetupProject(rootInfos: List<RootInfo>) {
modulesById.forEach { (nameAndPlatform, module) -> modulesById.forEach { (nameAndPlatform, module) ->
val (name, platform) = nameAndPlatform val (name, platform) = nameAndPlatform
when { when {
platform.isCommon() -> module.createFacet(platform, useProjectSettings = false) platform.isCommon() -> {
module.createMultiplatformFacetM1(platform, useProjectSettings = false, implementedModuleNames = emptyList())
}
else -> { else -> {
val commonModuleId = ModuleId(name, CommonPlatforms.defaultCommonPlatform) val commonModuleId = ModuleId(name, CommonPlatforms.defaultCommonPlatform)
module.createFacet(platform, implementedModuleNames = listOf(commonModuleId.ideaModuleName())) module.createMultiplatformFacetM1(platform, implementedModuleNames = listOf(commonModuleId.ideaModuleName()))
module.enableMultiPlatform() module.enableMultiPlatform()
modulesById[commonModuleId]?.let { commonModule -> 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.openapi.vfs.newvfs.impl.VfsRootAccess
import com.intellij.psi.PsiFile import com.intellij.psi.PsiFile
import com.intellij.testFramework.PsiTestUtil import com.intellij.testFramework.PsiTestUtil
import org.jetbrains.kotlin.config.CompilerSettings import org.jetbrains.kotlin.config.*
import org.jetbrains.kotlin.config.KotlinFacetSettingsProvider
import org.jetbrains.kotlin.config.LanguageFeature
import org.jetbrains.kotlin.idea.facet.getOrCreateFacet import org.jetbrains.kotlin.idea.facet.getOrCreateFacet
import org.jetbrains.kotlin.idea.facet.initializeIfNeeded import org.jetbrains.kotlin.idea.facet.initializeIfNeeded
import org.jetbrains.kotlin.idea.test.ConfigLibraryUtil import org.jetbrains.kotlin.idea.test.ConfigLibraryUtil
@@ -140,22 +138,48 @@ abstract class AbstractMultiModuleTest : DaemonAnalyzerTestCase() {
} }
fun Module.createFacet( fun Module.createFacet(
platformKind: TargetPlatform? = null,
useProjectSettings: Boolean = true
) {
createFacetWithAdditionalSetup(platformKind, useProjectSettings) { }
}
fun Module.createMultiplatformFacetM1(
platformKind: TargetPlatform? = null, platformKind: TargetPlatform? = null,
useProjectSettings: Boolean = true, 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> { WriteAction.run<Throwable> {
val modelsProvider = IdeModifiableModelsProviderImpl(project) val modelsProvider = IdeModifiableModelsProviderImpl(project)
with (getOrCreateFacet(modelsProvider, useProjectSettings).configuration.settings) { with(getOrCreateFacet(modelsProvider, useProjectSettings).configuration.settings) {
initializeIfNeeded( initializeIfNeeded(
this@createFacet, this@createFacetWithAdditionalSetup,
modelsProvider.getModifiableRootModel(this@createFacet), modelsProvider.getModifiableRootModel(this@createFacetWithAdditionalSetup),
platformKind platformKind
) )
if (implementedModuleNames != null) { additionalSetup()
this.implementedModuleNames = implementedModuleNames
}
} }
modelsProvider.commit() modelsProvider.commit()
} }
} }