[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
|
package org.jetbrains.kotlin.light.classes.symbol.base
|
||||||
|
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.openapi.util.SimpleModificationTracker
|
|
||||||
import com.intellij.psi.JavaElementVisitor
|
import com.intellij.psi.JavaElementVisitor
|
||||||
import com.intellij.psi.PsiClass
|
import com.intellij.psi.PsiClass
|
||||||
import com.intellij.psi.PsiElementVisitor
|
import com.intellij.psi.PsiElementVisitor
|
||||||
import com.intellij.psi.PsiEnumConstant
|
import com.intellij.psi.PsiEnumConstant
|
||||||
import org.jetbrains.kotlin.analysis.providers.createAllLibrariesModificationTracker
|
import org.jetbrains.kotlin.analysis.providers.KotlinGlobalModificationService
|
||||||
import org.jetbrains.kotlin.analysis.providers.createProjectWideOutOfBlockModificationTracker
|
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiTestConfigurator
|
import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiTestConfigurator
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.jetbrains.kotlin.test.model.TestModule
|
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) {
|
final override fun doTestByFileStructure(ktFiles: List<KtFile>, module: TestModule, testServices: TestServices) {
|
||||||
val lightClasses = lightClassesToCheck(ktFiles, module, testServices)
|
val lightClasses = lightClassesToCheck(ktFiles, module, testServices)
|
||||||
if (lightClasses.isEmpty()) return
|
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) {
|
for (lightClass in lightClasses) {
|
||||||
lightClass.accept(testVisitor)
|
lightClass.accept(testVisitor)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun invalidateCaches(project: Project) {
|
||||||
|
val globalModificationService = KotlinGlobalModificationService.getInstance(project)
|
||||||
|
if (isTestAgainstCompiledCode) {
|
||||||
|
globalModificationService.publishGlobalModuleStateModification()
|
||||||
|
} else {
|
||||||
|
globalModificationService.publishGlobalSourceOutOfBlockModification()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun createTestVisitor(
|
private fun createTestVisitor(
|
||||||
modificationTracker: SimpleModificationTracker,
|
project: Project,
|
||||||
assertions: AssertionsService,
|
assertions: AssertionsService,
|
||||||
): PsiElementVisitor = object : JavaElementVisitor() {
|
): PsiElementVisitor = object : JavaElementVisitor() {
|
||||||
override fun visitClass(aClass: PsiClass) {
|
override fun visitClass(aClass: PsiClass) {
|
||||||
@@ -70,7 +71,7 @@ abstract class AbstractSymbolLightClassesEqualityTestBase(
|
|||||||
comparator: (before: R, after: R) -> Unit = ::assertElementEquals,
|
comparator: (before: R, after: R) -> Unit = ::assertElementEquals,
|
||||||
) {
|
) {
|
||||||
val before = element.accessor()
|
val before = element.accessor()
|
||||||
modificationTracker.incModificationCount()
|
invalidateCaches(project)
|
||||||
|
|
||||||
val after = element.accessor()
|
val after = element.accessor()
|
||||||
comparator(before, after)
|
comparator(before, after)
|
||||||
|
|||||||
Reference in New Issue
Block a user