[FIR IDE] Fix invalid caches reset for Fir Renderer tests

This commit is contained in:
Igor Yakovlev
2021-04-06 18:23:46 +02:00
parent 7d3be9eafa
commit 39edcb0f29
4 changed files with 24 additions and 35 deletions
@@ -1,33 +0,0 @@
/*
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
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.analyse
import org.jetbrains.kotlin.idea.frontend.api.fir.KtFirAnalysisSessionProvider
import org.jetbrains.kotlin.psi.KtElement
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 { analyse(context) {} }
}
}
@@ -7,11 +7,9 @@ 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
abstract class AbstractFirReferenceResolveTest : AbstractReferenceResolveTest() {
@@ -9,6 +9,7 @@ import com.intellij.testFramework.LightProjectDescriptor
import org.jetbrains.kotlin.idea.executeOnPooledThreadInReadAction
import org.jetbrains.kotlin.idea.frontend.api.analyse
import org.jetbrains.kotlin.idea.frontend.api.components.KtTypeRendererOptions
import org.jetbrains.kotlin.idea.invalidateCaches
import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase
import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor
import org.jetbrains.kotlin.psi.KtFile
@@ -18,6 +19,11 @@ import org.jetbrains.kotlin.psi.KtProperty
class KtTypeRendererTest : KotlinLightCodeInsightFixtureTestCase() {
override fun isFirPlugin() = true
override fun tearDown() {
project.invalidateCaches(file as? KtFile)
super.tearDown()
}
private fun doTestByTypeText(
type: String,
expected: String,
@@ -7,14 +7,22 @@ package org.jetbrains.kotlin.idea
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.application.runReadAction
import com.intellij.openapi.components.service
import com.intellij.openapi.project.Project
import com.intellij.openapi.util.io.FileUtil
import com.intellij.testFramework.LightPlatformTestCase
import org.jetbrains.kotlin.idea.caches.project.LibraryModificationTracker
import org.jetbrains.kotlin.idea.util.application.runWriteAction
import org.jetbrains.kotlin.test.InTextDirectivesUtils
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.KtAnalysisSession
import org.jetbrains.kotlin.idea.frontend.api.KtAnalysisSessionProvider
import org.jetbrains.kotlin.idea.frontend.api.analyse
import org.jetbrains.kotlin.idea.frontend.api.fir.KtFirAnalysisSessionProvider
import org.jetbrains.kotlin.psi.KtElement
import org.jetbrains.kotlin.trackers.KotlinOutOfBlockModificationTrackerFactory
import java.io.File
fun <R> executeOnPooledThreadInReadAction(action: () -> R): R =
@@ -69,4 +77,14 @@ inline fun <T> withPossiblyDisabledDuplicatedFirSourceElementsException(fileText
} else {
return action()
}
}
@OptIn(InvalidWayOfUsingAnalysisSession::class)
fun Project.invalidateCaches(context: KtElement?) {
LibraryModificationTracker.getInstance(this).incModificationCount()
(service<KotlinOutOfBlockModificationTrackerFactory>() as KotlinFirOutOfBlockModificationTrackerFactory).incrementModificationsCount()
(service<KtAnalysisSessionProvider>() as KtFirAnalysisSessionProvider).clearCaches()
if (context != null) {
executeOnPooledThreadInReadAction { analyse(context) {} }
}
}