Commit eadc8899 authored by Dmitry Batrak's avatar Dmitry Batrak
Browse files

build initial foldings in background (improvements as per CR-IC-5531)

parent 350760c9
Showing with 15 additions and 10 deletions
+15 -10
......@@ -207,7 +207,9 @@ public class CodeFoldingManagerImpl extends CodeFoldingManager implements Projec
if (!((FoldingModelEx)editor.getFoldingModel()).isFoldingEnabled()) return;
if (!EditorUtil.supportsDumbModeFolding(editor)) return;
CodeFoldingState foldingState = buildInitialFoldings(editor.getDocument());
Document document = editor.getDocument();
PsiDocumentManager.getInstance(myProject).commitDocument(document);
CodeFoldingState foldingState = buildInitialFoldings(document);
if (foldingState != null) {
foldingState.setToEditor(editor);
}
......@@ -220,13 +222,17 @@ public class CodeFoldingManagerImpl extends CodeFoldingManager implements Projec
return null;
}
ApplicationManager.getApplication().assertReadAccessAllowed();
PsiDocumentManager psiDocumentManager = PsiDocumentManager.getInstance(myProject);
if (psiDocumentManager.isUncommited(document)) {
// skip building foldings for uncommitted document, CodeFoldingPass invoked by daemon will do it later
return null;
}
//Do not save/restore folding for code fragments
final PsiFile file = PsiDocumentManager.getInstance(myProject).getPsiFile(document);
final PsiFile file = psiDocumentManager.getPsiFile(document);
if (file == null || !file.isValid() || !file.getViewProvider().isPhysical() && !ApplicationManager.getApplication().isUnitTestMode()) {
return null;
}
PsiDocumentManager.getInstance(myProject).commitDocument(document);
final FoldingUpdate.FoldingMap foldingMap = FoldingUpdate.getFoldingsFor(myProject, file, document, true);
......
......@@ -22,7 +22,6 @@ package com.intellij.openapi.fileEditor.impl.text;
import com.intellij.codeHighlighting.BackgroundEditorHighlighter;
import com.intellij.codeInsight.daemon.impl.TextEditorBackgroundHighlighter;
import com.intellij.codeInsight.folding.CodeFoldingManager;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.Editor;
......@@ -70,12 +69,7 @@ public class PsiAwareTextEditorProvider extends TextEditorProvider implements As
public FileEditor build() {
final PsiAwareTextEditorImpl editor = new PsiAwareTextEditorImpl(project, file, PsiAwareTextEditorProvider.this);
if (finalState != null) {
ApplicationManager.getApplication().runReadAction(new Runnable() {
@Override
public void run() {
finalState.setToEditor(editor.getEditor());
}
});
finalState.setToEditor(editor.getEditor());
}
return editor;
}
......
......@@ -733,6 +733,8 @@ public class FileEditorManagerImpl extends FileEditorManagerEx implements Projec
@Nullable final HistoryEntry entry,
final boolean current, final boolean focusEditor, final Boolean pin,
final int index) {
ApplicationManager.getApplication().assertReadAccessAllowed();
final Ref<EditorWithProviderComposite> compositeRef = new Ref<EditorWithProviderComposite>();
UIUtil.invokeAndWaitIfNeeded(new Runnable() {
......@@ -777,6 +779,9 @@ public class FileEditorManagerImpl extends FileEditorManagerEx implements Projec
UIUtil.invokeAndWaitIfNeeded(new Runnable() {
@Override
public void run() {
if (myProject.isDisposed() || !file.isValid()) {
return;
}
compositeRef.set(window.findFileComposite(file));
boolean newEditor = compositeRef.isNull();
if (newEditor) {
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment