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