WriteAccessStatus (@NotNull Document document, @Nullable Project project) { VirtualFile file = getInstance().getFile(document); if (project != null && file != null && file.isValid()) { if (file.getFileType().isBinary()) return WriteAccessStatus.NON_WRITABLE; ReadonlyStatusHandler.OperationStatus writableStatus = ReadonlyStatusHandler.getInstance(project).ensureFilesWritable(Collections.singletonList(file)); if (writableStatus.hasReadonlyFiles()) { return new WriteAccessStatus(writableStatus.getReadonlyFilesMessage(), writableStatus.getHyperlinkListener()); } assert file.isWritable() : file; } if (document.isWritable()) { return WriteAccessStatus.WRITABLE; } document.fireReadOnlyModificationAttempt(); return WriteAccessStatus.NON_WRITABLE; }