encapsulate TextEditorBackgroundHighlighter.getPasses, since it's dangerous and very implicit-contract-demanding

GitOrigin-RevId: cefb97e5a7798ad50e7bcc33da048f5e0e580ba3
This commit is contained in:
Alexey Kudravtsev
2024-08-09 15:29:49 +02:00
committed by intellij-monorepo-bot
parent 3433a23e80
commit 9441e756d3
4 changed files with 18 additions and 9 deletions

View File

@@ -873,7 +873,6 @@ f:com.intellij.codeInsight.daemon.impl.TextEditorBackgroundHighlighter
- com.intellij.codeHighlighting.BackgroundEditorHighlighter
- <init>(com.intellij.openapi.project.Project,com.intellij.openapi.editor.Editor):V
- createPassesForEditor():com.intellij.codeHighlighting.TextEditorHighlightingPass[]
- f:getPasses(I[]):java.util.List
f:com.intellij.codeInsight.daemon.impl.TextEditorHighlightingPassRegistrarImpl
- com.intellij.codeHighlighting.TextEditorHighlightingPassRegistrar
- sf:EP_NAME:com.intellij.openapi.extensions.ExtensionPointName

View File

@@ -5,7 +5,9 @@ import com.intellij.codeHighlighting.BackgroundEditorHighlighter
import com.intellij.codeHighlighting.Pass
import com.intellij.codeHighlighting.TextEditorHighlightingPass
import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer
import com.intellij.codeInspection.ex.GlobalInspectionContextBase
import com.intellij.diagnostic.StartUpMeasurer
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.diagnostic.logger
import com.intellij.openapi.editor.Editor
import com.intellij.openapi.progress.ProcessCanceledException
@@ -16,7 +18,7 @@ import com.intellij.psi.PsiDocumentManager
import com.intellij.psi.PsiFile
import com.intellij.psi.impl.PsiDocumentManagerBase
import com.intellij.psi.impl.PsiFileEx
import com.intellij.util.ArrayUtilRt
import com.intellij.util.ArrayUtil
import com.intellij.util.containers.toArray
import java.util.concurrent.CancellationException
@@ -36,7 +38,7 @@ class TextEditorBackgroundHighlighter(private val project: Project, private val
return file
}
fun getPasses(passesToIgnore: IntArray): List<TextEditorHighlightingPass> {
private fun createPasses(): List<TextEditorHighlightingPass> {
if (project.isDisposed()) {
return emptyList()
}
@@ -48,14 +50,17 @@ class TextEditorBackgroundHighlighter(private val project: Project, private val
var file = renewFile() ?: return emptyList()
var effectivePassesToIgnore = passesToIgnore
val effectivePassesToIgnore =
if (file is PsiCompiledFile) {
file = file.getDecompiledPsiFile()
effectivePassesToIgnore = IGNORE_FOR_COMPILED
IGNORE_FOR_COMPILED
}
else if (!DaemonCodeAnalyzer.getInstance(project).isHighlightingAvailable(file)) {
return emptyList()
}
else {
ArrayUtil.EMPTY_INT_ARRAY
}
HighlightingPassTracer.HIGHLIGHTING_PASS_TRACER.spanBuilder("passes instantiation").use { span ->
val startupActivity = StartUpMeasurer.startActivity("highlighting passes instantiation")
@@ -81,7 +86,9 @@ class TextEditorBackgroundHighlighter(private val project: Project, private val
}
override fun createPassesForEditor(): Array<TextEditorHighlightingPass> {
val passes = getPasses(ArrayUtilRt.EMPTY_INT_ARRAY)
ApplicationManager.getApplication().assertIsNonDispatchThread()
GlobalInspectionContextBase.assertUnderDaemonProgress()
val passes = createPasses()
return if (passes.isEmpty()) TextEditorHighlightingPass.EMPTY_ARRAY else passes.toArray(TextEditorHighlightingPass.EMPTY_ARRAY)
}
}

View File

@@ -3,6 +3,7 @@ package com.intellij.codeInsight.daemon.impl;
import com.intellij.codeHighlighting.*;
import com.intellij.codeInsight.daemon.ProblemHighlightFilter;
import com.intellij.codeInspection.ex.GlobalInspectionContextBase;
import com.intellij.codeWithMe.ClientId;
import com.intellij.openapi.application.AccessToken;
import com.intellij.openapi.application.ApplicationManager;
@@ -161,6 +162,7 @@ public final class TextEditorHighlightingPassRegistrarImpl extends TextEditorHig
@NotNull Editor editor,
int @NotNull [] passesToIgnore) {
ApplicationManager.getApplication().assertIsNonDispatchThread();
GlobalInspectionContextBase.assertUnderDaemonProgress();
PsiDocumentManager documentManager = PsiDocumentManager.getInstance(myProject);
Document document = editor.getDocument();
PsiFile fileFromDoc = documentManager.getPsiFile(document);

View File

@@ -1274,9 +1274,10 @@ public final class DaemonCodeAnalyzerImpl extends DaemonCodeAnalyzerEx
}
session.additionalSetupFromBackground(psiFile);
try (AccessToken ignored = ClientId.withClientId(ClientFileEditorManager.getClientId(fileEditor))) {
HighlightingPass[] r = backgroundEditorHighlighter instanceof TextEditorBackgroundHighlighter textHighlighter ?
textHighlighter.getPasses(passesToIgnore).toArray(HighlightingPass.EMPTY_ARRAY) :
backgroundEditorHighlighter.createPassesForEditor();
HighlightingPass[] r = backgroundEditorHighlighter.createPassesForEditor();
if (passesToIgnore.length != 0) {
r = ContainerUtil.findAllAsArray(r, pass->!(pass instanceof TextEditorHighlightingPass te) || ArrayUtil.indexOf(passesToIgnore, te.getId()) == -1);
}
if (heavyProcessIsRunning) {
r = ContainerUtil.findAllAsArray(r, o -> DumbService.isDumbAware(o));
}