package jetbrains.mps.vcs.integration;
/*Generated by MPS */
import com.intellij.openapi.components.AbstractProjectComponent;
import com.intellij.openapi.vcs.ProjectLevelVcsManager;
import com.intellij.openapi.vcs.FileStatusManager;
import com.intellij.openapi.vcs.changes.VcsDirtyScopeManager;
import jetbrains.mps.project.MPSProject;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFileManager;
import com.intellij.openapi.vfs.VirtualFileEvent;
import jetbrains.mps.ide.vfs.IdeaFileSystem;
import com.intellij.openapi.vfs.VirtualFile;
import jetbrains.mps.smodel.SModelFileTracker;
import jetbrains.mps.ide.vfs.VirtualFileUtils;
import com.intellij.openapi.vcs.merge.MergeProvider;
import com.intellij.openapi.vcs.FileStatus;
import com.intellij.openapi.vfs.VirtualFileAdapter;
import com.intellij.openapi.vcs.AbstractVcs;
public class GeneratedFileConflictResolving extends AbstractProjectComponent {
private final ProjectLevelVcsManager myVcsManager;
private final FileStatusManager myFileStatusManager;
private final VcsDirtyScopeManager myDirtyScopeManager;
private final MPSProject myMpsProject;
private final GeneratedFileConflictResolving.MyFileListener myFileListener = new GeneratedFileConflictResolving.MyFileListener();
public GeneratedFileConflictResolving(Project project, MPSProject mpsProject, ProjectLevelVcsManager vcsManager, FileStatusManager fileStatusManager, VcsDirtyScopeManager dirtyScopeManager) {
super(project);
myVcsManager = vcsManager;
myFileStatusManager = fileStatusManager;
myDirtyScopeManager = dirtyScopeManager;
myMpsProject = mpsProject;
}
@Override
public void initComponent() {
VirtualFileManager.getInstance().addVirtualFileListener(myFileListener);
}
@Override
public void disposeComponent() {
VirtualFileManager.getInstance().removeVirtualFileListener(myFileListener);
}
private void resolveIfNeeded(VirtualFileEvent e) {
if (e.getRequestor() instanceof IdeaFileSystem) {
VirtualFile file = e.getFile();
if (SModelFileTracker.getInstance(myMpsProject.getRepository()).findModel(VirtualFileUtils.toIFile(file)) != null) {
return;
}
MergeProvider mergeProvider = check_tqtyvq_a0d0a0j(myVcsManager.getVcsFor(file));
if (mergeProvider != null) {
FileStatus status = myFileStatusManager.getStatus(file);
if (status == FileStatus.MERGED_WITH_CONFLICTS || status == FileStatus.MERGED_WITH_BOTH_CONFLICTS || status == FileStatus.MERGED_WITH_PROPERTY_CONFLICTS) {
mergeProvider.conflictResolvedForFile(file);
myDirtyScopeManager.fileDirty(file);
}
}
}
}
private class MyFileListener extends VirtualFileAdapter {
public MyFileListener() {
}
@Override
public void contentsChanged(VirtualFileEvent event) {
resolveIfNeeded(event);
}
@Override
public void beforeFileDeletion(VirtualFileEvent event) {
resolveIfNeeded(event);
}
}
private static MergeProvider check_tqtyvq_a0d0a0j(AbstractVcs checkedDotOperand) {
if (null != checkedDotOperand) {
return checkedDotOperand.getMergeProvider();
}
return null;
}
}