From 1a7b35b71802cb61a5d4558df709f2ea6545f6ae Mon Sep 17 00:00:00 2001 From: peter Date: Mon, 12 Jun 2017 19:54:49 +0200 Subject: [PATCH] MemoryDiskConflictResolver: show the causing trace in tests --- .../fileEditor/impl/MemoryDiskConflictResolver.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/MemoryDiskConflictResolver.java b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/MemoryDiskConflictResolver.java index 48ec4fa8297c..f89efbffc823 100644 --- a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/MemoryDiskConflictResolver.java +++ b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/MemoryDiskConflictResolver.java @@ -49,6 +49,7 @@ import java.util.Set; class MemoryDiskConflictResolver { private static final Logger LOG = Logger.getInstance("#com.intellij.openapi.fileEditor.impl.MemoryDiskConflictResolver"); private final Set myConflicts = new LinkedHashSet<>(); + private Throwable myConflictAppeared; void beforeContentChange(@NotNull VirtualFileEvent event) { if (event.isFromSave()) return; @@ -66,6 +67,9 @@ class MemoryDiskConflictResolver { LOG.info(" documentStamp:" + documentStamp); LOG.info(" oldFileStamp:" + oldFileStamp); if (myConflicts.isEmpty()) { + if (ApplicationManager.getApplication().isUnitTestMode()) { + myConflictAppeared = new Throwable(); + } ApplicationManager.getApplication().invokeLater(this::processConflicts); } myConflicts.add(file); @@ -86,9 +90,16 @@ class MemoryDiskConflictResolver { FileDocumentManager.getInstance().reloadFromDisk(document); } } + myConflictAppeared = null; } boolean askReloadFromDisk(VirtualFile file, Document document) { + if (myConflictAppeared != null) { + Throwable trace = myConflictAppeared; + myConflictAppeared = null; + throw new IllegalStateException("Unexpected memory-disk conflict in tests, please use FileDocumentManager#reloadFromDisk or avoid VFS refresh", trace); + } + String message = UIBundle.message("file.cache.conflict.message.text", file.getPresentableUrl()); final DialogBuilder builder = new DialogBuilder();