package jetbrains.mps.vcs.platform.integration; /*Generated by MPS */ import jetbrains.mps.ide.editor.warningPanel.EditorWarningsProvider; import org.jetbrains.annotations.Nullable; import jetbrains.mps.ide.editor.warningPanel.WarningPanel; import org.jetbrains.annotations.NotNull; import org.jetbrains.mps.openapi.model.SNode; import com.intellij.openapi.project.Project; import org.jetbrains.mps.openapi.model.SModel; import org.jetbrains.mps.openapi.module.SModule; import jetbrains.mps.ide.project.ProjectHelper; import java.util.List; import com.intellij.openapi.vfs.VirtualFile; import jetbrains.mps.vcs.platform.util.ConflictsUtil; import jetbrains.mps.internal.collections.runtime.ListSequence; import jetbrains.mps.util.NameUtil; import com.intellij.openapi.vcs.AbstractVcsHelper; import jetbrains.mps.smodel.Language; import jetbrains.mps.project.Solution; import jetbrains.mps.smodel.Generator; public class ConflictingModelsWarnings implements EditorWarningsProvider { public ConflictingModelsWarnings() { } @Nullable @Override public WarningPanel getWarningPanel(@NotNull SNode node, @NotNull final Project project) { SModel md = node.getModel(); if (md == null) { return null; } SModule module = md.getModule(); jetbrains.mps.project.Project mpsProject = ProjectHelper.fromIdeaProject(project); if (mpsProject == null || !(mpsProject.getProjectModulesWithGenerators().contains(module))) { return null; } final List<VirtualFile> modelFiles = ConflictsUtil.getConflictingModelFiles(md, project); final List<VirtualFile> moduleFiles = ConflictsUtil.getConflictingModuleFiles(check_bmsafs_a0a6a2(md), project); if (ListSequence.fromList(moduleFiles).isNotEmpty()) { String type = getModuleType(md.getModule()); assert type != null; if (ListSequence.fromList(modelFiles).isNotEmpty()) { // conflicting model and module return new WarningPanel(this, String.format("You are viewing model which is not merged yet. It is owned by %s, which is merged neither." + " You need to merge %s and model (this order is important).", type, type), String.format("Merge %s and Model", NameUtil.capitalize(type)), new Runnable() { public void run() { AbstractVcsHelper.getInstance(project).showMergeDialog(ListSequence.fromList(moduleFiles).addSequence(ListSequence.fromList(modelFiles))); } }); } else { // conflicting module return new WarningPanel(this, String.format("You are viewing model owned by %s which is not merged yet. You need to merge it before editing.", type), "Merge " + NameUtil.capitalize(type), new Runnable() { public void run() { AbstractVcsHelper.getInstance(project).showMergeDialog(moduleFiles); } }); } } else { if (ListSequence.fromList(modelFiles).isNotEmpty()) { // conflicting model return new WarningPanel(this, "You are viewing model which is not merged yet. You may see very old version of it." + " You need to merge it before editing, otherwise your changes will be lost.", "Merge Model", new Runnable() { public void run() { AbstractVcsHelper.getInstance(project).showMergeDialog(modelFiles); } }); } else { return null; } } } @Nullable private static String getModuleType(@NotNull SModule module) { if (module instanceof Language) { return "language"; } else if (module instanceof Solution) { return "solution"; } else if (module instanceof Generator) { return "generator"; } return null; } private static SModule check_bmsafs_a0a6a2(SModel checkedDotOperand) { if (null != checkedDotOperand) { return checkedDotOperand.getModule(); } return null; } }