WebTestUtil: call getPsiFile within a read action.

GitOrigin-RevId: d88b6b595ab5401fb89296ccaed27d3dc00c616d
This commit is contained in:
Piotr Tomiak
2024-09-17 10:39:13 +02:00
committed by intellij-monorepo-bot
parent 629f68c3f2
commit 056f8716e1

View File

@@ -7,6 +7,7 @@ import com.intellij.codeInsight.CodeInsightSettings
import com.intellij.codeInsight.completion.PrioritizedLookupElement
import com.intellij.codeInsight.lookup.LookupElement
import com.intellij.codeInsight.navigation.actions.GotoDeclarationOrUsageHandler2
import com.intellij.codeInsight.navigation.actions.GotoDeclarationOrUsageHandler2.Companion.testGTDUOutcome
import com.intellij.find.usages.api.SearchTarget
import com.intellij.find.usages.api.UsageOptions
import com.intellij.find.usages.impl.AllSearchOptions
@@ -17,6 +18,7 @@ import com.intellij.lang.documentation.ide.IdeDocumentationTargetProvider
import com.intellij.lang.injection.InjectedLanguageManager
import com.intellij.model.psi.PsiSymbolReference
import com.intellij.model.psi.impl.referencesAt
import com.intellij.openapi.application.ReadAction
import com.intellij.openapi.application.WriteAction
import com.intellij.openapi.command.CommandProcessor
import com.intellij.openapi.diagnostic.Logger
@@ -45,6 +47,7 @@ import com.intellij.testFramework.fixtures.CodeInsightTestFixture
import com.intellij.testFramework.fixtures.TestLookupElementPresentation
import com.intellij.usages.Usage
import com.intellij.util.ObjectUtils.coalesce
import com.intellij.util.concurrency.AppExecutorUtil
import com.intellij.util.concurrency.annotations.RequiresEdt
import com.intellij.webSymbols.declarations.WebSymbolDeclaration
import com.intellij.webSymbols.declarations.WebSymbolDeclarationProvider
@@ -54,6 +57,7 @@ import com.intellij.webSymbols.query.WebSymbolsQueryExecutorFactory
import junit.framework.TestCase.*
import org.junit.Assert
import java.io.File
import java.util.concurrent.Callable
import kotlin.math.max
import kotlin.math.min
@@ -162,12 +166,14 @@ data class LookupElementInfo(
val isItemTextUnderline: Boolean,
val isTypeGreyed: Boolean,
) {
fun render(renderPriority: Boolean,
renderTypeText: Boolean,
renderTailText: Boolean,
renderProximity: Boolean,
renderDisplayText: Boolean,
renderDisplayEffects: Boolean): String {
fun render(
renderPriority: Boolean,
renderTypeText: Boolean,
renderTailText: Boolean,
renderProximity: Boolean,
renderDisplayText: Boolean,
renderDisplayEffects: Boolean,
): String {
val result = StringBuilder()
result.append(lookupString)
if (renderPriority || renderTypeText || renderTailText || renderProximity || renderDisplayText || renderDisplayEffects) {
@@ -224,9 +230,11 @@ data class LookupElementInfo(
}
}
private fun CodeInsightTestFixture.checkDocumentation(actualDocumentation: String?,
fileSuffix: String = ".expected",
directory: String = "") {
private fun CodeInsightTestFixture.checkDocumentation(
actualDocumentation: String?,
fileSuffix: String = ".expected",
directory: String = "",
) {
assertNotNull("No documentation rendered", actualDocumentation)
val expectedFile = InjectedLanguageManager.getInstance(project).getTopLevelFile(file)
.virtualFile.nameWithoutExtension + fileSuffix + ".html"
@@ -258,13 +266,15 @@ infix fun ((item: LookupElementInfo) -> Boolean).and(other: (item: LookupElement
}
@JvmOverloads
fun CodeInsightTestFixture.renderLookupItems(renderPriority: Boolean,
renderTypeText: Boolean,
renderTailText: Boolean = false,
renderProximity: Boolean = false,
renderDisplayText: Boolean = false,
renderDisplayEffects: Boolean = renderPriority,
lookupFilter: (item: LookupElementInfo) -> Boolean = { true }): List<String> =
fun CodeInsightTestFixture.renderLookupItems(
renderPriority: Boolean,
renderTypeText: Boolean,
renderTailText: Boolean = false,
renderProximity: Boolean = false,
renderDisplayText: Boolean = false,
renderDisplayEffects: Boolean = renderPriority,
lookupFilter: (item: LookupElementInfo) -> Boolean = { true },
): List<String> =
lookupElements?.asSequence()
?.map {
val presentation = TestLookupElementPresentation.renderReal(it)
@@ -483,8 +493,14 @@ fun CodeInsightTestFixture.checkGTDUOutcome(expectedOutcome: GotoDeclarationOrUs
val actualSignature = signature ?: editor.currentPositionSignature
val editor = InjectedLanguageUtil.getEditorForInjectedLanguageNoCommit(editor, file)
val offset = editor.caretModel.offset
val file = PsiDocumentManager.getInstance(project).getPsiFile(editor.document) ?: file
val gtduOutcome = GotoDeclarationOrUsageHandler2.testGTDUOutcomeInNonBlockingReadAction(editor, file, offset)
val gtduOutcome = ReadAction
.nonBlocking(Callable {
val file = PsiDocumentManager.getInstance(project).getPsiFile(editor.document) ?: file
testGTDUOutcome(editor, file, offset)
})
.submit(AppExecutorUtil.getAppExecutorService())
.get()
Assert.assertEquals(actualSignature,
expectedOutcome,
gtduOutcome)
@@ -578,10 +594,12 @@ fun CodeInsightTestFixture.renameWebSymbol(newName: String) {
}
fun doCompletionItemsTest(fixture: CodeInsightTestFixture,
fileName: String,
goldFileWithExtension: Boolean = false,
renderDisplayText: Boolean = false) {
fun doCompletionItemsTest(
fixture: CodeInsightTestFixture,
fileName: String,
goldFileWithExtension: Boolean = false,
renderDisplayText: Boolean = false,
) {
val fileNameNoExt = FileUtil.getNameWithoutExtension(fileName)
fixture.configureByFile(fileName)
WriteAction.runAndWait<Throwable> { WebSymbolsQueryExecutorFactory.getInstance(fixture.project) }