Skip to content

Commit 5871327

Browse files
committed
Ask to update runtime library when increasing language version for module
1 parent de21176 commit 5871327

File tree

2 files changed

+28
-24
lines changed

2 files changed

+28
-24
lines changed

idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeCoroutineSupportFix.kt

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ import com.intellij.openapi.roots.ModuleRootModificationUtil
2525
import com.intellij.openapi.roots.ex.ProjectRootManagerEx
2626
import com.intellij.openapi.ui.Messages
2727
import com.intellij.psi.PsiElement
28-
import org.jetbrains.kotlin.config.ApiVersion
2928
import org.jetbrains.kotlin.config.CoroutineSupport
3029
import org.jetbrains.kotlin.config.LanguageFeature
3130
import org.jetbrains.kotlin.config.LanguageVersion
@@ -36,9 +35,6 @@ import org.jetbrains.kotlin.idea.compiler.configuration.KotlinCommonCompilerArgu
3635
import org.jetbrains.kotlin.idea.configuration.KotlinWithGradleConfigurator
3736
import org.jetbrains.kotlin.idea.facet.KotlinFacet
3837
import org.jetbrains.kotlin.idea.facet.getRuntimeLibraryVersion
39-
import org.jetbrains.kotlin.idea.util.projectStructure.allModules
40-
import org.jetbrains.kotlin.idea.versions.findKotlinRuntimeLibrary
41-
import org.jetbrains.kotlin.idea.versions.updateLibraries
4238
import org.jetbrains.kotlin.psi.KtFile
4339

4440
sealed class ChangeCoroutineSupportFix(
@@ -70,17 +66,8 @@ sealed class ChangeCoroutineSupportFix(
7066
return
7167
}
7268

73-
if (runtimeUpdateRequired) {
74-
val library = findKotlinRuntimeLibrary(module)
75-
if (library != null) {
76-
val rc = Messages.showOkCancelDialog(project,
77-
"Coroutines support requires version 1.1 or later of the Kotlin runtime library. " +
78-
"Would you like to update the runtime library in your project?",
79-
super.getText(),
80-
Messages.getQuestionIcon())
81-
if (rc != Messages.OK) return
82-
updateLibraries(project, listOf(library))
83-
}
69+
if (runtimeUpdateRequired && !askUpdateRuntime(module, LanguageFeature.Coroutines.sinceApiVersion)) {
70+
return
8471
}
8572

8673
val facetSettings = KotlinFacet.get(module)?.configuration?.settings ?: return
@@ -90,6 +77,7 @@ sealed class ChangeCoroutineSupportFix(
9077
facetSettings.versionInfo.languageLevel = LanguageVersion.KOTLIN_1_1
9178
}
9279
}
80+
9381
}
9482

9583
class InProject(element: PsiElement, coroutineSupport: CoroutineSupport) : ChangeCoroutineSupportFix(element, coroutineSupport) {

idea/src/org/jetbrains/kotlin/idea/quickfix/EnableUnsupportedFeatureFix.kt

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,13 @@ package org.jetbrains.kotlin.idea.quickfix
1818

1919
import com.intellij.openapi.editor.Editor
2020
import com.intellij.openapi.fileEditor.OpenFileDescriptor
21+
import com.intellij.openapi.module.Module
2122
import com.intellij.openapi.module.ModuleUtilCore
2223
import com.intellij.openapi.project.Project
2324
import com.intellij.openapi.roots.ModuleRootManager
2425
import com.intellij.openapi.roots.ModuleRootModificationUtil
2526
import com.intellij.openapi.roots.ex.ProjectRootManagerEx
27+
import com.intellij.openapi.roots.libraries.Library
2628
import com.intellij.openapi.ui.Messages
2729
import com.intellij.psi.PsiElement
2830
import org.jetbrains.kotlin.config.ApiVersion
@@ -89,6 +91,10 @@ sealed class EnableUnsupportedFeatureFix(
8991
return
9092
}
9193

94+
if (runtimeUpdateRequired && !askUpdateRuntime(module, feature.sinceApiVersion)) {
95+
return
96+
}
97+
9298
ModuleRootModificationUtil.updateModel(module) {
9399
with(facetSettings.versionInfo) {
94100
if (!apiVersionOnly) {
@@ -155,15 +161,25 @@ fun checkUpdateRuntime(project: Project, requiredVersion: ApiVersion): Boolean {
155161
parsedModuleRuntimeVersion != null && parsedModuleRuntimeVersion < requiredVersion
156162
}
157163
if (modulesWithOutdatedRuntime.isNotEmpty()) {
158-
val rc = Messages.showOkCancelDialog(project,
159-
"This language feature requires version $requiredVersion or later of the Kotlin runtime library. " +
160-
"Would you like to update the runtime library in your project?",
161-
"Update runtime library",
162-
Messages.getQuestionIcon())
163-
if (rc != Messages.OK) return false
164-
165-
val librariesToUpdate = modulesWithOutdatedRuntime.mapNotNull(::findKotlinRuntimeLibrary)
166-
updateLibraries(project, librariesToUpdate)
164+
if (askUpdateRuntime(project, requiredVersion,
165+
modulesWithOutdatedRuntime.mapNotNull(::findKotlinRuntimeLibrary))) return false
167166
}
168167
return true
169168
}
169+
170+
fun askUpdateRuntime(project: Project, requiredVersion: ApiVersion, librariesToUpdate: List<Library>): Boolean {
171+
val rc = Messages.showOkCancelDialog(project,
172+
"This language feature requires version $requiredVersion or later of the Kotlin runtime library. " +
173+
"Would you like to update the runtime library in your project?",
174+
"Update Runtime Library",
175+
Messages.getQuestionIcon())
176+
if (rc != Messages.OK) return false
177+
178+
updateLibraries(project, librariesToUpdate)
179+
return true
180+
}
181+
182+
fun askUpdateRuntime(module: Module, requiredVersion: ApiVersion): Boolean {
183+
val library = findKotlinRuntimeLibrary(module) ?: return true
184+
return askUpdateRuntime(module.project, requiredVersion, listOf(library))
185+
}

0 commit comments

Comments
 (0)