[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.
This commit is contained in:
Marco Pennekamp
2023-07-13 14:53:39 +02:00
committed by Space Team
parent 7f4af06ac7
commit 2023c08459
@@ -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<KtFile>, 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)