package jetbrains.mps.ide.modelchecker.platform.actions; /*Generated by MPS */ import jetbrains.mps.ide.findusages.model.CategoryKind; import jetbrains.mps.ide.messages.Icons; import org.jetbrains.annotations.Nullable; import jetbrains.mps.ide.findusages.model.SearchResult; import org.jetbrains.mps.openapi.model.SNode; import jetbrains.mps.util.Pair; import org.jetbrains.mps.openapi.module.SModule; import jetbrains.mps.project.validation.ValidationProblem; import org.jetbrains.mps.openapi.model.SModel; public abstract class ModelCheckerIssue { public static final CategoryKind CATEGORY_KIND_SEVERITY = new CategoryKind("Severity", Icons.ERROR_ICON, "Group by severity"); public static final CategoryKind CATEGORY_KIND_ISSUE_TYPE = new CategoryKind("Issue type", jetbrains.mps.ide.findusages.view.icons.Icons.CATEGORY_ICON, "Group by issue type"); private String myMessage; private IModelCheckerFix myFix; private ModelCheckerIssue(String message, @Nullable IModelCheckerFix fix) { myMessage = message; myFix = fix; } public String getMessage() { return myMessage; } public boolean fix() { if (myFix != null) { return myFix.doFix(); } else { return false; } } public boolean isFixable() { return myFix != null; } public static SearchResult<ModelCheckerIssue> getSearchResultForNode(SNode node, String message, IModelCheckerFix fix, String severity, String issueType) { ModelCheckerIssue issue = new ModelCheckerIssue.NodeIssue(node, message, fix); return new SearchResult<ModelCheckerIssue>(issue, node, new Pair<CategoryKind, String>(CATEGORY_KIND_SEVERITY, severity), new Pair<CategoryKind, String>(CATEGORY_KIND_ISSUE_TYPE, issueType)); } public static SearchResult<ModelCheckerIssue> getSearchResultForModule(SModule module, ValidationProblem vp, String issueType) { ModelCheckerIssue issue = new ModelCheckerIssue.ModuleIssue(module.getModuleName() + ": " + vp.getMessage(), (vp.canFix() ? new ModelCheckerIssue.ValidationFixAdapter(vp) : null)); return new SearchResult<ModelCheckerIssue>(issue, module, new Pair<CategoryKind, String>(CATEGORY_KIND_SEVERITY, toCheckerSeverity(vp)), new Pair<CategoryKind, String>(CATEGORY_KIND_ISSUE_TYPE, issueType)); } public static SearchResult<ModelCheckerIssue> getSearchResultForModel(SModel model, ValidationProblem vp, String issueType) { ModelCheckerIssue issue = new ModelCheckerIssue.ModelIssue(model, vp.getMessage(), (vp.canFix() ? new ModelCheckerIssue.ValidationFixAdapter(vp) : null)); return new SearchResult<ModelCheckerIssue>(issue, model, new Pair<CategoryKind, String>(CATEGORY_KIND_SEVERITY, toCheckerSeverity(vp)), new Pair<CategoryKind, String>(CATEGORY_KIND_ISSUE_TYPE, issueType)); } private static String toCheckerSeverity(ValidationProblem vp) { return (vp.getSeverity() == ValidationProblem.Severity.ERROR ? ModelChecker.SEVERITY_ERROR : ModelChecker.SEVERITY_WARNING); } public static class NodeIssue extends ModelCheckerIssue { private SNode myNode; public NodeIssue(SNode node, String message, IModelCheckerFix fix) { super(message, fix); myNode = node; } @Override public boolean fix() { if (myNode.getModel() == null) { return false; } else { return super.fix(); } } public SNode getNode() { return myNode; } } public static class ModuleIssue extends ModelCheckerIssue { public ModuleIssue(String message, IModelCheckerFix fix) { super(message, fix); } } public static class ModelIssue extends ModelCheckerIssue { private SModel myModel; public ModelIssue(SModel model, String message, IModelCheckerFix fix) { super(message, fix); myModel = model; } public SModel getModel() { return myModel; } } /*package*/ static class ValidationFixAdapter implements IModelCheckerFix { private final ValidationProblem myIssue; public ValidationFixAdapter(ValidationProblem validationIssue) { myIssue = validationIssue; } public boolean doFix() { if (!(myIssue.canFix())) { return false; } myIssue.fix(); return true; } } }