FIR IDE: invalidate caches between tests

This commit is contained in:
Ilya Kirillov
2021-01-07 01:26:28 +01:00
parent 861c9b8e45
commit 132fc9e68b
8 changed files with 70 additions and 0 deletions
@@ -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,
@@ -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 <T : PsiElement> doTest(path: String) = doTestWithFIRFlagsByPath(path) {
super.doTest<T>(path)
}
@@ -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 <T : PsiElement> doTest(path: String) = doTestWithFIRFlagsByPath(path) {
super.doTest<T>(path)
}
@@ -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 <T : PsiElement> doTest(path: String) = doTestWithFIRFlagsByPath(path) {
super.doTest<T>(path)
}
@@ -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 <T : PsiElement> doTest(path: String) = doTestWithFIRFlagsByPath(path) {
super.doTest<T>(path)
}
@@ -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);
@@ -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<KotlinOutOfBlockModificationTrackerFactory>() as KotlinFirOutOfBlockModificationTrackerFactory).incrementModificationsCount()
(service<KtAnalysisSessionProvider>() as KtFirAnalysisSessionProvider).clearCaches()
if (context != null) {
executeOnPooledThreadInReadAction { analyze(context) {} }
}
}
@@ -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")