mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[vfs] support refreshing virtual files by NIO Paths
GitOrigin-RevId: 33aaf8207fccdb2270e5952bad9ee38d2338d314
This commit is contained in:
committed by
intellij-monorepo-bot
parent
6647f4b467
commit
833797d238
@@ -59,10 +59,10 @@ public abstract class LocalFileSystem extends NewVirtualFileSystem {
|
||||
}
|
||||
|
||||
/**
|
||||
* See {@link #refreshIoFiles(Iterable, boolean, boolean, Runnable)}.
|
||||
* See {@link #refreshNioFiles(Iterable, boolean, boolean, Runnable)}.
|
||||
*/
|
||||
public final void refreshNioFiles(@NotNull Iterable<? extends Path> files) {
|
||||
refreshIoFiles(ContainerUtil.map(files, Path::toFile), false, false, null);
|
||||
refreshNioFiles(files, false, false, null);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -72,6 +72,8 @@ public abstract class LocalFileSystem extends NewVirtualFileSystem {
|
||||
*/
|
||||
public abstract void refreshIoFiles(@NotNull Iterable<? extends File> files, boolean async, boolean recursive, @Nullable Runnable onFinish);
|
||||
|
||||
public abstract void refreshNioFiles(@NotNull Iterable<? extends Path> files, boolean async, boolean recursive, @Nullable Runnable onFinish);
|
||||
|
||||
/**
|
||||
* Performs a non-recursive synchronous refresh of specified files.
|
||||
*/
|
||||
|
||||
+3
-2
@@ -22,6 +22,7 @@ import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.util.LocalTimeCounter.currentTime
|
||||
import org.jetbrains.annotations.ApiStatus
|
||||
import java.io.File
|
||||
import java.nio.file.Path
|
||||
import java.util.concurrent.Executor
|
||||
import java.util.concurrent.atomic.AtomicReference
|
||||
|
||||
@@ -144,8 +145,8 @@ class ProjectSettingsTracker(
|
||||
settingsProvider.invalidate()
|
||||
settingsProvider.supply({ settingsPaths ->
|
||||
val localFileSystem = LocalFileSystem.getInstance()
|
||||
val settingsFiles = settingsPaths.map { File(it) }
|
||||
localFileSystem.refreshIoFiles(settingsFiles, projectTracker.isAsyncChangesProcessing, false) {
|
||||
val settingsFiles = settingsPaths.map { Path.of(it) }
|
||||
localFileSystem.refreshNioFiles(settingsFiles, projectTracker.isAsyncChangesProcessing, false) {
|
||||
callback(settingsPaths)
|
||||
}
|
||||
}, parentDisposable)
|
||||
|
||||
+19
-11
@@ -25,6 +25,7 @@ import com.intellij.util.ThrowableConsumer;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.io.PreemptiveSafeFileOutputStream;
|
||||
import com.intellij.util.io.SafeFileOutputStream;
|
||||
import one.util.streamex.StreamEx;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.annotations.TestOnly;
|
||||
@@ -33,7 +34,10 @@ import java.io.*;
|
||||
import java.nio.file.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
/**
|
||||
* @author Dmitry Avdeev
|
||||
@@ -181,6 +185,20 @@ public abstract class LocalFileSystemBase extends LocalFileSystem {
|
||||
|
||||
@Override
|
||||
public void refreshIoFiles(@NotNull Iterable<? extends File> files, boolean async, boolean recursive, @Nullable Runnable onFinish) {
|
||||
Stream<VirtualFile> iterator = StreamEx.of(files.iterator()).map(f -> refreshAndFindFileByIoFile(f));
|
||||
refreshFiles(iterator, async, recursive, onFinish);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void refreshNioFiles(@NotNull Iterable<? extends Path> files,
|
||||
boolean async,
|
||||
boolean recursive,
|
||||
@Nullable Runnable onFinish) {
|
||||
Stream<VirtualFile> iterator = StreamEx.of(files.iterator()).map(f -> refreshAndFindFileByNioFile(f));
|
||||
refreshFiles(iterator, async, recursive, onFinish);
|
||||
}
|
||||
|
||||
private static void refreshFiles(@NotNull Stream<VirtualFile> files, boolean async, boolean recursive, @Nullable Runnable onFinish) {
|
||||
VirtualFileManagerEx manager = (VirtualFileManagerEx)VirtualFileManager.getInstance();
|
||||
|
||||
Application app = ApplicationManager.getApplication();
|
||||
@@ -188,23 +206,13 @@ public abstract class LocalFileSystemBase extends LocalFileSystem {
|
||||
if (fireCommonRefreshSession) manager.fireBeforeRefreshStart(false);
|
||||
|
||||
try {
|
||||
List<VirtualFile> filesToRefresh = new ArrayList<>();
|
||||
|
||||
for (File file : files) {
|
||||
VirtualFile virtualFile = refreshAndFindFileByIoFile(file);
|
||||
if (virtualFile != null) {
|
||||
filesToRefresh.add(virtualFile);
|
||||
}
|
||||
}
|
||||
|
||||
RefreshQueue.getInstance().refresh(async, recursive, onFinish, filesToRefresh);
|
||||
RefreshQueue.getInstance().refresh(async, recursive, onFinish, files.filter(f -> f != null).collect(Collectors.toList()));
|
||||
}
|
||||
finally {
|
||||
if (fireCommonRefreshSession) manager.fireAfterRefreshFinish(false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void refreshFiles(@NotNull Iterable<? extends VirtualFile> files, boolean async, boolean recursive, @Nullable Runnable onFinish) {
|
||||
RefreshQueue.getInstance().refresh(async, recursive, onFinish, ContainerUtil.toCollection(files));
|
||||
|
||||
@@ -13,6 +13,7 @@ import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.nio.file.Path;
|
||||
import java.util.Collection;
|
||||
import java.util.Set;
|
||||
|
||||
@@ -22,6 +23,9 @@ public class MockLocalFileSystem extends LocalFileSystem {
|
||||
@Override
|
||||
public void refreshIoFiles(@NotNull Iterable<? extends File> files, boolean async, boolean recursive, @Nullable Runnable onFinish) { }
|
||||
|
||||
@Override
|
||||
public void refreshNioFiles(@NotNull Iterable<? extends Path> files, boolean async, boolean recursive, @Nullable Runnable onFinish) { }
|
||||
|
||||
@Override
|
||||
public void refreshFiles(@NotNull Iterable<? extends VirtualFile> files, boolean async, boolean recursive, @Nullable Runnable onFinish) { }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user