mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Use psi availability API in editor breadcrumbs
IDEA-CR-29569
This commit is contained in:
@@ -22,6 +22,8 @@ import com.intellij.openapi.editor.impl.ComplementaryFontsRegistry;
|
||||
import com.intellij.openapi.editor.markup.RangeHighlighter;
|
||||
import com.intellij.openapi.editor.markup.TextAttributes;
|
||||
import com.intellij.openapi.fileEditor.FileDocumentManager;
|
||||
import com.intellij.openapi.progress.ProgressIndicator;
|
||||
import com.intellij.openapi.progress.util.ProgressIndicatorBase;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Comparing;
|
||||
import com.intellij.openapi.util.Disposer;
|
||||
@@ -33,6 +35,7 @@ import com.intellij.openapi.vcs.FileStatusListener;
|
||||
import com.intellij.openapi.vcs.FileStatusManager;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.availability.PsiAvailabilityService;
|
||||
import com.intellij.ui.Gray;
|
||||
import com.intellij.ui.breadcrumbs.BreadcrumbsProvider;
|
||||
import com.intellij.ui.breadcrumbs.BreadcrumbsUtil;
|
||||
@@ -79,6 +82,7 @@ public class BreadcrumbsXmlWrapper extends JComponent implements Disposable {
|
||||
private final MergingUpdateQueue myQueue = new MergingUpdateQueue("Breadcrumbs.Queue", 200, true, breadcrumbs);
|
||||
private final BreadcrumbsProvider myInfoProvider;
|
||||
private final Update myUpdate = new MyUpdate(this);
|
||||
private ProgressIndicator myPsiAvaiableProgress = null;
|
||||
|
||||
public static final Key<BreadcrumbsXmlWrapper> BREADCRUMBS_COMPONENT_KEY = new Key<>("BREADCRUMBS_KEY");
|
||||
|
||||
@@ -201,10 +205,21 @@ public class BreadcrumbsXmlWrapper extends JComponent implements Disposable {
|
||||
}
|
||||
|
||||
private void updateCrumbs() {
|
||||
if (breadcrumbs != null && myEditor != null && !myEditor.isDisposed()) {
|
||||
breadcrumbs.setFont(getNewFont(myEditor));
|
||||
updateCrumbs(myEditor.getCaretModel().getLogicalPosition());
|
||||
if (myEditor == null || myEditor.isDisposed()) return;
|
||||
|
||||
if (myPsiAvaiableProgress != null) {
|
||||
myPsiAvaiableProgress.cancel();
|
||||
}
|
||||
|
||||
ProgressIndicator progress = new ProgressIndicatorBase();
|
||||
myPsiAvaiableProgress = progress;
|
||||
|
||||
PsiAvailabilityService.getInstance(myProject).performWhenPsiAvailable(myEditor.getDocument(), () -> {
|
||||
if (!progress.isCanceled() && myFile != null && myEditor != null && !myEditor.isDisposed() && !myProject.isDisposed()) {
|
||||
breadcrumbs.setFont(getNewFont(myEditor));
|
||||
updateCrumbs(myEditor.getCaretModel().getLogicalPosition());
|
||||
}
|
||||
}, progress);
|
||||
}
|
||||
|
||||
public void queueUpdate() {
|
||||
@@ -379,16 +394,11 @@ public class BreadcrumbsXmlWrapper extends JComponent implements Disposable {
|
||||
}
|
||||
|
||||
private void updateCrumbs(final LogicalPosition position) {
|
||||
if (myFile != null && myEditor != null && !myEditor.isDisposed() && !myProject.isDisposed()) {
|
||||
if (!breadcrumbs.isShowing()) {
|
||||
breadcrumbs.setCrumbs(null);
|
||||
return;
|
||||
}
|
||||
if (PsiDocumentManager.getInstance(myProject).isUncommited(myEditor.getDocument())) {
|
||||
return;
|
||||
}
|
||||
breadcrumbs.setCrumbs(getPresentableLineElements(position, myFile, myEditor, myProject, myInfoProvider));
|
||||
if (!breadcrumbs.isShowing()) {
|
||||
breadcrumbs.setCrumbs(null);
|
||||
return;
|
||||
}
|
||||
breadcrumbs.setCrumbs(getPresentableLineElements(position, myFile, myEditor, myProject, myInfoProvider));
|
||||
}
|
||||
|
||||
@Nullable
|
||||
|
||||
Reference in New Issue
Block a user