FileStatus (@NotNull FilePath path, @Nullable VirtualFile file) { VcsRoot vcsRoot = file != null ? ProjectLevelVcsManager.getInstance(myProject).getVcsRootObjectFor(file) : ProjectLevelVcsManager.getInstance(myProject).getVcsRootObjectFor(path); if (vcsRoot == null) return FileStatus.NOT_CHANGED; return ReadAction.compute(() -> { synchronized (myDataLock) { if (myComposite.getUnversionedFileHolder().containsFile(path, vcsRoot)) return FileStatus.UNKNOWN; if (file != null && myComposite.getModifiedWithoutEditingFileHolder().containsFile(file)) return FileStatus.HIJACKED; if (myComposite.getIgnoredFileHolder().containsFile(path, vcsRoot)) return FileStatus.IGNORED; FileStatus status = ObjectUtils.notNull(myWorker.getStatus(path), FileStatus.NOT_CHANGED); if (file != null && FileStatus.NOT_CHANGED.equals(status)) { boolean switched = myComposite.getSwitchedFileHolder().containsFile(file); if (switched) return FileStatus.SWITCHED; } return status; } }); }