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; } }