From 2023c08459ca41ff2f822ea01aee097376bb2fc2 Mon Sep 17 00:00:00 2001 From: Marco Pennekamp Date: Thu, 13 Jul 2023 14:53:39 +0200 Subject: [PATCH] [SLC] KT-58257 Rewrite SLC equality tests to publish global modification events - `KtFirAnalysisSession` does not need to depend on project out-of-block and project root modification trackers anymore, as its underlying use-site session determines validity. To ensure that use-site sessions are invalidated in SLC equality tests, modification events also need to be published. --- ...tractSymbolLightClassesEqualityTestBase.kt | 25 ++++++++++--------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/base/AbstractSymbolLightClassesEqualityTestBase.kt b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/base/AbstractSymbolLightClassesEqualityTestBase.kt index 4ff01c13dc4..271a72a01e1 100644 --- a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/base/AbstractSymbolLightClassesEqualityTestBase.kt +++ b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/base/AbstractSymbolLightClassesEqualityTestBase.kt @@ -6,13 +6,11 @@ package org.jetbrains.kotlin.light.classes.symbol.base import com.intellij.openapi.project.Project -import com.intellij.openapi.util.SimpleModificationTracker import com.intellij.psi.JavaElementVisitor import com.intellij.psi.PsiClass import com.intellij.psi.PsiElementVisitor import com.intellij.psi.PsiEnumConstant -import org.jetbrains.kotlin.analysis.providers.createAllLibrariesModificationTracker -import org.jetbrains.kotlin.analysis.providers.createProjectWideOutOfBlockModificationTracker +import org.jetbrains.kotlin.analysis.providers.KotlinGlobalModificationService import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiTestConfigurator import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.test.model.TestModule @@ -33,21 +31,24 @@ abstract class AbstractSymbolLightClassesEqualityTestBase( final override fun doTestByFileStructure(ktFiles: List, module: TestModule, testServices: TestServices) { val lightClasses = lightClassesToCheck(ktFiles, module, testServices) if (lightClasses.isEmpty()) return - val project = lightClasses.first().project - val modificationTracker = if (isTestAgainstCompiledCode) { - project.createAllLibrariesModificationTracker() - } else { - project.createProjectWideOutOfBlockModificationTracker() - } as SimpleModificationTracker - val testVisitor = createTestVisitor(modificationTracker, testServices.assertions) + val testVisitor = createTestVisitor(lightClasses.first().project, testServices.assertions) for (lightClass in lightClasses) { lightClass.accept(testVisitor) } } + private fun invalidateCaches(project: Project) { + val globalModificationService = KotlinGlobalModificationService.getInstance(project) + if (isTestAgainstCompiledCode) { + globalModificationService.publishGlobalModuleStateModification() + } else { + globalModificationService.publishGlobalSourceOutOfBlockModification() + } + } + private fun createTestVisitor( - modificationTracker: SimpleModificationTracker, + project: Project, assertions: AssertionsService, ): PsiElementVisitor = object : JavaElementVisitor() { override fun visitClass(aClass: PsiClass) { @@ -70,7 +71,7 @@ abstract class AbstractSymbolLightClassesEqualityTestBase( comparator: (before: R, after: R) -> Unit = ::assertElementEquals, ) { val before = element.accessor() - modificationTracker.incModificationCount() + invalidateCaches(project) val after = element.accessor() comparator(before, after)