Skip to content
Snippets Groups Projects
Commit 612d6bf5 authored by Johannes Mey's avatar Johannes Mey
Browse files

do not refresh during path resolution while holding read lock

parent 221e6182
No related branches found
No related tags found
1 merge request!7Resolve "IDE Exception"
Pipeline #12025 passed
package org.jastadd.tooling.java; package org.jastadd.tooling.java;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ex.ApplicationEx;
import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.Document;
import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiElement; import com.intellij.psi.PsiElement;
import com.intellij.util.ui.EDT;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.nio.file.Paths; import java.nio.file.Paths;
...@@ -33,8 +36,11 @@ public class GeneratedCodeUtil { ...@@ -33,8 +36,11 @@ public class GeneratedCodeUtil {
} }
String path = jastAddFileLocation.substring(0, pos); String path = jastAddFileLocation.substring(0, pos);
System.out.println(path); // the method performing the refresh is not allowed when the following condition is not met
VirtualFile vFile = LocalFileSystem.getInstance().refreshAndFindFileByPath(path); // see com.intellij.openapi.vfs.newvfs.RefreshQueueImpl:execute
VirtualFile vFile = ((ApplicationEx) ApplicationManager.getApplication()).holdsReadLock() || EDT.isCurrentThreadEdt()
? LocalFileSystem.getInstance().findFileByPath(path)
: LocalFileSystem.getInstance().refreshAndFindFileByPath(path);
int line; int line;
try { try {
...@@ -45,7 +51,6 @@ public class GeneratedCodeUtil { ...@@ -45,7 +51,6 @@ public class GeneratedCodeUtil {
if (vFile == null) { if (vFile == null) {
return Paths.get(path).getFileName() + (line == 0 ? "" : ":" + line); return Paths.get(path).getFileName() + (line == 0 ? "" : ":" + line);
} }
System.out.println(line);
Document document = FileDocumentManager.getInstance().getDocument(vFile); Document document = FileDocumentManager.getInstance().getDocument(vFile);
if (document == null) { if (document == null) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment