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 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,
@@ -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() {
@@ -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)
}
},
)
}
}
}
}