package jetbrains.mps.vcs.actions; /*Generated by MPS */ import com.intellij.openapi.vcs.actions.AbstractVcsAction; import com.intellij.openapi.vcs.actions.VcsContext; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VirtualFile; import jetbrains.mps.ide.project.ProjectHelper; import jetbrains.mps.openapi.navigation.ProjectPaneNavigator; import jetbrains.mps.fileTypes.MPSFileTypesManager; import org.jetbrains.mps.openapi.model.SModelReference; import jetbrains.mps.smodel.ModelAccessHelper; import jetbrains.mps.util.Computable; import org.jetbrains.mps.openapi.model.SModel; import jetbrains.mps.smodel.SModelFileTracker; import jetbrains.mps.ide.vfs.VirtualFileUtils; import org.jetbrains.mps.openapi.module.SModuleReference; import org.jetbrains.mps.openapi.module.SModule; import jetbrains.mps.smodel.ModuleFileTracker; import com.intellij.openapi.actionSystem.Presentation; public class ShowInLogicalView extends AbstractVcsAction { public ShowInLogicalView() { } @Override protected void actionPerformed(VcsContext e) { final Project project = e.getProject(); final VirtualFile selectedFile = getSelectedFile(e); final jetbrains.mps.project.Project mpsProject = ProjectHelper.fromIdeaProject(project); if (selectedFile == null || mpsProject == null) { return; } ProjectPaneNavigator ppn = new ProjectPaneNavigator(mpsProject); if (MPSFileTypesManager.isModelFile(selectedFile)) { SModelReference model = new ModelAccessHelper(mpsProject.getModelAccess()).runReadAction(new Computable<SModelReference>() { @Override public SModelReference compute() { SModel m = SModelFileTracker.getInstance(mpsProject.getRepository()).findModel(VirtualFileUtils.toIFile(selectedFile)); return (m == null ? null : m.getReference()); } }); if (model != null) { ppn.select(model); } } else if (MPSFileTypesManager.isModuleFile(selectedFile)) { // FIXME why on earth we obtain model access here? ProjectPaneSelectInTarget does the same without model access. SModuleReference module = new ModelAccessHelper(mpsProject.getModelAccess()).runReadAction(new Computable<SModuleReference>() { @Override public SModuleReference compute() { SModule m = ModuleFileTracker.getInstance(mpsProject.getRepository()).getModuleByFile(VirtualFileUtils.toIFile(selectedFile)); return (m == null ? null : m.getModuleReference()); } }); if (module != null) { // I have no idea why we focus module only, and do not focus on models, but it's the way it used to be for years ppn.shallFocus(true); ppn.select(module); } } } private VirtualFile getSelectedFile(VcsContext e) { VirtualFile[] selectedFiles = e.getSelectedFiles(); if (selectedFiles.length == 0) { return null; } return selectedFiles[0]; } @Override protected void update(VcsContext vcsContext, Presentation presentation) { VirtualFile selectedFile = getSelectedFile(vcsContext); presentation.setEnabled(MPSFileTypesManager.isModelFile(selectedFile) || MPSFileTypesManager.isModuleFile(selectedFile)); } }