package jetbrains.mps.vcs.suspicious; /*Generated by MPS */ import com.intellij.openapi.project.ProjectManager; import com.intellij.openapi.vfs.VirtualFileManager; import jetbrains.mps.ide.platform.watching.ReloadManagerComponent; import com.intellij.openapi.project.Project; import com.intellij.openapi.vcs.ProjectLevelVcsManager; import com.intellij.openapi.vfs.VirtualFileManagerListener; import jetbrains.mps.ide.platform.watching.ReloadListener; /** * Monitors and {@link jetbrains.mps.vcs.suspicious.PlatformActivityTracker#isProcessingAllowed() tells} if it's ok to perform our VCS operations (i.e. if no other backround platform VCS job is running and VFS is ready for action */ /*package*/ class PlatformActivityTracker { private final PlatformActivityTracker.BanVFMListener myVirtualFileManagerListener = new PlatformActivityTracker.BanVFMListener(); private final PlatformActivityTracker.BanReloadListener myReloadListener = new PlatformActivityTracker.BanReloadListener(); private final ProjectManager myProjectManager; private final VirtualFileManager myVirtualFileManager; private final ReloadManagerComponent myReloadManager; public PlatformActivityTracker(ProjectManager manager, VirtualFileManager virtualFileManager, ReloadManagerComponent reloadManager) { myProjectManager = manager; myVirtualFileManager = virtualFileManager; myReloadManager = reloadManager; } public void activate() { myReloadManager.addReloadListener(myReloadListener); myVirtualFileManager.addVirtualFileManagerListener(myVirtualFileManagerListener); } public void deactivate() { myReloadManager.removeReloadListener(myReloadListener); myVirtualFileManager.removeVirtualFileManagerListener(myVirtualFileManagerListener); } public boolean isProcessingAllowed() { for (Project p : myProjectManager.getOpenProjects()) { ProjectLevelVcsManager vcsMan = p.getComponent(ProjectLevelVcsManager.class); if (vcsMan.isBackgroundVcsOperationRunning()) { return false; } } return !(myVirtualFileManagerListener.isBanned()) && !(myReloadListener.isBanned()); } private static class BanVFMListener implements VirtualFileManagerListener { private int myVFMBan = 0; private BanVFMListener() { } @Override public void beforeRefreshStart(boolean async) { if (async) { return; } myVFMBan++; } @Override public void afterRefreshFinish(boolean async) { if (async) { return; } myVFMBan--; } public boolean isBanned() { return myVFMBan != 0; } } private static class BanReloadListener implements ReloadListener { private int myReloadBan = 0; private BanReloadListener() { } @Override public void reloadStarted() { myReloadBan++; } @Override public void reloadFinished() { myReloadBan--; } public boolean isBanned() { return myReloadBan != 0; } } }