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:
irengrig
2017-03-28 09:50:43 +02:00
parent f2444b92ac
commit 95ccefcaff
@@ -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;