[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:
committed by
Space Team
parent
7f4af06ac7
commit
2023c08459
+13
-12
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user