From af3b057ba20b50ac9621bb76be73f95953c31808 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Fri, 14 Feb 2020 17:20:35 +0300 Subject: [PATCH] Always clean language and api versions after usage --- .../KotlinLightCodeInsightFixtureTestCase.kt | 19 ++++++++- .../idea/codeInsight/OverrideImplementTest.kt | 7 ++-- .../kotlin/idea/run/RunConfigurationTest.kt | 40 ++++++++++--------- 3 files changed, 42 insertions(+), 24 deletions(-) diff --git a/idea/idea-test-framework/test/org/jetbrains/kotlin/idea/test/KotlinLightCodeInsightFixtureTestCase.kt b/idea/idea-test-framework/test/org/jetbrains/kotlin/idea/test/KotlinLightCodeInsightFixtureTestCase.kt index cbf90a10ef2..2898eff6bd3 100644 --- a/idea/idea-test-framework/test/org/jetbrains/kotlin/idea/test/KotlinLightCodeInsightFixtureTestCase.kt +++ b/idea/idea-test-framework/test/org/jetbrains/kotlin/idea/test/KotlinLightCodeInsightFixtureTestCase.kt @@ -247,7 +247,7 @@ fun withCustomCompilerOptions(fileText: String, project: Project, module: Mo } } -fun configureCompilerOptions(fileText: String, project: Project, module: Module): Boolean { +private fun configureCompilerOptions(fileText: String, project: Project, module: Module): Boolean { val version = InTextDirectivesUtils.findStringWithPrefixes(fileText, "// $LANGUAGE_VERSION_DIRECTIVE ") val jvmTarget = InTextDirectivesUtils.findStringWithPrefixes(fileText, "// $JVM_TARGET_DIRECTIVE ") // We can have several such directives in quickFixMultiFile tests @@ -310,7 +310,22 @@ private fun rollbackCompilerOptions(project: Project, module: Module) { KotlinCompilerSettings.getInstance(project).update { this.additionalArguments = DEFAULT_ADDITIONAL_ARGUMENTS } } -fun configureLanguageAndApiVersion( +fun withCustomLanguageAndApiVersion( + project: Project, + module: Module, + languageVersion: String, + apiVersion: String?, + body: () -> Unit +) { + configureLanguageAndApiVersion(project, module, languageVersion, apiVersion) + try { + body() + } finally { + configureLanguageAndApiVersion(project, module, LanguageVersion.LATEST_STABLE.versionString, null) + } +} + +private fun configureLanguageAndApiVersion( project: Project, module: Module, languageVersion: String, diff --git a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/OverrideImplementTest.kt b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/OverrideImplementTest.kt index ac9028b746e..a5d510f8871 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/OverrideImplementTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/OverrideImplementTest.kt @@ -6,7 +6,7 @@ package org.jetbrains.kotlin.idea.codeInsight import org.jetbrains.kotlin.idea.test.PluginTestCaseBase -import org.jetbrains.kotlin.idea.test.configureLanguageAndApiVersion +import org.jetbrains.kotlin.idea.test.withCustomLanguageAndApiVersion import org.jetbrains.kotlin.test.JUnit3WithIdeaConfigurationRunner import org.junit.runner.RunWith @@ -282,8 +282,9 @@ class OverrideImplementTest : AbstractOverrideImplementTest() { } fun testCopyExperimental() { - configureLanguageAndApiVersion(project, module, "1.3", "1.3") - doOverrideFileTest("targetFun") + withCustomLanguageAndApiVersion(project, module, "1.3", "1.3") { + doOverrideFileTest("targetFun") + } } fun testUnresolvedType() { diff --git a/idea/tests/org/jetbrains/kotlin/idea/run/RunConfigurationTest.kt b/idea/tests/org/jetbrains/kotlin/idea/run/RunConfigurationTest.kt index c3f419e1d9e..c72a6405eeb 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/run/RunConfigurationTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/run/RunConfigurationTest.kt @@ -27,7 +27,7 @@ import org.jetbrains.kotlin.idea.stubindex.KotlinFullClassNameIndex import org.jetbrains.kotlin.idea.stubindex.KotlinTopLevelFunctionFqnNameIndex import org.jetbrains.kotlin.idea.test.ConfigLibraryUtil import org.jetbrains.kotlin.idea.test.PluginTestCaseBase.* -import org.jetbrains.kotlin.idea.test.configureLanguageAndApiVersion +import org.jetbrains.kotlin.idea.test.withCustomLanguageAndApiVersion import org.jetbrains.kotlin.idea.util.application.runWriteAction import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.allChildren @@ -43,27 +43,29 @@ private const val RUN_PREFIX = "// RUN:" class RunConfigurationTest : AbstractRunConfigurationTest() { fun testMainInTest() { val createModuleResult = configureModule(moduleDirPath("module"), getTestProject().baseDir!!) - configureLanguageAndApiVersion( - createModuleResult.module.project, createModuleResult.module, LanguageVersionSettingsImpl.DEFAULT.languageVersion.versionString, - ) - ConfigLibraryUtil.configureKotlinRuntimeAndSdk(createModuleResult.module, addJdk(testRootDisposable, ::mockJdk)) + withCustomLanguageAndApiVersion( + createModuleResult.module.project, createModuleResult.module, + LanguageVersionSettingsImpl.DEFAULT.languageVersion.versionString, apiVersion = null + ) { + ConfigLibraryUtil.configureKotlinRuntimeAndSdk(createModuleResult.module, addJdk(testRootDisposable, ::mockJdk)) - val runConfiguration = createConfigurationFromMain(getTestProject(), "some.main") - val javaParameters = getJavaRunParameters(runConfiguration) + val runConfiguration = createConfigurationFromMain(getTestProject(), "some.main") + val javaParameters = getJavaRunParameters(runConfiguration) - assertTrue(javaParameters.classPath.rootDirs.contains(createModuleResult.srcOutputDir)) - assertTrue(javaParameters.classPath.rootDirs.contains(createModuleResult.testOutputDir)) + assertTrue(javaParameters.classPath.rootDirs.contains(createModuleResult.srcOutputDir)) + assertTrue(javaParameters.classPath.rootDirs.contains(createModuleResult.testOutputDir)) - createModuleResult.srcDir?.children?.filter { it.extension == "kt" }?.forEach { - val psiFile = PsiManager.getInstance(createModuleResult.module.project).findFile(it) - if (psiFile is KtFile) { - psiFile.acceptChildren( - object : KtVisitorVoid() { - override fun visitNamedFunction(function: KtNamedFunction) { - functionVisitor(createModuleResult.module, function) - } - }, - ) + createModuleResult.srcDir?.children?.filter { it.extension == "kt" }?.forEach { + val psiFile = PsiManager.getInstance(createModuleResult.module.project).findFile(it) + if (psiFile is KtFile) { + psiFile.acceptChildren( + object : KtVisitorVoid() { + override fun visitNamedFunction(function: KtNamedFunction) { + functionVisitor(createModuleResult.module, function) + } + }, + ) + } } } }