From 9df0a18d3f0caaebcc74bbeaecf9bc2921ccbecd Mon Sep 17 00:00:00 2001 From: Dmitrii Gridin Date: Fri, 25 Nov 2022 20:18:35 +0100 Subject: [PATCH] [kotlin] invalidate LanguageVersionSettings on facet changes ^KTIJ-23779 Fixed GitOrigin-RevId: ff784bd7e196ef25247d8061a98d4d3b486be00d --- .../LanguageVersionSettingsProvider.kt | 2 ++ .../ConfigureKotlinInTempDirTest.kt | 15 +++++++++++ .../moduleFacetChange/.idea/misc.xml | 6 +++++ .../moduleFacetChange/.idea/modules.xml | 8 ++++++ .../moduleFacetChange/module.iml | 26 +++++++++++++++++++ .../moduleFacetChange/src/foo.kt | 0 6 files changed, 57 insertions(+) create mode 100644 plugins/kotlin/idea/tests/testData/configuration/moduleFacetChange/.idea/misc.xml create mode 100644 plugins/kotlin/idea/tests/testData/configuration/moduleFacetChange/.idea/modules.xml create mode 100644 plugins/kotlin/idea/tests/testData/configuration/moduleFacetChange/module.iml create mode 100644 plugins/kotlin/idea/tests/testData/configuration/moduleFacetChange/src/foo.kt diff --git a/plugins/kotlin/base/project-structure/src/org/jetbrains/kotlin/idea/base/projectStructure/LanguageVersionSettingsProvider.kt b/plugins/kotlin/base/project-structure/src/org/jetbrains/kotlin/idea/base/projectStructure/LanguageVersionSettingsProvider.kt index d051da29b852..bda717068ec7 100644 --- a/plugins/kotlin/base/project-structure/src/org/jetbrains/kotlin/idea/base/projectStructure/LanguageVersionSettingsProvider.kt +++ b/plugins/kotlin/base/project-structure/src/org/jetbrains/kotlin/idea/base/projectStructure/LanguageVersionSettingsProvider.kt @@ -35,6 +35,7 @@ import org.jetbrains.kotlin.platform.jvm.JvmPlatforms import org.jetbrains.kotlin.util.merge import java.util.* import org.jetbrains.kotlin.idea.compiler.configuration.KotlinCompilerSettingsListener +import org.jetbrains.kotlin.idea.facet.KotlinFacetModificationTracker private typealias LanguageFeatureMap = Map private typealias AnalysisFlagMap = Map, Any> @@ -107,6 +108,7 @@ class LanguageVersionSettingsProvider(private val project: Project) : Disposable computeModuleLanguageVersionSettings(module), KotlinCompilerSettingsTracker.getInstance(project), ProjectRootModificationTracker.getInstance(project), + KotlinFacetModificationTracker.getInstance(project), ) } } diff --git a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/configuration/ConfigureKotlinInTempDirTest.kt b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/configuration/ConfigureKotlinInTempDirTest.kt index 084204493fd7..0cde2b6679d9 100644 --- a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/configuration/ConfigureKotlinInTempDirTest.kt +++ b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/configuration/ConfigureKotlinInTempDirTest.kt @@ -21,6 +21,7 @@ import org.jetbrains.kotlin.idea.compiler.configuration.Kotlin2JsCompilerArgumen import org.jetbrains.kotlin.idea.compiler.configuration.KotlinCommonCompilerArgumentsHolder import org.jetbrains.kotlin.idea.compiler.configuration.KotlinJpsPluginSettings import org.jetbrains.kotlin.idea.compiler.configuration.KotlinPluginLayout +import org.jetbrains.kotlin.idea.facet.KotlinFacet import org.jetbrains.kotlin.idea.macros.KotlinBundledUsageDetector import org.jetbrains.kotlin.idea.macros.KotlinBundledUsageDetectorListener import org.jetbrains.kotlin.idea.notification.catchNotificationText @@ -146,6 +147,20 @@ class ConfigureKotlinInTempDirTest : AbstractConfigureKotlinInTempDirTest() { assertEmpty(getCanBeConfiguredModules(myProject, jvmConfigurator)) } + fun testModuleFacetChange() { + val kotlinFacet = KotlinFacet.get(module)!! + val languageVersionSettings = module.languageVersionSettings + assertEquals(languageVersionSettings, module.languageVersionSettings) + + runWriteAction { + val model = FacetManager.getInstance(module).createModifiableModel() + model.removeFacet(kotlinFacet) + model.commit() + } + + assertFalse(languageVersionSettings == module.languageVersionSettings) + } + fun testSimple() { assertNotConfigured(module, jvmConfigurator) jvmConfigurator.configure(myProject, emptyList()) diff --git a/plugins/kotlin/idea/tests/testData/configuration/moduleFacetChange/.idea/misc.xml b/plugins/kotlin/idea/tests/testData/configuration/moduleFacetChange/.idea/misc.xml new file mode 100644 index 000000000000..07115cdf15dd --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/configuration/moduleFacetChange/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/configuration/moduleFacetChange/.idea/modules.xml b/plugins/kotlin/idea/tests/testData/configuration/moduleFacetChange/.idea/modules.xml new file mode 100644 index 000000000000..83db3b6328a9 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/configuration/moduleFacetChange/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/configuration/moduleFacetChange/module.iml b/plugins/kotlin/idea/tests/testData/configuration/moduleFacetChange/module.iml new file mode 100644 index 000000000000..71f14b103118 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/configuration/moduleFacetChange/module.iml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/kotlin/idea/tests/testData/configuration/moduleFacetChange/src/foo.kt b/plugins/kotlin/idea/tests/testData/configuration/moduleFacetChange/src/foo.kt new file mode 100644 index 000000000000..e69de29bb2d1