Skip to content

Commit

Permalink
fix: Read access issue in refreshSemanticTokensForAllOpenedFiles
Browse files Browse the repository at this point in the history
Fixes #413

Signed-off-by: azerr <azerr@redhat.com>
  • Loading branch information
angelozerr authored and fbricon committed Jul 7, 2024
1 parent 4440c6f commit 00fc081
Showing 1 changed file with 27 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,13 @@
import com.google.gson.JsonObject;
import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.application.ReadAction;
import com.intellij.openapi.command.WriteCommandAction;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFile;
import com.intellij.util.concurrency.AppExecutorUtil;
import com.redhat.devtools.lsp4ij.LSPIJUtils;
import com.redhat.devtools.lsp4ij.LanguageServerWrapper;
import com.redhat.devtools.lsp4ij.ServerMessageHandler;
Expand All @@ -33,6 +35,7 @@

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.CompletableFuture;
import java.util.function.Consumer;

Expand Down Expand Up @@ -141,14 +144,18 @@ public CompletableFuture<Void> refreshInlayHints() {
}

private void refreshInlayHintsForAllOpenedFiles() {
for (var fileData : wrapper.getConnectedFiles()) {
VirtualFile file = fileData.getFile();
final PsiFile psiFile = LSPIJUtils.getPsiFile(file, project);
if (psiFile != null) {
Editor[] editors = LSPIJUtils.editorsForFile(file, getProject());
InlayHintsFactoryBridge.refreshInlayHints(psiFile, editors, true);
}
}
ReadAction.nonBlocking((Callable<Void>) () -> {
for (var fileData : wrapper.getConnectedFiles()) {
VirtualFile file = fileData.getFile();
final PsiFile psiFile = LSPIJUtils.getPsiFile(file, project);
if (psiFile != null) {
Editor[] editors = LSPIJUtils.editorsForFile(file, getProject());
InlayHintsFactoryBridge.refreshInlayHints(psiFile, editors, true);
}
}
return null;
}).coalesceBy(this)
.submit(AppExecutorUtil.getAppExecutorService());
}

@Override
Expand All @@ -162,14 +169,18 @@ public CompletableFuture<Void> refreshSemanticTokens() {
}

private void refreshSemanticTokensForAllOpenedFiles() {
for (var fileData : wrapper.getConnectedFiles()) {
VirtualFile file = fileData.getFile();
final PsiFile psiFile = LSPIJUtils.getPsiFile(file, project);
if (psiFile != null) {
// Should be enough?
DaemonCodeAnalyzer.getInstance(psiFile.getProject()).restart(psiFile);
}
}
ReadAction.nonBlocking((Callable<Void>) () -> {
for (var fileData : wrapper.getConnectedFiles()) {
VirtualFile file = fileData.getFile();
final PsiFile psiFile = LSPIJUtils.getPsiFile(file, project);
if (psiFile != null) {
// Should be enough?
DaemonCodeAnalyzer.getInstance(psiFile.getProject()).restart(psiFile);
}
}
return null;
}).coalesceBy(this)
.submit(AppExecutorUtil.getAppExecutorService());
}

@Override
Expand Down

0 comments on commit 00fc081

Please sign in to comment.