diff --git a/idea/src/org/jetbrains/kotlin/idea/PluginStartupComponent.java b/idea/src/org/jetbrains/kotlin/idea/PluginStartupComponent.java index 35e49d703f5..b9314c396f8 100644 --- a/idea/src/org/jetbrains/kotlin/idea/PluginStartupComponent.java +++ b/idea/src/org/jetbrains/kotlin/idea/PluginStartupComponent.java @@ -25,10 +25,12 @@ import com.intellij.openapi.editor.EditorFactory; import com.intellij.openapi.editor.event.DocumentAdapter; import com.intellij.openapi.editor.event.DocumentEvent; import com.intellij.openapi.fileEditor.FileDocumentManager; +import com.intellij.openapi.roots.ui.configuration.projectRoot.ProjectSdksModel; import com.intellij.openapi.updateSettings.impl.UpdateChecker; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.search.searches.IndexPatternSearch; import org.jetbrains.annotations.NotNull; +import org.jetbrains.kotlin.idea.framework.KotlinSdkType; import org.jetbrains.kotlin.idea.search.ideaExtensions.KotlinTodoSearcher; import org.jetbrains.kotlin.utils.PathUtil; @@ -73,6 +75,8 @@ public class PluginStartupComponent implements ApplicationComponent { }); ServiceManager.getService(IndexPatternSearch.class).registerExecutor(new KotlinTodoSearcher()); + + KotlinSdkType.Companion.setUpIfNeeded(); } private static void registerPathVariable() { diff --git a/idea/src/org/jetbrains/kotlin/idea/framework/KotlinSdkType.kt b/idea/src/org/jetbrains/kotlin/idea/framework/KotlinSdkType.kt index b5b04ce7b42..81688588d88 100644 --- a/idea/src/org/jetbrains/kotlin/idea/framework/KotlinSdkType.kt +++ b/idea/src/org/jetbrains/kotlin/idea/framework/KotlinSdkType.kt @@ -10,12 +10,15 @@ package org.jetbrains.kotlin.idea.framework +import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.projectRoots.* import com.intellij.openapi.projectRoots.impl.ProjectJdkImpl import com.intellij.openapi.projectRoots.impl.SdkConfigurationUtil +import com.intellij.openapi.roots.ui.configuration.projectRoot.ProjectSdksModel import com.intellij.util.Consumer import org.jdom.Element import org.jetbrains.kotlin.idea.KotlinIcons +import org.jetbrains.kotlin.idea.util.application.runWriteAction import org.jetbrains.kotlin.idea.versions.bundledRuntimeVersion import org.jetbrains.kotlin.utils.PathUtil import javax.swing.JComponent @@ -23,6 +26,20 @@ import javax.swing.JComponent class KotlinSdkType : SdkType("KotlinSDK") { companion object { @JvmField val INSTANCE = KotlinSdkType() + + val defaultHomePath: String + get() = PathUtil.kotlinPathsForIdeaPlugin.homePath.absolutePath + + fun setUpIfNeeded() { + with(ProjectSdksModel()) { + reset(null) + if (sdks.any { it.sdkType is KotlinSdkType }) return + addSdk(INSTANCE, defaultHomePath, null) + ApplicationManager.getApplication().invokeAndWait { + runWriteAction { apply(null, true) } + } + } + } } override fun getPresentableName() = "Kotlin SDK" @@ -48,7 +65,7 @@ class KotlinSdkType : SdkType("KotlinSDK") { fun createSdkWithUniqueName(existingSdks: Collection): ProjectJdkImpl { val sdkName = suggestSdkName(SdkConfigurationUtil.createUniqueSdkName(this, "", existingSdks), "") return ProjectJdkImpl(sdkName, this).apply { - homePath = PathUtil.kotlinPathsForIdeaPlugin.homePath.absolutePath + homePath = defaultHomePath } } diff --git a/idea/testData/configuration/kotlinSdkAdded/.idea/compiler.xml b/idea/testData/configuration/kotlinSdkAdded/.idea/compiler.xml new file mode 100644 index 00000000000..1c358218b27 --- /dev/null +++ b/idea/testData/configuration/kotlinSdkAdded/.idea/compiler.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/idea/testData/configuration/kotlinSdkAdded/.idea/copyright/profiles_settings.xml b/idea/testData/configuration/kotlinSdkAdded/.idea/copyright/profiles_settings.xml new file mode 100644 index 00000000000..e7bedf3377d --- /dev/null +++ b/idea/testData/configuration/kotlinSdkAdded/.idea/copyright/profiles_settings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/idea/testData/configuration/kotlinSdkAdded/.idea/libraries/KotlinJavaRuntime.xml b/idea/testData/configuration/kotlinSdkAdded/.idea/libraries/KotlinJavaRuntime.xml new file mode 100644 index 00000000000..bcc4ed94e22 --- /dev/null +++ b/idea/testData/configuration/kotlinSdkAdded/.idea/libraries/KotlinJavaRuntime.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/idea/testData/configuration/kotlinSdkAdded/.idea/misc.xml b/idea/testData/configuration/kotlinSdkAdded/.idea/misc.xml new file mode 100644 index 00000000000..5a967a62c8a --- /dev/null +++ b/idea/testData/configuration/kotlinSdkAdded/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/idea/testData/configuration/kotlinSdkAdded/.idea/modules.xml b/idea/testData/configuration/kotlinSdkAdded/.idea/modules.xml new file mode 100644 index 00000000000..83db3b6328a --- /dev/null +++ b/idea/testData/configuration/kotlinSdkAdded/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/idea/testData/configuration/kotlinSdkAdded/lib/kotlin-runtime.jar b/idea/testData/configuration/kotlinSdkAdded/lib/kotlin-runtime.jar new file mode 100644 index 00000000000..a4ef023c369 Binary files /dev/null and b/idea/testData/configuration/kotlinSdkAdded/lib/kotlin-runtime.jar differ diff --git a/idea/testData/configuration/kotlinSdkAdded/module.iml b/idea/testData/configuration/kotlinSdkAdded/module.iml new file mode 100644 index 00000000000..94371e52a2a --- /dev/null +++ b/idea/testData/configuration/kotlinSdkAdded/module.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/idea/testData/configuration/kotlinSdkAdded/src/foo.kt b/idea/testData/configuration/kotlinSdkAdded/src/foo.kt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/idea/tests/org/jetbrains/kotlin/idea/configuration/ConfigureKotlinInTempDirTest.kt b/idea/tests/org/jetbrains/kotlin/idea/configuration/ConfigureKotlinInTempDirTest.kt index b8a7c298b4d..2789518d792 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/configuration/ConfigureKotlinInTempDirTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/configuration/ConfigureKotlinInTempDirTest.kt @@ -18,11 +18,13 @@ package org.jetbrains.kotlin.idea.configuration import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.application.impl.ApplicationImpl +import com.intellij.openapi.projectRoots.ProjectJdkTable import com.intellij.openapi.util.io.FileUtil import org.jetbrains.kotlin.config.ApiVersion import org.jetbrains.kotlin.config.KotlinFacetSettingsProvider import org.jetbrains.kotlin.config.LanguageVersion import org.jetbrains.kotlin.idea.compiler.configuration.KotlinCommonCompilerArgumentsHolder +import org.jetbrains.kotlin.idea.framework.KotlinSdkType import org.jetbrains.kotlin.idea.project.getLanguageVersionSettings import org.jetbrains.kotlin.idea.project.languageVersionSettings import org.junit.Assert @@ -128,4 +130,8 @@ class ConfigureKotlinInTempDirTest : AbstractConfigureKotlinTest() { val settings = myProject.getLanguageVersionSettings() Assert.assertEquals(ApiVersion.KOTLIN_1_1, settings.apiVersion) } + + fun testKotlinSdkAdded() { + Assert.assertTrue(ProjectJdkTable.getInstance().allJdks.any { it.sdkType is KotlinSdkType }) + } }