mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
run (before)documentChanged() at the regular priority to give user listeners access to the various subsystems (like folding, caret) which are updated at lower priorities
This commit is contained in:
@@ -12,6 +12,7 @@ import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
import com.intellij.openapi.editor.DocumentRunnable;
|
||||
import com.intellij.openapi.editor.event.DocumentEvent;
|
||||
import com.intellij.openapi.editor.event.DocumentListener;
|
||||
import com.intellij.openapi.editor.ex.DocumentEx;
|
||||
import com.intellij.openapi.editor.ex.PrioritizedInternalDocumentListener;
|
||||
import com.intellij.openapi.editor.impl.DocumentImpl;
|
||||
@@ -45,7 +46,7 @@ import javax.swing.*;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ConcurrentMap;
|
||||
|
||||
public abstract class PsiDocumentManagerBase extends PsiDocumentManager implements PrioritizedInternalDocumentListener, Disposable {
|
||||
public abstract class PsiDocumentManagerBase extends PsiDocumentManager implements DocumentListener, Disposable {
|
||||
static final Logger LOG = Logger.getInstance("#com.intellij.psi.impl.PsiDocumentManagerImpl");
|
||||
private static final Key<Document> HARD_REF_TO_DOCUMENT = Key.create("HARD_REFERENCE_TO_DOCUMENT");
|
||||
private static final Key<List<Runnable>> ACTION_AFTER_COMMIT = Key.create("ACTION_AFTER_COMMIT");
|
||||
@@ -74,12 +75,8 @@ public abstract class PsiDocumentManagerBase extends PsiDocumentManager implemen
|
||||
mySynchronizer = new PsiToDocumentSynchronizer(this, bus);
|
||||
myPsiManager.addPsiTreeChangeListener(mySynchronizer);
|
||||
|
||||
bus.connect(this).subscribe(PsiDocumentTransactionListener.TOPIC, new PsiDocumentTransactionListener() {
|
||||
@Override
|
||||
public void transactionStarted(@NotNull Document document, @NotNull PsiFile file) {
|
||||
myUncommittedDocuments.remove(document);
|
||||
}
|
||||
});
|
||||
bus.connect(this).subscribe(PsiDocumentTransactionListener.TOPIC,
|
||||
(document, file) -> myUncommittedDocuments.remove(document));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -806,11 +803,6 @@ public abstract class PsiDocumentManagerBase extends PsiDocumentManager implemen
|
||||
|
||||
final Document document = event.getDocument();
|
||||
|
||||
UncommittedInfo info = myUncommittedInfos.get(document);
|
||||
if (info != null) {
|
||||
info.myEvents.add(event);
|
||||
}
|
||||
|
||||
VirtualFile virtualFile = FileDocumentManager.getInstance().getFile(document);
|
||||
boolean isRelevant = virtualFile != null && isRelevant(virtualFile);
|
||||
|
||||
@@ -859,16 +851,26 @@ public abstract class PsiDocumentManagerBase extends PsiDocumentManager implemen
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getPriority() {
|
||||
return EditorDocumentPriorities.RANGE_MARKER;
|
||||
}
|
||||
class PriorityEventCollector implements PrioritizedInternalDocumentListener {
|
||||
@Override
|
||||
public int getPriority() {
|
||||
return EditorDocumentPriorities.RANGE_MARKER;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void moveTextHappened(@NotNull Document document, int start, int end, int base) {
|
||||
UncommittedInfo info = myUncommittedInfos.get(document);
|
||||
if (info != null) {
|
||||
info.myEvents.add(new RetargetRangeMarkers(document, start, end, base));
|
||||
@Override
|
||||
public void moveTextHappened(@NotNull Document document, int start, int end, int base) {
|
||||
UncommittedInfo info = myUncommittedInfos.get(document);
|
||||
if (info != null) {
|
||||
info.myEvents.add(new RetargetRangeMarkers(document, start, end, base));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void documentChanged(@NotNull DocumentEvent event) {
|
||||
UncommittedInfo info = myUncommittedInfos.get(event.getDocument());
|
||||
if (info != null) {
|
||||
info.myEvents.add(event);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -885,13 +887,10 @@ public abstract class PsiDocumentManagerBase extends PsiDocumentManager implemen
|
||||
myUncommittedDocuments.remove(document);
|
||||
|
||||
VirtualFile virtualFile = FileDocumentManager.getInstance().getFile(document);
|
||||
if (virtualFile == null || !FileIndexFacade.getInstance(myProject).isInContent(virtualFile)) {
|
||||
runAfterCommitActions(document);
|
||||
return;
|
||||
}
|
||||
|
||||
final PsiFile psiFile = getPsiFile(document);
|
||||
if (psiFile == null) {
|
||||
final PsiFile psiFile;
|
||||
if (virtualFile == null ||
|
||||
!FileIndexFacade.getInstance(myProject).isInContent(virtualFile) ||
|
||||
(psiFile = getPsiFile(document)) == null) {
|
||||
runAfterCommitActions(document);
|
||||
return;
|
||||
}
|
||||
|
||||
+1
-9
@@ -12,7 +12,6 @@ import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.application.ModalityState;
|
||||
import com.intellij.openapi.application.ex.ApplicationManagerEx;
|
||||
import com.intellij.openapi.application.impl.ApplicationImpl;
|
||||
import com.intellij.openapi.editor.CaretModel;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.editor.LogicalPosition;
|
||||
@@ -103,14 +102,7 @@ public class BraceHighlightingHandler {
|
||||
// any request to the UI component need to be done from EDT
|
||||
final ModalityState modalityState = ModalityState.stateForComponent(editor.getComponent());
|
||||
|
||||
CaretModel model = editor.getCaretModel();
|
||||
if (!model.isUpToDate()) {
|
||||
// happened to be called from typed handler
|
||||
// restart to avoid dreaded "Caret model is in its update process. All requests are illegal at this point."
|
||||
restartLater(editor, modalityState, alarm, processor);
|
||||
return;
|
||||
}
|
||||
final int offset = model.getOffset();
|
||||
final int offset = editor.getCaretModel().getOffset();
|
||||
|
||||
ApplicationManager.getApplication().executeOnPooledThread(() -> {
|
||||
boolean success = ApplicationManagerEx.getApplicationEx().tryRunReadAction(() -> {
|
||||
|
||||
@@ -58,7 +58,8 @@ public class PsiDocumentManagerImpl extends PsiDocumentManagerBase {
|
||||
@NotNull final DocumentCommitProcessor documentCommitThread) {
|
||||
super(project, psiManager, bus, documentCommitThread);
|
||||
myDocumentCommitThread = documentCommitThread;
|
||||
((EditorEventMulticasterEx)editorFactory.getEventMulticaster()).addPrioritizedDocumentListener(this, project);
|
||||
editorFactory.getEventMulticaster().addDocumentListener(this, project);
|
||||
((EditorEventMulticasterEx)editorFactory.getEventMulticaster()).addPrioritizedDocumentListener(new PriorityEventCollector(), project);
|
||||
MessageBusConnection connection = bus.connect(this);
|
||||
connection.subscribe(AppTopics.FILE_DOCUMENT_SYNC, new FileDocumentManagerListener() {
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user