From b4b729fbe466175c75062b37d333c80ebf628ed3 Mon Sep 17 00:00:00 2001 From: Aleksey Pivovarov Date: Thu, 24 Sep 2015 14:31:49 +0300 Subject: [PATCH] diff: EA-73535 - assert: FileManagerImpl.findFile call isValid() with ReadLock --- .../tools/binary/TwosideBinaryDiffViewer.java | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/platform/diff-impl/src/com/intellij/diff/tools/binary/TwosideBinaryDiffViewer.java b/platform/diff-impl/src/com/intellij/diff/tools/binary/TwosideBinaryDiffViewer.java index 2722dcb0c0dd..ee81becfa545 100644 --- a/platform/diff-impl/src/com/intellij/diff/tools/binary/TwosideBinaryDiffViewer.java +++ b/platform/diff-impl/src/com/intellij/diff/tools/binary/TwosideBinaryDiffViewer.java @@ -76,29 +76,30 @@ public class TwosideBinaryDiffViewer extends TwosideDiffViewer() { + final JComponent notification = ApplicationManager.getApplication().runReadAction(new Computable() { @Override - public Boolean compute() { + public JComponent compute() { + if (!file1.isValid() || !file2.isValid()) { + return DiffNotifications.createError(); + } + try { // we can't use getInputStream() here because we can't restore BOM marker // (getBom() can return null for binary files, while getInputStream() strips BOM for all files). // It can be made for files from VFS that implements FileSystemInterface though. byte[] bytes1 = file1.contentsToByteArray(); byte[] bytes2 = file2.contentsToByteArray(); - return Arrays.equals(bytes1, bytes2); + return Arrays.equals(bytes1, bytes2) ? DiffNotifications.createEqualContents() : null; } catch (IOException e) { LOG.warn(e); - return false; + return null; } } }); - return applyNotification(equal ? DiffNotifications.createEqualContents(): null); + return applyNotification(notification); } catch (ProcessCanceledException e) { throw e;