mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
json schema change listeners: psi changes listener should be used instead of document changes listener: we need updated psi to apply changes, document events are too early notifications for that
This commit is contained in:
@@ -20,10 +20,7 @@ import com.intellij.json.JsonFileType;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.editor.EditorFactory;
|
||||
import com.intellij.openapi.editor.event.DocumentAdapter;
|
||||
import com.intellij.openapi.editor.event.DocumentEvent;
|
||||
import com.intellij.openapi.editor.ex.EditorEx;
|
||||
import com.intellij.openapi.fileEditor.FileDocumentManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Pair;
|
||||
import com.intellij.openapi.util.ZipperUpdater;
|
||||
@@ -33,10 +30,12 @@ import com.intellij.openapi.vfs.VirtualFileManager;
|
||||
import com.intellij.openapi.vfs.impl.BulkVirtualFileListenerAdapter;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.PsiManager;
|
||||
import com.intellij.psi.PsiTreeAnyChangeAbstractAdapter;
|
||||
import com.intellij.util.Alarm;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.jetbrains.jsonSchema.impl.JsonSchemaServiceEx;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
@@ -50,7 +49,12 @@ public class JsonSchemaVfsListener extends BulkVirtualFileListenerAdapter {
|
||||
final MyUpdater updater = new MyUpdater(project, service);
|
||||
ApplicationManager.getApplication().getMessageBus().connect(project)
|
||||
.subscribe(VirtualFileManager.VFS_CHANGES, new JsonSchemaVfsListener(updater));
|
||||
EditorFactory.getInstance().getEventMulticaster().addDocumentListener(new MyDocumentListener(updater), project);
|
||||
PsiManager.getInstance(project).addPsiTreeChangeListener(new PsiTreeAnyChangeAbstractAdapter() {
|
||||
@Override
|
||||
protected void onChange(@Nullable PsiFile file) {
|
||||
if (file != null) updater.onFileChange(file.getViewProvider().getVirtualFile());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private JsonSchemaVfsListener(@NotNull MyUpdater updater) {
|
||||
@@ -68,20 +72,6 @@ public class JsonSchemaVfsListener extends BulkVirtualFileListenerAdapter {
|
||||
});
|
||||
}
|
||||
|
||||
private static class MyDocumentListener extends DocumentAdapter {
|
||||
private final MyUpdater myUpdater;
|
||||
|
||||
private MyDocumentListener(MyUpdater updater) {
|
||||
myUpdater = updater;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void documentChanged(DocumentEvent e) {
|
||||
final VirtualFile file = FileDocumentManager.getInstance().getFile(e.getDocument());
|
||||
if (file != null) myUpdater.onFileChange(file);
|
||||
}
|
||||
}
|
||||
|
||||
private static class MyUpdater {
|
||||
@NotNull private final JsonSchemaServiceEx myService;
|
||||
private JsonSchemaMappingsProjectConfiguration myMappingsProjectConfiguration;
|
||||
|
||||
Reference in New Issue
Block a user