Clean LANGUAGE_VERSION_SETTINGS after the test
This commit is contained in:
committed by
Nikolay Krasko
parent
19bc39d3ab
commit
6c83e9fb85
@@ -169,16 +169,27 @@ val Module.languageVersionSettings: LanguageVersionSettings
|
|||||||
return cachedValue.value
|
return cachedValue.value
|
||||||
}
|
}
|
||||||
|
|
||||||
@TestOnly // public for tests
|
@TestOnly
|
||||||
fun Module.setLanguageVersionSettings(value: LanguageVersionSettings) =
|
fun Module.withLanguageVersionSettings(value: LanguageVersionSettings, body: () -> Unit) {
|
||||||
putUserData(
|
val previousLanguageVersionSettings = getUserData(LANGUAGE_VERSION_SETTINGS)
|
||||||
LANGUAGE_VERSION_SETTINGS,
|
try {
|
||||||
CachedValuesManager.getManager(project).createCachedValue({
|
putUserData(
|
||||||
CachedValueProvider.Result(
|
LANGUAGE_VERSION_SETTINGS,
|
||||||
value, ProjectRootModificationTracker.getInstance(project)
|
CachedValuesManager.getManager(project).createCachedValue(
|
||||||
)
|
{
|
||||||
}, false)
|
CachedValueProvider.Result(
|
||||||
)
|
value, ProjectRootModificationTracker.getInstance(project)
|
||||||
|
)
|
||||||
|
},
|
||||||
|
false
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
body()
|
||||||
|
} finally {
|
||||||
|
putUserData(LANGUAGE_VERSION_SETTINGS, previousLanguageVersionSettings)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun Module.createCachedValueForLanguageVersionSettings(): CachedValue<LanguageVersionSettings> {
|
private fun Module.createCachedValueForLanguageVersionSettings(): CachedValue<LanguageVersionSettings> {
|
||||||
return CachedValuesManager.getManager(project).createCachedValue({
|
return CachedValuesManager.getManager(project).createCachedValue({
|
||||||
|
|||||||
@@ -18,10 +18,11 @@ import com.intellij.psi.PsiManager
|
|||||||
import com.intellij.refactoring.RefactoringFactory
|
import com.intellij.refactoring.RefactoringFactory
|
||||||
import com.intellij.testFramework.MapDataContext
|
import com.intellij.testFramework.MapDataContext
|
||||||
import org.jetbrains.kotlin.checkers.languageVersionSettingsFromText
|
import org.jetbrains.kotlin.checkers.languageVersionSettingsFromText
|
||||||
|
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||||
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
|
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
|
||||||
import org.jetbrains.kotlin.idea.MainFunctionDetector
|
import org.jetbrains.kotlin.idea.MainFunctionDetector
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny
|
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny
|
||||||
import org.jetbrains.kotlin.idea.project.setLanguageVersionSettings
|
import org.jetbrains.kotlin.idea.project.withLanguageVersionSettings
|
||||||
import org.jetbrains.kotlin.idea.search.allScope
|
import org.jetbrains.kotlin.idea.search.allScope
|
||||||
import org.jetbrains.kotlin.idea.stubindex.KotlinFullClassNameIndex
|
import org.jetbrains.kotlin.idea.stubindex.KotlinFullClassNameIndex
|
||||||
import org.jetbrains.kotlin.idea.stubindex.KotlinTopLevelFunctionFqnNameIndex
|
import org.jetbrains.kotlin.idea.stubindex.KotlinTopLevelFunctionFqnNameIndex
|
||||||
@@ -58,13 +59,16 @@ class RunConfigurationTest : AbstractRunConfigurationTest() {
|
|||||||
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(
|
val languageVersionSettings = languageVersionSettingsFromText(listOf(psiFile.text))
|
||||||
object : KtVisitorVoid() {
|
module.withLanguageVersionSettings(languageVersionSettings) {
|
||||||
override fun visitNamedFunction(function: KtNamedFunction) {
|
psiFile.acceptChildren(
|
||||||
functionVisitor(createModuleResult.module, function)
|
object : KtVisitorVoid() {
|
||||||
}
|
override fun visitNamedFunction(function: KtNamedFunction) {
|
||||||
},
|
functionVisitor(languageVersionSettings, function)
|
||||||
)
|
}
|
||||||
|
},
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -209,7 +213,7 @@ class RunConfigurationTest : AbstractRunConfigurationTest() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private fun functionVisitor(module: Module, function: KtNamedFunction) {
|
private fun functionVisitor(fileLanguageSettings: LanguageVersionSettings, function: KtNamedFunction) {
|
||||||
val project = function.project
|
val project = function.project
|
||||||
val file = function.containingKtFile
|
val file = function.containingKtFile
|
||||||
val options = function.bodyExpression?.allChildren?.filterIsInstance<PsiComment>()
|
val options = function.bodyExpression?.allChildren?.filterIsInstance<PsiComment>()
|
||||||
@@ -220,10 +224,7 @@ class RunConfigurationTest : AbstractRunConfigurationTest() {
|
|||||||
val assertIsMain = "yes" in options
|
val assertIsMain = "yes" in options
|
||||||
val assertIsNotMain = "no" in options
|
val assertIsNotMain = "no" in options
|
||||||
|
|
||||||
val languageVersionSettings = languageVersionSettingsFromText(listOf(file.text))
|
val isMainFunction = MainFunctionDetector(fileLanguageSettings) { it.resolveToDescriptorIfAny() }.isMain(function)
|
||||||
module.setLanguageVersionSettings(languageVersionSettings)
|
|
||||||
val isMainFunction =
|
|
||||||
MainFunctionDetector(languageVersionSettings) { it.resolveToDescriptorIfAny() }.isMain(function)
|
|
||||||
|
|
||||||
if (assertIsMain) {
|
if (assertIsMain) {
|
||||||
assertTrue("$file: The function ${function.fqName?.asString()} should be main", isMainFunction)
|
assertTrue("$file: The function ${function.fqName?.asString()} should be main", isMainFunction)
|
||||||
|
|||||||
Reference in New Issue
Block a user