Always clean language and api versions after usage

This commit is contained in:
Nikolay Krasko
2020-02-14 17:20:35 +03:00
committed by Nikolay Krasko
parent c0dac9bf32
commit af3b057ba2
3 changed files with 42 additions and 24 deletions
@@ -247,7 +247,7 @@ fun <T> 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 version = InTextDirectivesUtils.findStringWithPrefixes(fileText, "// $LANGUAGE_VERSION_DIRECTIVE ")
val jvmTarget = InTextDirectivesUtils.findStringWithPrefixes(fileText, "// $JVM_TARGET_DIRECTIVE ") val jvmTarget = InTextDirectivesUtils.findStringWithPrefixes(fileText, "// $JVM_TARGET_DIRECTIVE ")
// We can have several such directives in quickFixMultiFile tests // 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 } 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, project: Project,
module: Module, module: Module,
languageVersion: String, languageVersion: String,
@@ -6,7 +6,7 @@
package org.jetbrains.kotlin.idea.codeInsight package org.jetbrains.kotlin.idea.codeInsight
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase 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.jetbrains.kotlin.test.JUnit3WithIdeaConfigurationRunner
import org.junit.runner.RunWith import org.junit.runner.RunWith
@@ -282,8 +282,9 @@ class OverrideImplementTest : AbstractOverrideImplementTest() {
} }
fun testCopyExperimental() { fun testCopyExperimental() {
configureLanguageAndApiVersion(project, module, "1.3", "1.3") withCustomLanguageAndApiVersion(project, module, "1.3", "1.3") {
doOverrideFileTest("targetFun") doOverrideFileTest("targetFun")
}
} }
fun testUnresolvedType() { fun testUnresolvedType() {
@@ -27,7 +27,7 @@ import org.jetbrains.kotlin.idea.stubindex.KotlinFullClassNameIndex
import org.jetbrains.kotlin.idea.stubindex.KotlinTopLevelFunctionFqnNameIndex import org.jetbrains.kotlin.idea.stubindex.KotlinTopLevelFunctionFqnNameIndex
import org.jetbrains.kotlin.idea.test.ConfigLibraryUtil import org.jetbrains.kotlin.idea.test.ConfigLibraryUtil
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase.* 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.idea.util.application.runWriteAction
import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.allChildren import org.jetbrains.kotlin.psi.psiUtil.allChildren
@@ -43,27 +43,29 @@ private const val RUN_PREFIX = "// RUN:"
class RunConfigurationTest : AbstractRunConfigurationTest() { class RunConfigurationTest : AbstractRunConfigurationTest() {
fun testMainInTest() { fun testMainInTest() {
val createModuleResult = configureModule(moduleDirPath("module"), getTestProject().baseDir!!) val createModuleResult = configureModule(moduleDirPath("module"), getTestProject().baseDir!!)
configureLanguageAndApiVersion( withCustomLanguageAndApiVersion(
createModuleResult.module.project, createModuleResult.module, LanguageVersionSettingsImpl.DEFAULT.languageVersion.versionString, createModuleResult.module.project, createModuleResult.module,
) LanguageVersionSettingsImpl.DEFAULT.languageVersion.versionString, apiVersion = null
ConfigLibraryUtil.configureKotlinRuntimeAndSdk(createModuleResult.module, addJdk(testRootDisposable, ::mockJdk)) ) {
ConfigLibraryUtil.configureKotlinRuntimeAndSdk(createModuleResult.module, addJdk(testRootDisposable, ::mockJdk))
val runConfiguration = createConfigurationFromMain(getTestProject(), "some.main") val runConfiguration = createConfigurationFromMain(getTestProject(), "some.main")
val javaParameters = getJavaRunParameters(runConfiguration) val javaParameters = getJavaRunParameters(runConfiguration)
assertTrue(javaParameters.classPath.rootDirs.contains(createModuleResult.srcOutputDir)) assertTrue(javaParameters.classPath.rootDirs.contains(createModuleResult.srcOutputDir))
assertTrue(javaParameters.classPath.rootDirs.contains(createModuleResult.testOutputDir)) assertTrue(javaParameters.classPath.rootDirs.contains(createModuleResult.testOutputDir))
createModuleResult.srcDir?.children?.filter { it.extension == "kt" }?.forEach { createModuleResult.srcDir?.children?.filter { it.extension == "kt" }?.forEach {
val psiFile = PsiManager.getInstance(createModuleResult.module.project).findFile(it) val psiFile = PsiManager.getInstance(createModuleResult.module.project).findFile(it)
if (psiFile is KtFile) { if (psiFile is KtFile) {
psiFile.acceptChildren( psiFile.acceptChildren(
object : KtVisitorVoid() { object : KtVisitorVoid() {
override fun visitNamedFunction(function: KtNamedFunction) { override fun visitNamedFunction(function: KtNamedFunction) {
functionVisitor(createModuleResult.module, function) functionVisitor(createModuleResult.module, function)
} }
}, },
) )
}
} }
} }
} }