Fix reimport of Kotlin projects created via wizard
#KT-27941 Fixed
This commit is contained in:
+22
@@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-3
@@ -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")
|
||||||
|
|||||||
Reference in New Issue
Block a user