Create Kotlin SDK on load or import project with JS/Common modules
#KT-22590 Fixed
This commit is contained in:
+6
@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.gradle.KotlinModule
|
|||||||
import org.jetbrains.kotlin.gradle.KotlinPlatform
|
import org.jetbrains.kotlin.gradle.KotlinPlatform
|
||||||
import org.jetbrains.kotlin.gradle.KotlinSourceSet
|
import org.jetbrains.kotlin.gradle.KotlinSourceSet
|
||||||
import org.jetbrains.kotlin.idea.facet.*
|
import org.jetbrains.kotlin.idea.facet.*
|
||||||
|
import org.jetbrains.kotlin.idea.framework.KotlinSdkType
|
||||||
import org.jetbrains.kotlin.idea.inspections.gradle.findAll
|
import org.jetbrains.kotlin.idea.inspections.gradle.findAll
|
||||||
import org.jetbrains.kotlin.idea.inspections.gradle.findKotlinPluginVersion
|
import org.jetbrains.kotlin.idea.inspections.gradle.findKotlinPluginVersion
|
||||||
import org.jetbrains.kotlin.idea.platform.IdePlatformKindTooling
|
import org.jetbrains.kotlin.idea.platform.IdePlatformKindTooling
|
||||||
@@ -43,6 +44,7 @@ class KotlinSourceSetDataService : AbstractProjectDataService<GradleSourceSetDat
|
|||||||
project: Project,
|
project: Project,
|
||||||
modelsProvider: IdeModifiableModelsProvider
|
modelsProvider: IdeModifiableModelsProvider
|
||||||
) {
|
) {
|
||||||
|
var hasKotlinSourceRootTypes = false
|
||||||
for (nodeToImport in toImport) {
|
for (nodeToImport in toImport) {
|
||||||
val mainModuleData = ExternalSystemApiUtil.findParent(
|
val mainModuleData = ExternalSystemApiUtil.findParent(
|
||||||
nodeToImport,
|
nodeToImport,
|
||||||
@@ -56,6 +58,7 @@ class KotlinSourceSetDataService : AbstractProjectDataService<GradleSourceSetDat
|
|||||||
|
|
||||||
if (platform != KotlinPlatform.JVM && platform != KotlinPlatform.ANDROID) {
|
if (platform != KotlinPlatform.JVM && platform != KotlinPlatform.ANDROID) {
|
||||||
migrateNonJvmSourceFolders(rootModel)
|
migrateNonJvmSourceFolders(rootModel)
|
||||||
|
hasKotlinSourceRootTypes = true
|
||||||
}
|
}
|
||||||
|
|
||||||
configureFacet(sourceSetData, kotlinSourceSet, mainModuleData, ideModule, modelsProvider)?.let { facet ->
|
configureFacet(sourceSetData, kotlinSourceSet, mainModuleData, ideModule, modelsProvider)?.let { facet ->
|
||||||
@@ -66,6 +69,9 @@ class KotlinSourceSetDataService : AbstractProjectDataService<GradleSourceSetDat
|
|||||||
assignTestScope(rootModel)
|
assignTestScope(rootModel)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (hasKotlinSourceRootTypes) {
|
||||||
|
KotlinSdkType.setUpIfNeeded()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun assignTestScope(rootModel: ModifiableRootModel) {
|
private fun assignTestScope(rootModel: ModifiableRootModel) {
|
||||||
|
|||||||
@@ -14,6 +14,19 @@ import org.jetbrains.kotlin.konan.target.HostManager
|
|||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
|
|
||||||
class GradleMultiplatformWizardTest : AbstractGradleMultiplatformWizardTest() {
|
class GradleMultiplatformWizardTest : AbstractGradleMultiplatformWizardTest() {
|
||||||
|
|
||||||
|
lateinit var sdkCreationChecker: KotlinSdkCreationChecker
|
||||||
|
|
||||||
|
override fun setUp() {
|
||||||
|
super.setUp()
|
||||||
|
sdkCreationChecker = KotlinSdkCreationChecker()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun tearDown() {
|
||||||
|
sdkCreationChecker.removeNewKotlinSdk()
|
||||||
|
super.tearDown()
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun testMobile() {
|
fun testMobile() {
|
||||||
// TODO: add import & tests here when we will be able to locate Android SDK automatically (see KT-27635)
|
// TODO: add import & tests here when we will be able to locate Android SDK automatically (see KT-27635)
|
||||||
|
|||||||
@@ -0,0 +1,33 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||||
|
* that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.gradle
|
||||||
|
|
||||||
|
import com.intellij.openapi.application.ApplicationManager
|
||||||
|
import com.intellij.openapi.application.runWriteAction
|
||||||
|
import com.intellij.openapi.projectRoots.ProjectJdkTable
|
||||||
|
import com.intellij.openapi.projectRoots.Sdk
|
||||||
|
import org.jetbrains.kotlin.idea.framework.KotlinSdkType
|
||||||
|
|
||||||
|
class KotlinSdkCreationChecker {
|
||||||
|
|
||||||
|
private val sdksBefore: Array<out Sdk> = ProjectJdkTable.getInstance().allJdks
|
||||||
|
|
||||||
|
fun getKotlinSdks() = ProjectJdkTable.getInstance().allJdks.filter { it.sdkType is KotlinSdkType }
|
||||||
|
|
||||||
|
private fun getCreatedKotlinSdks() =
|
||||||
|
ProjectJdkTable.getInstance().allJdks.filter { !sdksBefore.contains(it) && it.sdkType is KotlinSdkType }
|
||||||
|
|
||||||
|
fun isKotlinSdkCreated() = getCreatedKotlinSdks().isNotEmpty()
|
||||||
|
|
||||||
|
fun removeNewKotlinSdk() {
|
||||||
|
val jdkTable = ProjectJdkTable.getInstance()
|
||||||
|
ApplicationManager.getApplication().invokeAndWait {
|
||||||
|
runWriteAction {
|
||||||
|
getCreatedKotlinSdks().forEach { jdkTable.removeJdk(it) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+19
@@ -11,17 +11,36 @@ import org.jetbrains.jps.model.java.JavaSourceRootType
|
|||||||
import org.jetbrains.kotlin.config.JvmTarget
|
import org.jetbrains.kotlin.config.JvmTarget
|
||||||
import org.jetbrains.kotlin.config.KotlinResourceRootType
|
import org.jetbrains.kotlin.config.KotlinResourceRootType
|
||||||
import org.jetbrains.kotlin.config.KotlinSourceRootType
|
import org.jetbrains.kotlin.config.KotlinSourceRootType
|
||||||
|
import org.jetbrains.kotlin.idea.codeInsight.gradle.ExternalSystemImportingTestCase
|
||||||
import org.jetbrains.kotlin.idea.codeInsight.gradle.GradleImportingTestCase
|
import org.jetbrains.kotlin.idea.codeInsight.gradle.GradleImportingTestCase
|
||||||
import org.jetbrains.kotlin.platform.impl.CommonIdePlatformKind
|
import org.jetbrains.kotlin.platform.impl.CommonIdePlatformKind
|
||||||
import org.jetbrains.kotlin.platform.impl.JsIdePlatformKind
|
import org.jetbrains.kotlin.platform.impl.JsIdePlatformKind
|
||||||
import org.jetbrains.kotlin.platform.impl.JvmIdePlatformKind
|
import org.jetbrains.kotlin.platform.impl.JvmIdePlatformKind
|
||||||
import org.jetbrains.kotlin.test.KotlinTestUtils
|
import org.jetbrains.kotlin.test.KotlinTestUtils
|
||||||
|
import org.junit.After
|
||||||
|
import org.junit.Before
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
import org.junit.runners.Parameterized
|
import org.junit.runners.Parameterized
|
||||||
|
|
||||||
class NewMultiplatformProjectImportingTest : GradleImportingTestCase() {
|
class NewMultiplatformProjectImportingTest : GradleImportingTestCase() {
|
||||||
private val kotlinVersion = "1.3.0-rc-146"
|
private val kotlinVersion = "1.3.0-rc-146"
|
||||||
|
|
||||||
|
@Before
|
||||||
|
fun saveSdksBeforeTest() {
|
||||||
|
val kotlinSdks = sdkCreationChecker?.getKotlinSdks() ?: emptyList()
|
||||||
|
if (kotlinSdks.isNotEmpty()) {
|
||||||
|
ExternalSystemImportingTestCase.fail("Found Kotlin SDK before importing test. Sdk list: $kotlinSdks")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@After
|
||||||
|
fun checkSdkCreated() {
|
||||||
|
if (sdkCreationChecker?.isKotlinSdkCreated() == false) {
|
||||||
|
ExternalSystemImportingTestCase.fail("Kotlin SDK was not created during import of MPP Project.")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun testProjectDependency() {
|
fun testProjectDependency() {
|
||||||
configureByFiles()
|
configureByFiles()
|
||||||
|
|||||||
+5
@@ -43,6 +43,7 @@ import org.gradle.util.GradleVersion
|
|||||||
import org.gradle.wrapper.GradleWrapperMain
|
import org.gradle.wrapper.GradleWrapperMain
|
||||||
import org.intellij.lang.annotations.Language
|
import org.intellij.lang.annotations.Language
|
||||||
import org.jetbrains.annotations.NonNls
|
import org.jetbrains.annotations.NonNls
|
||||||
|
import org.jetbrains.kotlin.gradle.KotlinSdkCreationChecker
|
||||||
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase
|
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase
|
||||||
import org.jetbrains.kotlin.test.KotlinTestUtils
|
import org.jetbrains.kotlin.test.KotlinTestUtils
|
||||||
import org.jetbrains.plugins.gradle.settings.DistributionType
|
import org.jetbrains.plugins.gradle.settings.DistributionType
|
||||||
@@ -65,6 +66,8 @@ import java.util.*
|
|||||||
@RunWith(value = Parameterized::class)
|
@RunWith(value = Parameterized::class)
|
||||||
abstract class GradleImportingTestCase : ExternalSystemImportingTestCase() {
|
abstract class GradleImportingTestCase : ExternalSystemImportingTestCase() {
|
||||||
|
|
||||||
|
protected var sdkCreationChecker : KotlinSdkCreationChecker? = null
|
||||||
|
|
||||||
@JvmField
|
@JvmField
|
||||||
@Rule
|
@Rule
|
||||||
var name = TestName()
|
var name = TestName()
|
||||||
@@ -101,6 +104,7 @@ abstract class GradleImportingTestCase : ExternalSystemImportingTestCase() {
|
|||||||
GradleSettings.getInstance(myProject).gradleVmOptions = "-Xmx128m -XX:MaxPermSize=64m"
|
GradleSettings.getInstance(myProject).gradleVmOptions = "-Xmx128m -XX:MaxPermSize=64m"
|
||||||
System.setProperty(ExternalSystemExecutionSettings.REMOTE_PROCESS_IDLE_TTL_IN_MS_KEY, GRADLE_DAEMON_TTL_MS.toString())
|
System.setProperty(ExternalSystemExecutionSettings.REMOTE_PROCESS_IDLE_TTL_IN_MS_KEY, GRADLE_DAEMON_TTL_MS.toString())
|
||||||
configureWrapper()
|
configureWrapper()
|
||||||
|
sdkCreationChecker = KotlinSdkCreationChecker()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun tearDown() {
|
override fun tearDown() {
|
||||||
@@ -114,6 +118,7 @@ abstract class GradleImportingTestCase : ExternalSystemImportingTestCase() {
|
|||||||
|
|
||||||
Messages.setTestDialog(TestDialog.DEFAULT)
|
Messages.setTestDialog(TestDialog.DEFAULT)
|
||||||
FileUtil.delete(BuildManager.getInstance().buildSystemDirectory.toFile())
|
FileUtil.delete(BuildManager.getInstance().buildSystemDirectory.toFile())
|
||||||
|
sdkCreationChecker?.removeNewKotlinSdk()
|
||||||
} finally {
|
} finally {
|
||||||
super.tearDown()
|
super.tearDown()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -831,6 +831,8 @@
|
|||||||
|
|
||||||
<sdkType implementation="org.jetbrains.kotlin.idea.framework.KotlinSdkType"/>
|
<sdkType implementation="org.jetbrains.kotlin.idea.framework.KotlinSdkType"/>
|
||||||
|
|
||||||
|
<postStartupActivity implementation="org.jetbrains.kotlin.idea.framework.CreateKotlinSdkActivity"/>
|
||||||
|
|
||||||
<moduleConfigurationEditorProvider implementation="org.jetbrains.kotlin.idea.roots.ui.NonJvmKotlinModuleEditorsProvider"/>
|
<moduleConfigurationEditorProvider implementation="org.jetbrains.kotlin.idea.roots.ui.NonJvmKotlinModuleEditorsProvider"/>
|
||||||
|
|
||||||
<projectStructure.sourceRootEditHandler implementation="org.jetbrains.kotlin.idea.roots.ui.KotlinModuleSourceRootEditHandler$Source"/>
|
<projectStructure.sourceRootEditHandler implementation="org.jetbrains.kotlin.idea.roots.ui.KotlinModuleSourceRootEditHandler$Source"/>
|
||||||
|
|||||||
@@ -0,0 +1,30 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||||
|
* that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.idea.framework
|
||||||
|
|
||||||
|
import com.intellij.openapi.project.Project
|
||||||
|
import com.intellij.openapi.startup.StartupActivity
|
||||||
|
import org.jetbrains.kotlin.idea.project.platform
|
||||||
|
import org.jetbrains.kotlin.idea.util.projectStructure.allModules
|
||||||
|
import org.jetbrains.kotlin.platform.impl.CommonIdePlatformKind
|
||||||
|
import org.jetbrains.kotlin.platform.impl.JsIdePlatformKind
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This StartupActivity creates KotlinSdk for projects containing JS or Common modules.
|
||||||
|
* This activity is work-around required until the issue IDEA-203655 is fixed. The major case is to create
|
||||||
|
* Kotlin SDK when the KotlinSourceRootType is created
|
||||||
|
*/
|
||||||
|
class CreateKotlinSdkActivity : StartupActivity {
|
||||||
|
|
||||||
|
override fun runActivity(project: Project) {
|
||||||
|
val kotlinSdkIsRequired = project.allModules().any {
|
||||||
|
it.platform is JsIdePlatformKind.Platform || it.platform is CommonIdePlatformKind.Platform
|
||||||
|
}
|
||||||
|
if (kotlinSdkIsRequired) {
|
||||||
|
KotlinSdkType.setUpIfNeeded()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -18,7 +18,6 @@ package org.jetbrains.kotlin.idea.configuration
|
|||||||
|
|
||||||
import com.intellij.openapi.application.ApplicationManager
|
import com.intellij.openapi.application.ApplicationManager
|
||||||
import com.intellij.openapi.application.impl.ApplicationImpl
|
import com.intellij.openapi.application.impl.ApplicationImpl
|
||||||
import com.intellij.openapi.util.io.FileUtil
|
|
||||||
import org.jetbrains.kotlin.config.ApiVersion
|
import org.jetbrains.kotlin.config.ApiVersion
|
||||||
import org.jetbrains.kotlin.config.KotlinFacetSettingsProvider
|
import org.jetbrains.kotlin.config.KotlinFacetSettingsProvider
|
||||||
import org.jetbrains.kotlin.config.LanguageVersion
|
import org.jetbrains.kotlin.config.LanguageVersion
|
||||||
@@ -27,9 +26,7 @@ import org.jetbrains.kotlin.idea.compiler.configuration.KotlinCommonCompilerArgu
|
|||||||
import org.jetbrains.kotlin.idea.project.getLanguageVersionSettings
|
import org.jetbrains.kotlin.idea.project.getLanguageVersionSettings
|
||||||
import org.jetbrains.kotlin.idea.project.languageVersionSettings
|
import org.jetbrains.kotlin.idea.project.languageVersionSettings
|
||||||
import org.junit.Assert
|
import org.junit.Assert
|
||||||
import java.io.File
|
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
import java.nio.file.Path
|
|
||||||
|
|
||||||
open class ConfigureKotlinInTempDirTest : AbstractConfigureKotlinInTempDirTest() {
|
open class ConfigureKotlinInTempDirTest : AbstractConfigureKotlinInTempDirTest() {
|
||||||
@Throws(IOException::class)
|
@Throws(IOException::class)
|
||||||
@@ -123,9 +120,4 @@ open class ConfigureKotlinInTempDirTest : AbstractConfigureKotlinInTempDirTest()
|
|||||||
application.saveAll()
|
application.saveAll()
|
||||||
Assert.assertTrue(project.baseDir.findFileByRelativePath(".idea/kotlinc.xml") == null)
|
Assert.assertTrue(project.baseDir.findFileByRelativePath(".idea/kotlinc.xml") == null)
|
||||||
}
|
}
|
||||||
|
|
||||||
//todo[Sedunov]: wait for fix in platform to avoid misunderstood from Java newbies (also PluginStartupComponent)
|
|
||||||
/*fun testKotlinSdkAdded() {
|
|
||||||
Assert.assertTrue(ProjectJdkTable.getInstance().allJdks.any { it.sdkType is KotlinSdkType })
|
|
||||||
}*/
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user