From 1b47d538aec477532bd714427f4dc81601d69a0c Mon Sep 17 00:00:00 2001 From: Andrei Klunnyi Date: Mon, 15 Jun 2020 15:28:46 +0200 Subject: [PATCH] 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. --- .../codevision/KotlinCodeVisionProvider.kt | 15 ++++++++---- .../AbstractKotlinCodeVisionProviderTest.kt | 23 +++++++++---------- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/codeInsight/codevision/KotlinCodeVisionProvider.kt b/idea/src/org/jetbrains/kotlin/idea/codeInsight/codevision/KotlinCodeVisionProvider.kt index 83188b0854e..ea6c3f85c89 100644 --- a/idea/src/org/jetbrains/kotlin/idea/codeInsight/codevision/KotlinCodeVisionProvider.kt +++ b/idea/src/org/jetbrains/kotlin/idea/codeInsight/codevision/KotlinCodeVisionProvider.kt @@ -23,6 +23,10 @@ class KotlinCodeVisionProvider : InlayHintsProvider { var usagesLimit: 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 createConfigurable(settings: NoSettings): ImmediateConfigurable = createImmediateConfigurable() @@ -33,11 +37,14 @@ class KotlinCodeVisionProvider : InlayHintsProvider { file: PsiFile, editor: Editor, settings: NoSettings, sink: InlayHintsSink ): InlayHintsCollector? { - val showUsages = Registry.`is`("kotlin.code-vision.usages", false) - val showInheritors = Registry.`is`("kotlin.code-vision.inheritors", false) + // It's highly discouraged to use global settings from the test environment. Tests launched in parallel might be affected, e.g. + // 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) } } \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/codevision/AbstractKotlinCodeVisionProviderTest.kt b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/codevision/AbstractKotlinCodeVisionProviderTest.kt index c3185df888c..f127a339b59 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/codevision/AbstractKotlinCodeVisionProviderTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/codevision/AbstractKotlinCodeVisionProviderTest.kt @@ -6,7 +6,6 @@ package org.jetbrains.kotlin.idea.codeInsight.codevision import com.intellij.openapi.util.io.FileUtil -import com.intellij.openapi.util.registry.Registry import com.intellij.testFramework.utils.inlays.InlayHintsProviderTestCase import org.jetbrains.kotlin.test.InTextDirectivesUtils import java.io.File @@ -29,22 +28,22 @@ abstract class AbstractKotlinCodeVisionProviderTest : val usagesLimit = InTextDirectivesUtils.findStringWithPrefixes(fileContents, "// USAGES-LIMIT: ")?.toInt() ?: 100 val inheritorsLimit = InTextDirectivesUtils.findStringWithPrefixes(fileContents, "// INHERITORS-LIMIT: ")?.toInt() ?: 100 - val codeVisionProvider = KotlinCodeVisionProvider() - codeVisionProvider.usagesLimit = usagesLimit - codeVisionProvider.inheritorsLimit = inheritorsLimit + val provider = KotlinCodeVisionProvider() + provider.usagesLimit = usagesLimit + provider.inheritorsLimit = inheritorsLimit when (InTextDirectivesUtils.findStringWithPrefixes(fileContents, "// MODE: ")) { - "inheritors" -> mode(usages = false, inheritors = true) - "usages" -> mode(usages = true, inheritors = false) - "usages-&-inheritors" -> mode(usages = true, inheritors = true) - else -> mode(usages = false, inheritors = false) + "inheritors" -> provider.mode(usages = false, inheritors = true) + "usages" -> provider.mode(usages = true, inheritors = false) + "usages-&-inheritors" -> provider.mode(usages = true, inheritors = true) + else -> provider.mode(usages = false, inheritors = false) } - testProvider("kotlinCodeVision.kt", fileContents, codeVisionProvider) + testProvider("kotlinCodeVision.kt", fileContents, provider) } - private fun mode(usages: Boolean, inheritors: Boolean) { - Registry.get(USAGES_KEY).setValue(usages) - Registry.get(INHERITORS_KEY).setValue(inheritors) + private fun KotlinCodeVisionProvider.mode(usages: Boolean, inheritors: Boolean) { + showUsages = usages + showInheritors = inheritors } }