package jetbrains.mps.ide.migration.check; /*Generated by MPS */ import org.apache.log4j.Logger; import org.apache.log4j.LogManager; import com.intellij.openapi.project.Project; import jetbrains.mps.lang.migration.runtime.base.Problem; import jetbrains.mps.ide.findusages.model.SearchResult; import jetbrains.mps.ide.modelchecker.platform.actions.ModelCheckerIssue; import jetbrains.mps.internal.collections.runtime.Sequence; import jetbrains.mps.internal.collections.runtime.ISelector; import jetbrains.mps.internal.collections.runtime.IWhereFilter; import jetbrains.mps.ide.modelchecker.platform.actions.ModelCheckerViewer; import jetbrains.mps.ide.modelchecker.platform.actions.ModelCheckerTool; import jetbrains.mps.ide.findusages.model.SearchResults; import jetbrains.mps.internal.collections.runtime.IVisitor; import com.intellij.icons.AllIcons; import jetbrains.mps.baseLanguage.tuples.runtime.Tuples; import java.util.Set; import org.jetbrains.mps.openapi.model.SNode; import jetbrains.mps.internal.collections.runtime.ITranslator2; import jetbrains.mps.internal.collections.runtime.SetSequence; import jetbrains.mps.ide.findusages.view.UsagesViewTool; import org.jetbrains.mps.openapi.model.SModel; import org.jetbrains.mps.openapi.module.SModule; import org.apache.log4j.Level; public class MigrationOutputUtil { private static final Logger LOG = LogManager.getLogger(MigrationOutputUtil.class); public static void showProblems(final Project project, Iterable<Problem> problems) { Iterable<SearchResult<ModelCheckerIssue>> items = Sequence.fromIterable(problems).select(new ISelector<Problem, SearchResult<ModelCheckerIssue>>() { public SearchResult<ModelCheckerIssue> select(Problem p) { return new SearchResult<ModelCheckerIssue>(issueByProblem(p), p.getReason(), p.getCategory()); } }).where(new IWhereFilter<SearchResult<ModelCheckerIssue>>() { public boolean accept(SearchResult<ModelCheckerIssue> it) { return it != null; } }); if (Sequence.fromIterable(items).isEmpty()) { return; } ModelCheckerViewer v = new ModelCheckerViewer(project, false) { @Override protected void close() { ModelCheckerTool.getInstance(project).closeTab(this); super.close(); } }; final SearchResults<ModelCheckerIssue> result = new SearchResults<ModelCheckerIssue>(); Sequence.fromIterable(items).visitAll(new IVisitor<SearchResult<ModelCheckerIssue>>() { public void visit(SearchResult<ModelCheckerIssue> it) { result.add(it); } }); v.setSearchResults(result); ModelCheckerTool.getInstance(project).showTabWithResults(v, "Migration issues", AllIcons.Nodes.ModuleGroup); } public static void showNodes(final Project project, Tuples._2<String, Set<SNode>>... toShow) { final SearchResults sr = new SearchResults<SNode>(); Sequence.fromIterable(Sequence.fromArray(toShow)).translate(new ITranslator2<Tuples._2<String, Set<SNode>>, SearchResult<SNode>>() { public Iterable<SearchResult<SNode>> translate(final Tuples._2<String, Set<SNode>> cat) { return SetSequence.fromSet(cat._1()).select(new ISelector<SNode, SearchResult<SNode>>() { public SearchResult<SNode> select(SNode node) { return new SearchResult<SNode>(node, node, cat._0()); } }); } }).visitAll(new IVisitor<SearchResult<SNode>>() { public void visit(SearchResult<SNode> it) { sr.add(it); } }); project.getComponent(UsagesViewTool.class).show(sr, "No results to show"); } private static ModelCheckerIssue issueByProblem(Problem p) { Object r = p.getReason(); if (r instanceof SNode) { return new ModelCheckerIssue.NodeIssue(((SNode) r), p.getMessage(), null); } if (r instanceof SModel) { return new ModelCheckerIssue.ModelIssue(((SModel) r), p.getMessage(), null); } if (r instanceof SModule) { return new ModelCheckerIssue.ModuleIssue(p.getMessage(), null); } if (LOG.isEnabledFor(Level.ERROR)) { LOG.error("Unknown issue type: " + r.getClass().getName()); } return null; } }