Flaky test fix: MultiFileHighlightingTestGenerated

This commit fixes an issue introduced in
AbstractKotlinCodeVisionProviderTest under a3c881da. Global Registry was
mistakenly used to manipulate the state of KotlinCodeVisionProvider. As
a result MultiFileHighlightingTestGenerated became unstable during the
parallel execution.
This commit is contained in:
Andrei Klunnyi
2020-06-15 15:28:46 +02:00
parent 51d74d78c6
commit 1b47d538ae
2 changed files with 22 additions and 16 deletions
@@ -23,6 +23,10 @@ class KotlinCodeVisionProvider : InlayHintsProvider<NoSettings> {
var usagesLimit: Int = 100 var usagesLimit: Int = 100
var inheritorsLimit: Int = 100 var inheritorsLimit: Int = 100
var showUsages: Boolean = false
var showInheritors: Boolean = false
override fun isLanguageSupported(language: Language): Boolean = language is KotlinLanguage override fun isLanguageSupported(language: Language): Boolean = language is KotlinLanguage
override fun createConfigurable(settings: NoSettings): ImmediateConfigurable = createImmediateConfigurable() override fun createConfigurable(settings: NoSettings): ImmediateConfigurable = createImmediateConfigurable()
@@ -33,11 +37,14 @@ class KotlinCodeVisionProvider : InlayHintsProvider<NoSettings> {
file: PsiFile, editor: Editor, settings: NoSettings, sink: InlayHintsSink file: PsiFile, editor: Editor, settings: NoSettings, sink: InlayHintsSink
): InlayHintsCollector? { ): InlayHintsCollector? {
val showUsages = Registry.`is`("kotlin.code-vision.usages", false) // It's highly discouraged to use global settings from the test environment. Tests launched in parallel might be affected, e.g.
val showInheritors = Registry.`is`("kotlin.code-vision.inheritors", false) // MultiFileHighlightingTestGenerated. Hence the properties 'showUsages' and 'showInheritors'.
if (!showUsages && !showInheritors) return null val showUsagesResolved = Registry.`is`("kotlin.code-vision.usages", false) || showUsages
val showInheritorsResolved = Registry.`is`("kotlin.code-vision.inheritors", false) || showInheritors
return KotlinCodeVisionHintsCollector(editor, showUsages, showInheritors, usagesLimit, inheritorsLimit) if (!showUsagesResolved && !showInheritorsResolved) return null
return KotlinCodeVisionHintsCollector(editor, showUsagesResolved, showInheritorsResolved, usagesLimit, inheritorsLimit)
} }
} }
@@ -6,7 +6,6 @@
package org.jetbrains.kotlin.idea.codeInsight.codevision package org.jetbrains.kotlin.idea.codeInsight.codevision
import com.intellij.openapi.util.io.FileUtil import com.intellij.openapi.util.io.FileUtil
import com.intellij.openapi.util.registry.Registry
import com.intellij.testFramework.utils.inlays.InlayHintsProviderTestCase import com.intellij.testFramework.utils.inlays.InlayHintsProviderTestCase
import org.jetbrains.kotlin.test.InTextDirectivesUtils import org.jetbrains.kotlin.test.InTextDirectivesUtils
import java.io.File import java.io.File
@@ -29,22 +28,22 @@ abstract class AbstractKotlinCodeVisionProviderTest :
val usagesLimit = InTextDirectivesUtils.findStringWithPrefixes(fileContents, "// USAGES-LIMIT: ")?.toInt() ?: 100 val usagesLimit = InTextDirectivesUtils.findStringWithPrefixes(fileContents, "// USAGES-LIMIT: ")?.toInt() ?: 100
val inheritorsLimit = InTextDirectivesUtils.findStringWithPrefixes(fileContents, "// INHERITORS-LIMIT: ")?.toInt() ?: 100 val inheritorsLimit = InTextDirectivesUtils.findStringWithPrefixes(fileContents, "// INHERITORS-LIMIT: ")?.toInt() ?: 100
val codeVisionProvider = KotlinCodeVisionProvider() val provider = KotlinCodeVisionProvider()
codeVisionProvider.usagesLimit = usagesLimit provider.usagesLimit = usagesLimit
codeVisionProvider.inheritorsLimit = inheritorsLimit provider.inheritorsLimit = inheritorsLimit
when (InTextDirectivesUtils.findStringWithPrefixes(fileContents, "// MODE: ")) { when (InTextDirectivesUtils.findStringWithPrefixes(fileContents, "// MODE: ")) {
"inheritors" -> mode(usages = false, inheritors = true) "inheritors" -> provider.mode(usages = false, inheritors = true)
"usages" -> mode(usages = true, inheritors = false) "usages" -> provider.mode(usages = true, inheritors = false)
"usages-&-inheritors" -> mode(usages = true, inheritors = true) "usages-&-inheritors" -> provider.mode(usages = true, inheritors = true)
else -> mode(usages = false, inheritors = false) else -> provider.mode(usages = false, inheritors = false)
} }
testProvider("kotlinCodeVision.kt", fileContents, codeVisionProvider) testProvider("kotlinCodeVision.kt", fileContents, provider)
} }
private fun mode(usages: Boolean, inheritors: Boolean) { private fun KotlinCodeVisionProvider.mode(usages: Boolean, inheritors: Boolean) {
Registry.get(USAGES_KEY).setValue(usages) showUsages = usages
Registry.get(INHERITORS_KEY).setValue(inheritors) showInheritors = inheritors
} }
} }