json schema: improve json files refresh after json schema editing - review comment for WEB-21418 JSON Schema: if file under the schema is placed in the split Editor tab update comes later than should be

This commit is contained in:
irengrig
2016-11-14 12:35:02 +01:00
parent a4408fd41b
commit 4e3281f641
2 changed files with 24 additions and 22 deletions
@@ -18,16 +18,16 @@ package com.jetbrains.jsonSchema;
import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer;
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.ex.EditorEx;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.util.ZipperUpdater;
import com.intellij.openapi.util.registry.Registry;
import com.intellij.openapi.vfs.*;
import com.intellij.openapi.vfs.impl.BulkVirtualFileListenerAdapter;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiManager;
import com.intellij.psi.search.FileTypeIndex;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.util.Alarm;
import com.intellij.util.containers.ContainerUtil;
import com.jetbrains.jsonSchema.impl.JsonSchemaServiceImpl;
@@ -53,23 +53,29 @@ public class JsonSchemaVfsListener extends BulkVirtualFileListenerAdapter {
if (scope.isEmpty()) return;
final DaemonCodeAnalyzer analyzer = DaemonCodeAnalyzer.getInstance(project);
ApplicationManager.getApplication().runReadAction(() -> {
FileTypeIndex.processFiles(JsonFileType.INSTANCE, jsonFile -> {
final Collection<Pair<VirtualFile, String>> collection = myService.getSchemaFilesByFile(jsonFile);
if (collection != null && !collection.isEmpty()) {
for (Pair<VirtualFile, String> pair : collection) {
if (scope.contains(pair.getFirst())) {
final PsiFile psiFile = PsiManager.getInstance(project).findFile(jsonFile);
if (psiFile != null) {
analyzer.restart(psiFile);
final PsiManager psiManager = PsiManager.getInstance(project);
final Editor[] editors = EditorFactory.getInstance().getAllEditors();
for (Editor editor : editors) {
if (editor instanceof EditorEx) {
final VirtualFile file = ((EditorEx)editor).getVirtualFile();
if (JsonFileType.INSTANCE.equals(file.getFileType())) {
final Collection<Pair<VirtualFile, String>> collection = myService.getSchemaFilesByFile(file);
if (collection != null && !collection.isEmpty()) {
for (Pair<VirtualFile, String> pair : collection) {
if (scope.contains(pair.getFirst())) {
ApplicationManager.getApplication().runReadAction(() -> {
final PsiFile psiFile = psiManager.findFile(file);
if (psiFile != null) {
analyzer.restart(psiFile);
}
});
break;
}
return true;
}
}
}
return true;
}, GlobalSearchScope.projectScope(project));
});
}
}
};
@Override
@@ -105,10 +111,8 @@ public class JsonSchemaVfsListener extends BulkVirtualFileListenerAdapter {
private void onFileChange(@NotNull final VirtualFile schemaFile) {
if (myMappingsProjectConfiguration.isRegisteredSchemaFile(schemaFile)) {
myService.dropProviderFromCache(schemaFile);
if (Registry.is("json.schema.fast.annotation.update")) {
myDirtySchemas.add(schemaFile);
myUpdater.queue(myRunnable);
}
myDirtySchemas.add(schemaFile);
myUpdater.queue(myRunnable);
}
}
});
@@ -913,5 +913,3 @@ build.manager.async.fs.events.description=Experimental: TranslatingCompilerFiles
batch.inspections.use.psi.as.ref.table.key=false
batch.inspections.use.psi.as.ref.table.key.description=Use PsiElement as key for RefManager's table
json.schema.fast.annotation.update=false
json.schema.fast.annotation.update.description=Restart highlighting for all json files matching json schema on json schema fiel change