From 730867c2d1b99600b542b7f027e4e72b1d07c271 Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Mon, 31 Jul 2023 17:56:25 +0200 Subject: [PATCH] IDEA-323747 Printing fails (File | Print) GitOrigin-RevId: cc2f8bd35bc9cb01ee311d727d72ddabab0c4889 --- .../printing/FileSeparatorProvider.java | 27 ++++++++++++++----- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/codeEditor/printing/FileSeparatorProvider.java b/platform/lang-impl/src/com/intellij/codeEditor/printing/FileSeparatorProvider.java index 4d554c64802b..5ad4ae12f033 100644 --- a/platform/lang-impl/src/com/intellij/codeEditor/printing/FileSeparatorProvider.java +++ b/platform/lang-impl/src/com/intellij/codeEditor/printing/FileSeparatorProvider.java @@ -2,9 +2,14 @@ package com.intellij.codeEditor.printing; import com.intellij.codeInsight.daemon.LineMarkerInfo; +import com.intellij.codeInsight.daemon.impl.DaemonProgressIndicator; +import com.intellij.codeInsight.daemon.impl.HighlightingSessionImpl; import com.intellij.codeInsight.daemon.impl.LineMarkersPass; +import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.markup.SeparatorPlacement; +import com.intellij.openapi.progress.ProgressManager; +import com.intellij.openapi.util.ProperTextRange; import com.intellij.psi.PsiFile; import com.intellij.util.MathUtil; import org.jetbrains.annotations.NotNull; @@ -16,14 +21,22 @@ import java.util.List; final class FileSeparatorProvider { @NotNull static List> getFileSeparators(@NotNull PsiFile file, @NotNull Document document) { - final List> result = new ArrayList<>(); - for (LineMarkerInfo lineMarkerInfo : LineMarkersPass.queryLineMarkers(file, document)) { - if (lineMarkerInfo.separatorColor != null) { - result.add(lineMarkerInfo); - } - } + ApplicationManager.getApplication().assertIsNonDispatchThread(); + ApplicationManager.getApplication().assertReadAccessAllowed(); + List> result = new ArrayList<>(); + // need to run highlighting under DaemonProgressIndicator + DaemonProgressIndicator indicator = new DaemonProgressIndicator(); - result.sort(Comparator.comparingInt(i -> getDisplayLine(i, document))); + ProgressManager.getInstance().executeProcessUnderProgress(() -> { + HighlightingSessionImpl.runInsideHighlightingSession(file, null, ProperTextRange.create(file.getTextRange()), false, __ -> { + for (LineMarkerInfo lineMarkerInfo : LineMarkersPass.queryLineMarkers(file, document)) { + if (lineMarkerInfo.separatorColor != null) { + result.add(lineMarkerInfo); + } + } + result.sort(Comparator.comparingInt(i -> getDisplayLine(i, document))); + }); + }, indicator); return result; }