From 27ebb6c946b7ed20efd46793441d291a864a8ab4 Mon Sep 17 00:00:00 2001 From: Andrei Klunnyi Date: Thu, 17 Dec 2020 15:45:28 +0100 Subject: [PATCH] KTIJ-650 [Code completion]: test framework fix This commit fixes test infrastructure issue. Usage of "COMPILER_ARGUMENTS" test-data-instruction resulted in side effect. Test cases following the one that used it got broken LanguageVersionSetting - LanguageFeature.MultiPlatformProjects escaped, languageVersion could be wrong. Why it happened KotlinProjectDescriptorWithFacet defines default values of (language-version, isMultiplatform) settings for the test-case. The values themselves are stored in KotlinFacetSettings and passed there only once. After every test-case (if it uses "COMPILER_ARGUMENTS") infrastructure calls KotlinLightCodeInsightFixtureTestCaseKt#rollbackCompilerOptions which resets mentioned values (among others) in KotlinFacetSettings. Instances of KotlinProjectDescriptorWithFacet are reused hence facet settings remained reset. --- .../test/AbstractKeywordCompletionTest.kt | 6 ++--- .../test/KotlinProjectDescriptorWithFacet.kt | 22 ++++++++++++++----- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractKeywordCompletionTest.kt b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractKeywordCompletionTest.kt index 321bef33521..2111c99ed0b 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractKeywordCompletionTest.kt +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractKeywordCompletionTest.kt @@ -23,9 +23,9 @@ abstract class AbstractKeywordCompletionTest : KotlinFixtureCompletionBaseTestCa } override fun getProjectDescriptor(): KotlinLightProjectDescriptor = when { - "LangLevel10" in fileName() -> KotlinProjectDescriptorWithFacet.KOTLIN_10 - "LangLevel11" in fileName() -> KotlinProjectDescriptorWithFacet.KOTLIN_11 - else -> KotlinProjectDescriptorWithFacet.KOTLIN_STABLE_WITH_MULTIPLATFORM + "LangLevel10" in fileName() -> KotlinProjectDescriptorWithFacet.KOTLIN_10.apply { replicateToFacetSettings() } + "LangLevel11" in fileName() -> KotlinProjectDescriptorWithFacet.KOTLIN_11.apply { replicateToFacetSettings() } + else -> KotlinProjectDescriptorWithFacet.KOTLIN_STABLE_WITH_MULTIPLATFORM.apply { replicateToFacetSettings() } } override fun defaultInvocationCount() = 1 diff --git a/idea/idea-test-framework/test/org/jetbrains/kotlin/idea/test/KotlinProjectDescriptorWithFacet.kt b/idea/idea-test-framework/test/org/jetbrains/kotlin/idea/test/KotlinProjectDescriptorWithFacet.kt index c7d83284686..0eca6dd6eac 100644 --- a/idea/idea-test-framework/test/org/jetbrains/kotlin/idea/test/KotlinProjectDescriptorWithFacet.kt +++ b/idea/idea-test-framework/test/org/jetbrains/kotlin/idea/test/KotlinProjectDescriptorWithFacet.kt @@ -30,13 +30,25 @@ class KotlinProjectDescriptorWithFacet( private val languageVersion: LanguageVersion, private val multiPlatform: Boolean = false ) : KotlinLightProjectDescriptor() { + + private var facetConfig: KotlinFacetConfiguration? = null + override fun configureModule(module: Module, model: ModifiableRootModel, contentEntry: ContentEntry) { configureKotlinFacet(module) { - settings.languageLevel = languageVersion - if (multiPlatform) { - settings.compilerSettings = CompilerSettings().apply { - additionalArguments += " -Xmulti-platform" - } + facetConfig = this + toFacetConfig(this) + } + } + + fun replicateToFacetSettings() { + facetConfig?.let { toFacetConfig(it) } + } + + private fun toFacetConfig(configuration: KotlinFacetConfiguration) { + configuration.settings.languageLevel = languageVersion + if (multiPlatform) { + configuration.settings.compilerSettings = CompilerSettings().apply { + additionalArguments += " -Xmulti-platform" } } }