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.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.util.ExternalSystemApiUtil
import com.intellij.openapi.module.Module
import com.intellij.openapi.roots.ui.configuration.ModulesProvider
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.settings.GradleProjectSettingsControl
import org.jetbrains.plugins.gradle.settings.DistributionType
import com.intellij.openapi.externalSystem.model.project.ProjectData
import javax.swing.Icon
abstract class KotlinGradleAbstractMultiplatformModuleBuilder(
@@ -106,6 +111,23 @@ abstract class KotlinGradleAbstractMultiplatformModuleBuilder(
}
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 {
flushSettingsGradleCopy(module)
}
@@ -83,7 +83,8 @@ abstract class AbstractGradleMultiplatformWizardTest : ProjectWizardTestCase<Abs
builder: KotlinGradleAbstractMultiplatformModuleBuilder,
vararg testClassNames: String,
metadataInside: Boolean = false,
performImport: Boolean = true
performImport: Boolean = true,
useQualifiedModuleNames: Boolean = false
): Project {
// TODO: check whether it's necessary to have templates in sources
// Temporary workaround for duplicated bundled template
@@ -133,7 +134,7 @@ abstract class AbstractGradleMultiplatformWizardTest : ProjectWizardTestCase<Abs
println(buildScriptText)
if (!performImport) return project
doImportProject(project)
doImportProject(project, useQualifiedModuleNames)
if (testClassNames.isNotEmpty()) {
doTestProject(project, *testClassNames)
}
@@ -175,7 +176,7 @@ abstract class AbstractGradleMultiplatformWizardTest : ProjectWizardTestCase<Abs
}.execute()
}
private fun doImportProject(project: Project) {
private fun doImportProject(project: Project, useQualifiedModuleNames: Boolean = false) {
ExternalSystemApiUtil.subscribe(
project,
GradleConstants.SYSTEM_ID,
@@ -199,6 +200,7 @@ abstract class AbstractGradleMultiplatformWizardTest : ProjectWizardTestCase<Abs
distributionType = DistributionType.DEFAULT_WRAPPED
externalProjectPath = project.basePath!!
gradleJvm = DEFAULT_SDK
isUseQualifiedModuleNames = useQualifiedModuleNames
}
val error = Ref.create<Couple<String>>()
@@ -44,6 +44,14 @@ class GradleMultiplatformWizardTest : AbstractGradleMultiplatformWizardTest() {
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
fun testWeb() {
testImportFromBuilder(KotlinGradleWebMultiplatformModuleBuilder(), "SampleTests", "SampleTestsJVM")