Fix reimport of Kotlin projects created via wizard

#KT-27941 Fixed
This commit is contained in:
Andrey Uskov
2018-12-19 21:54:44 +03:00
parent e520c98182
commit 250eee48a1
3 changed files with 35 additions and 3 deletions
@@ -7,7 +7,11 @@ package org.jetbrains.kotlin.idea.configuration
import com.intellij.ide.util.projectWizard.ModuleWizardStep import com.intellij.ide.util.projectWizard.ModuleWizardStep
import com.intellij.ide.util.projectWizard.WizardContext import com.intellij.ide.util.projectWizard.WizardContext
import com.intellij.openapi.externalSystem.ExternalSystemModulePropertyManager
import com.intellij.openapi.externalSystem.model.ProjectSystemId
import com.intellij.openapi.externalSystem.model.project.ModuleData
import com.intellij.openapi.externalSystem.service.project.wizard.ExternalModuleSettingsStep import com.intellij.openapi.externalSystem.service.project.wizard.ExternalModuleSettingsStep
import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil
import com.intellij.openapi.module.Module import com.intellij.openapi.module.Module
import com.intellij.openapi.roots.ui.configuration.ModulesProvider import com.intellij.openapi.roots.ui.configuration.ModulesProvider
import com.intellij.openapi.vfs.VfsUtil import com.intellij.openapi.vfs.VfsUtil
@@ -21,6 +25,7 @@ import org.jetbrains.plugins.gradle.frameworkSupport.BuildScriptDataBuilder
import org.jetbrains.plugins.gradle.service.project.wizard.GradleModuleBuilder import org.jetbrains.plugins.gradle.service.project.wizard.GradleModuleBuilder
import org.jetbrains.plugins.gradle.service.settings.GradleProjectSettingsControl import org.jetbrains.plugins.gradle.service.settings.GradleProjectSettingsControl
import org.jetbrains.plugins.gradle.settings.DistributionType import org.jetbrains.plugins.gradle.settings.DistributionType
import com.intellij.openapi.externalSystem.model.project.ProjectData
import javax.swing.Icon import javax.swing.Icon
abstract class KotlinGradleAbstractMultiplatformModuleBuilder( abstract class KotlinGradleAbstractMultiplatformModuleBuilder(
@@ -106,6 +111,23 @@ abstract class KotlinGradleAbstractMultiplatformModuleBuilder(
} }
if (notImportedCommonSourceSets) GradlePropertiesFileFacade.forProject(module.project).addNotImportedCommonSourceSetsProperty() if (notImportedCommonSourceSets) GradlePropertiesFileFacade.forProject(module.project).addNotImportedCommonSourceSetsProperty()
// Ensure project root path is set
val propertyManager = ExternalSystemModulePropertyManager.getInstance(module)
val path = externalProjectSettings.externalProjectPath
val externalSystemId = propertyManager.getExternalSystemId()
if (ExternalSystemApiUtil.getExternalRootProjectPath(module) == null && externalSystemId != null) {
val projectSystemId = ProjectSystemId(externalSystemId)
val projectData = ProjectData(projectSystemId, module.name, path, path)
val moduleData = ModuleData(
propertyManager.getLinkedProjectId() ?: "",
projectSystemId,
propertyManager.getExternalModuleType() ?: "",
module.name,
path,
path
)
propertyManager.setExternalOptions(projectSystemId, moduleData, projectData)
}
} finally { } finally {
flushSettingsGradleCopy(module) flushSettingsGradleCopy(module)
} }
@@ -83,7 +83,8 @@ abstract class AbstractGradleMultiplatformWizardTest : ProjectWizardTestCase<Abs
builder: KotlinGradleAbstractMultiplatformModuleBuilder, builder: KotlinGradleAbstractMultiplatformModuleBuilder,
vararg testClassNames: String, vararg testClassNames: String,
metadataInside: Boolean = false, metadataInside: Boolean = false,
performImport: Boolean = true performImport: Boolean = true,
useQualifiedModuleNames: Boolean = false
): Project { ): Project {
// TODO: check whether it's necessary to have templates in sources // TODO: check whether it's necessary to have templates in sources
// Temporary workaround for duplicated bundled template // Temporary workaround for duplicated bundled template
@@ -133,7 +134,7 @@ abstract class AbstractGradleMultiplatformWizardTest : ProjectWizardTestCase<Abs
println(buildScriptText) println(buildScriptText)
if (!performImport) return project if (!performImport) return project
doImportProject(project) doImportProject(project, useQualifiedModuleNames)
if (testClassNames.isNotEmpty()) { if (testClassNames.isNotEmpty()) {
doTestProject(project, *testClassNames) doTestProject(project, *testClassNames)
} }
@@ -175,7 +176,7 @@ abstract class AbstractGradleMultiplatformWizardTest : ProjectWizardTestCase<Abs
}.execute() }.execute()
} }
private fun doImportProject(project: Project) { private fun doImportProject(project: Project, useQualifiedModuleNames: Boolean = false) {
ExternalSystemApiUtil.subscribe( ExternalSystemApiUtil.subscribe(
project, project,
GradleConstants.SYSTEM_ID, GradleConstants.SYSTEM_ID,
@@ -199,6 +200,7 @@ abstract class AbstractGradleMultiplatformWizardTest : ProjectWizardTestCase<Abs
distributionType = DistributionType.DEFAULT_WRAPPED distributionType = DistributionType.DEFAULT_WRAPPED
externalProjectPath = project.basePath!! externalProjectPath = project.basePath!!
gradleJvm = DEFAULT_SDK gradleJvm = DEFAULT_SDK
isUseQualifiedModuleNames = useQualifiedModuleNames
} }
val error = Ref.create<Couple<String>>() val error = Ref.create<Couple<String>>()
@@ -44,6 +44,14 @@ class GradleMultiplatformWizardTest : AbstractGradleMultiplatformWizardTest() {
runTaskInProject(project, builder.nativeTestName) runTaskInProject(project, builder.nativeTestName)
} }
@Test
fun testSharedWithQualifiedName() {
val builder = KotlinGradleSharedMultiplatformModuleBuilder()
val project = testImportFromBuilder(builder, "SampleTests", "SampleTestsJVM", "SampleTestsNative", metadataInside = true, useQualifiedModuleNames = true)
runTaskInProject(project, builder.nativeTestName)
}
@Test @Test
fun testWeb() { fun testWeb() {
testImportFromBuilder(KotlinGradleWebMultiplatformModuleBuilder(), "SampleTests", "SampleTestsJVM") testImportFromBuilder(KotlinGradleWebMultiplatformModuleBuilder(), "SampleTests", "SampleTestsJVM")