package jetbrains.mps.vcs.changesmanager;
/*Generated by MPS */
import com.intellij.openapi.vcs.impl.FileStatusProvider;
import jetbrains.mps.project.MPSProject;
import org.jetbrains.annotations.NotNull;
import com.intellij.openapi.vcs.FileStatus;
import com.intellij.openapi.vfs.VirtualFile;
import jetbrains.mps.nodefs.MPSNodeVirtualFile;
import jetbrains.mps.ide.ThreadUtils;
import jetbrains.mps.smodel.ModelAccessHelper;
import jetbrains.mps.util.Computable;
import org.jetbrains.mps.openapi.model.SNode;
import jetbrains.mps.ide.editor.MPSEditorUtil;
import org.jetbrains.mps.openapi.model.SNodeUtil;
import com.intellij.openapi.editor.Document;
import com.intellij.util.ThreeState;
public class NodeFileStatusProvider implements FileStatusProvider {
private MPSProject myProject;
private NodeFileStatusMapping myMapping;
public NodeFileStatusProvider(@NotNull MPSProject project, @NotNull NodeFileStatusMapping mapping) {
myProject = project;
myMapping = mapping;
}
@Override
public FileStatus getFileStatus(VirtualFile file) {
if (!(file instanceof MPSNodeVirtualFile)) {
return null;
}
if (!(ThreadUtils.isInEDT())) {
return FileStatus.NOT_CHANGED;
}
final MPSNodeVirtualFile nodeFile = (MPSNodeVirtualFile) file;
return new ModelAccessHelper(myProject.getModelAccess()).runReadAction(new Computable<FileStatus>() {
public FileStatus compute() {
SNode root = MPSEditorUtil.getCurrentEditedNode(myProject.getProject(), nodeFile);
if (root == null) {
root = check_8p3pkg_a0a0b0a0a0a0f0d(nodeFile.getNode());
}
if (root == null || !(SNodeUtil.isAccessible(root, myProject.getRepository()))) {
return null;
}
return myMapping.getStatus(root);
}
});
}
@Override
public void refreshFileStatusFromDocument(VirtualFile file, Document document) {
}
@Override
public ThreeState getNotChangedDirectoryParentingStatus(VirtualFile file) {
return ThreeState.NO;
}
private static SNode check_8p3pkg_a0a0b0a0a0a0f0d(SNode checkedDotOperand) {
if (null != checkedDotOperand) {
return checkedDotOperand.getContainingRoot();
}
return null;
}
}