package jetbrains.mps.ide.modelchecker.platform.actions;
/*Generated by MPS */
import java.util.List;
import jetbrains.mps.ide.findusages.model.SearchResult;
import org.jetbrains.mps.openapi.model.SModel;
import org.jetbrains.mps.openapi.util.ProgressMonitor;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.mps.openapi.model.SNode;
import jetbrains.mps.internal.collections.runtime.ListSequence;
import jetbrains.mps.errors.MessageStatus;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.AttributeOperations;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.IAttributeDescriptor;
import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SLinkOperations;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations;
public abstract class SpecificChecker {
public SpecificChecker() {
}
public abstract List<SearchResult<ModelCheckerIssue>> checkModel(SModel model, ProgressMonitor progressContext);
protected static void addIssue(List<SearchResult<ModelCheckerIssue>> results, @NotNull SNode node, String message, String severity, String issueType, IModelCheckerFix fix) {
if (filterIssue(node)) {
ListSequence.fromList(results).addElement(ModelCheckerIssue.getSearchResultForNode(node, message, fix, severity, issueType));
}
}
public static String getResultCategory(MessageStatus messageStatus) {
switch (messageStatus) {
case ERROR:
return ModelChecker.SEVERITY_ERROR;
case WARNING:
return ModelChecker.SEVERITY_WARNING;
case OK:
return ModelChecker.SEVERITY_INFO;
default:
return ModelChecker.SEVERITY_ERROR;
}
}
/**
* drops only issues in tests
* ErrorReportUtil.shouldReportError => SpecificChecker.filterIssue
*/
public static boolean filterIssue(SNode node) {
SNode container = AttributeOperations.getAttribute(node, new IAttributeDescriptor.NodeAttribute(MetaAdapterFactory.getConcept(0x8585453e6bfb4d80L, 0x98deb16074f1d86cL, 0x11b07a3d4b5L, "jetbrains.mps.lang.test.structure.NodeOperationsContainer")));
if (container == null) {
return true;
}
for (SNode property : SLinkOperations.getChildren(container, MetaAdapterFactory.getContainmentLink(0x8585453e6bfb4d80L, 0x98deb16074f1d86cL, 0x11b07a3d4b5L, 0x11b07abae7cL, "nodeOperations"))) {
if (SNodeOperations.isInstanceOf(property, MetaAdapterFactory.getConcept(0x8585453e6bfb4d80L, 0x98deb16074f1d86cL, 0x11b01e7283dL, "jetbrains.mps.lang.test.structure.NodeErrorCheckOperation"))) {
return false;
}
}
return true;
}
}