diff --git a/idea/idea-fir/tests/org/jetbrains/kotlin/checkers/AbstractFirPsiCheckerTest.kt b/idea/idea-fir/tests/org/jetbrains/kotlin/checkers/AbstractFirPsiCheckerTest.kt index ca86505e14f..2630a8431f0 100644 --- a/idea/idea-fir/tests/org/jetbrains/kotlin/checkers/AbstractFirPsiCheckerTest.kt +++ b/idea/idea-fir/tests/org/jetbrains/kotlin/checkers/AbstractFirPsiCheckerTest.kt @@ -6,8 +6,10 @@ package org.jetbrains.kotlin.checkers import com.intellij.rt.execution.junit.FileComparisonFailure +import org.jetbrains.kotlin.idea.invalidateCaches import org.jetbrains.kotlin.idea.test.withCustomCompilerOptions import org.jetbrains.kotlin.idea.withPossiblyDisabledDuplicatedFirSourceElementsException +import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.test.uitls.IgnoreTests import java.io.File @@ -23,6 +25,11 @@ abstract class AbstractFirPsiCheckerTest : AbstractPsiCheckerTest() { } } + override fun tearDown() { + project.invalidateCaches(file as? KtFile) + super.tearDown() + } + override fun checkHighlighting( checkWarnings: Boolean, checkInfos: Boolean, diff --git a/idea/idea-fir/tests/org/jetbrains/kotlin/findUsages/AbstractFindUsagesFirTest.kt b/idea/idea-fir/tests/org/jetbrains/kotlin/findUsages/AbstractFindUsagesFirTest.kt index 4c2a7f5b44b..894344be41b 100644 --- a/idea/idea-fir/tests/org/jetbrains/kotlin/findUsages/AbstractFindUsagesFirTest.kt +++ b/idea/idea-fir/tests/org/jetbrains/kotlin/findUsages/AbstractFindUsagesFirTest.kt @@ -6,10 +6,17 @@ package org.jetbrains.kotlin.findUsages import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.idea.invalidateCaches +import org.jetbrains.kotlin.psi.KtFile abstract class AbstractFindUsagesFirTest : AbstractFindUsagesTest() { override fun isFirPlugin(): Boolean = true + override fun tearDown() { + project.invalidateCaches(file as? KtFile) + super.tearDown() + } + override fun doTest(path: String) = doTestWithFIRFlagsByPath(path) { super.doTest(path) } diff --git a/idea/idea-fir/tests/org/jetbrains/kotlin/findUsages/AbstractFindUsagesWithDisableComponentSearchFirTest.kt b/idea/idea-fir/tests/org/jetbrains/kotlin/findUsages/AbstractFindUsagesWithDisableComponentSearchFirTest.kt index 6f653576a19..0dbad9f96de 100644 --- a/idea/idea-fir/tests/org/jetbrains/kotlin/findUsages/AbstractFindUsagesWithDisableComponentSearchFirTest.kt +++ b/idea/idea-fir/tests/org/jetbrains/kotlin/findUsages/AbstractFindUsagesWithDisableComponentSearchFirTest.kt @@ -6,10 +6,17 @@ package org.jetbrains.kotlin.findUsages import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.idea.invalidateCaches +import org.jetbrains.kotlin.psi.KtFile abstract class AbstractFindUsagesWithDisableComponentSearchFirTest : AbstractFindUsagesWithDisableComponentSearchTest() { override fun isFirPlugin(): Boolean = true + override fun tearDown() { + project.invalidateCaches(file as? KtFile) + super.tearDown() + } + override fun doTest(path: String) = doTestWithFIRFlagsByPath(path) { super.doTest(path) } diff --git a/idea/idea-fir/tests/org/jetbrains/kotlin/findUsages/AbstractKotlinFindUsagesWithLibraryTest.kt b/idea/idea-fir/tests/org/jetbrains/kotlin/findUsages/AbstractKotlinFindUsagesWithLibraryTest.kt index ae5fc2ee12b..d0d5ab723f8 100644 --- a/idea/idea-fir/tests/org/jetbrains/kotlin/findUsages/AbstractKotlinFindUsagesWithLibraryTest.kt +++ b/idea/idea-fir/tests/org/jetbrains/kotlin/findUsages/AbstractKotlinFindUsagesWithLibraryTest.kt @@ -6,12 +6,19 @@ package org.jetbrains.kotlin.findUsages import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.idea.invalidateCaches import org.jetbrains.kotlin.idea.test.PluginTestCaseBase import org.jetbrains.kotlin.idea.test.SdkAndMockLibraryProjectDescriptor +import org.jetbrains.kotlin.psi.KtFile abstract class AbstractKotlinFindUsagesWithLibraryFirTest : AbstractKotlinFindUsagesWithLibraryTest() { override fun isFirPlugin(): Boolean = true + override fun tearDown() { + project.invalidateCaches(file as? KtFile) + super.tearDown() + } + override fun doTest(path: String) = doTestWithFIRFlagsByPath(path) { super.doTest(path) } diff --git a/idea/idea-fir/tests/org/jetbrains/kotlin/findUsages/AbstractKotlinFindUsagesWithStdlibTest.kt b/idea/idea-fir/tests/org/jetbrains/kotlin/findUsages/AbstractKotlinFindUsagesWithStdlibTest.kt index 1a00a9b04dc..26f17b8e69c 100644 --- a/idea/idea-fir/tests/org/jetbrains/kotlin/findUsages/AbstractKotlinFindUsagesWithStdlibTest.kt +++ b/idea/idea-fir/tests/org/jetbrains/kotlin/findUsages/AbstractKotlinFindUsagesWithStdlibTest.kt @@ -6,11 +6,18 @@ package org.jetbrains.kotlin.findUsages import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.idea.invalidateCaches import org.jetbrains.kotlin.idea.test.KotlinJdkAndMultiplatformStdlibDescriptor +import org.jetbrains.kotlin.psi.KtFile abstract class AbstractKotlinFindUsagesWithStdlibFirTest : AbstractKotlinFindUsagesWithStdlibTest() { override fun isFirPlugin(): Boolean = true + override fun tearDown() { + project.invalidateCaches(file as? KtFile) + super.tearDown() + } + override fun doTest(path: String) = doTestWithFIRFlagsByPath(path) { super.doTest(path) } diff --git a/idea/idea-fir/tests/org/jetbrains/kotlin/idea/highlighter/AbstractFirHighlightingTest.kt b/idea/idea-fir/tests/org/jetbrains/kotlin/idea/highlighter/AbstractFirHighlightingTest.kt index 555cc646ace..3c52a8a7059 100644 --- a/idea/idea-fir/tests/org/jetbrains/kotlin/idea/highlighter/AbstractFirHighlightingTest.kt +++ b/idea/idea-fir/tests/org/jetbrains/kotlin/idea/highlighter/AbstractFirHighlightingTest.kt @@ -6,8 +6,10 @@ package org.jetbrains.kotlin.idea.highlighter import org.jetbrains.kotlin.idea.addExternalTestFiles +import org.jetbrains.kotlin.idea.invalidateCaches import org.jetbrains.kotlin.idea.test.ProjectDescriptorWithStdlibSources import org.jetbrains.kotlin.idea.withPossiblyDisabledDuplicatedFirSourceElementsException +import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.test.InTextDirectivesUtils import org.jetbrains.kotlin.test.uitls.IgnoreTests @@ -23,6 +25,11 @@ abstract class AbstractFirHighlightingTest : AbstractHighlightingTest() { super.doTest(unused) } + override fun tearDown() { + project.invalidateCaches(file as? KtFile) + super.tearDown() + } + override fun checkHighlighting(fileText: String) { val checkInfos = !InTextDirectivesUtils.isDirectiveDefined(fileText, NO_CHECK_INFOS_PREFIX); diff --git a/idea/idea-fir/tests/org/jetbrains/kotlin/idea/ideaFirTestUtils.kt b/idea/idea-fir/tests/org/jetbrains/kotlin/idea/ideaFirTestUtils.kt index faa0af7ff82..ec6e348fcd6 100644 --- a/idea/idea-fir/tests/org/jetbrains/kotlin/idea/ideaFirTestUtils.kt +++ b/idea/idea-fir/tests/org/jetbrains/kotlin/idea/ideaFirTestUtils.kt @@ -5,9 +5,30 @@ package org.jetbrains.kotlin.idea +import com.intellij.openapi.components.service +import com.intellij.openapi.project.Project +import org.jetbrains.kotlin.idea.caches.project.LibraryModificationTracker import org.jetbrains.kotlin.idea.fir.low.level.api.element.builder.DuplicatedFirSourceElementsException +import org.jetbrains.kotlin.idea.fir.low.level.api.trackers.KotlinFirOutOfBlockModificationTrackerFactory +import org.jetbrains.kotlin.idea.frontend.api.InvalidWayOfUsingAnalysisSession +import org.jetbrains.kotlin.idea.frontend.api.KtAnalysisSessionProvider +import org.jetbrains.kotlin.idea.frontend.api.analyze +import org.jetbrains.kotlin.idea.frontend.api.fir.KtFirAnalysisSessionProvider +import org.jetbrains.kotlin.psi.KtElement +import org.jetbrains.kotlin.psi.KtFile +import org.jetbrains.kotlin.trackers.KotlinOutOfBlockModificationTrackerFactory fun Throwable.shouldBeRethrown(): Boolean = when (this) { is DuplicatedFirSourceElementsException -> true else -> false +} + +@OptIn(InvalidWayOfUsingAnalysisSession::class) +internal fun Project.invalidateCaches(context: KtElement?) { + LibraryModificationTracker.getInstance(this).incModificationCount() + (service() as KotlinFirOutOfBlockModificationTrackerFactory).incrementModificationsCount() + (service() as KtFirAnalysisSessionProvider).clearCaches() + if (context != null) { + executeOnPooledThreadInReadAction { analyze(context) {} } + } } \ No newline at end of file diff --git a/idea/idea-fir/tests/org/jetbrains/kotlin/idea/resolve/AbstractFirReferenceResolveTest.kt b/idea/idea-fir/tests/org/jetbrains/kotlin/idea/resolve/AbstractFirReferenceResolveTest.kt index ac6db4c5f5f..e5ac023b7d1 100644 --- a/idea/idea-fir/tests/org/jetbrains/kotlin/idea/resolve/AbstractFirReferenceResolveTest.kt +++ b/idea/idea-fir/tests/org/jetbrains/kotlin/idea/resolve/AbstractFirReferenceResolveTest.kt @@ -6,9 +6,11 @@ package org.jetbrains.kotlin.idea.resolve import org.jetbrains.kotlin.idea.completion.test.configureWithExtraFile +import org.jetbrains.kotlin.idea.invalidateCaches import org.jetbrains.kotlin.idea.shouldBeRethrown import org.jetbrains.kotlin.idea.test.KotlinLightProjectDescriptor import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor +import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.test.InTextDirectivesUtils import org.jetbrains.kotlin.test.uitls.IgnoreTests @@ -18,6 +20,11 @@ abstract class AbstractFirReferenceResolveTest : AbstractReferenceResolveTest() override fun getProjectDescriptor(): KotlinLightProjectDescriptor = KotlinWithJdkAndRuntimeLightProjectDescriptor.INSTANCE_FULL_JDK + override fun tearDown() { + project.invalidateCaches(myFixture.file as? KtFile) + super.tearDown() + } + override fun doTest(path: String) { assert(path.endsWith(".kt")) { path } myFixture.configureWithExtraFile(path, ".Data")